首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏我在本科期间写的文章

    4 汇编语言程序设计

    4 汇编语言程序设计 表达式中的运算符和操作符在 x86 汇编语言中的用法。 表达式 表达式是由常数、变量、操作符和运算符组合而成的计算公式。

    43210编辑于 2024-09-13
  • 来自专栏IC知识库平台

    RISC-V 汇编语言程序设计4汇编语言格式及ABI

    1.汇编语言格式简介 以asm_run_seg.S为例: .equ BYTE_DELAY, 0x00100000 .equ GPIO_ADDR, 0xf0000000 .globl _start _ = x7) goto loop ADDI t3, x0, 0; # t3 = 0 汇编的指示符(directive)的格式使用“.” + 关键词 .globl(注意不是.global 在使用标号时后面跟冒号”:”,比如LOOP: ,_start: 一般汇编指令格式:指令 + 空格 + 寄存器 + “,”+寄存器 + “,” + 寄存器(或立即数),比如 ADDI t3,x0,0;。 也有部分汇编指令只接一个寄存器和立即数,格式为指令 + 空格 + 寄存器 + “,”+ 立即数,比如 LI a3,0x08; 汇编指令以分号”;”结束,常量定义以回车换行结束,没有分号”;”。

    1.8K20发布于 2021-08-03
  • 来自专栏xingoo, 一个梦想做发明家的程序员

    汇编语言 手记4

    简单的汇编指令 CPU执行后,寄存器中的数据改变为如下: CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。 这个唯一的地址就是物理地址。

    94850发布于 2018-01-17
  • 来自专栏Android点滴分享

    汇编学习(4), 整数,栈,浮点

    本篇介绍 本篇介绍汇编的整数,浮点运算,还有栈。 Incremented:",0 deci db "Number 1 Decremented:",0 sali db "Number 1 Shift left 2 (x4) :",0 sari db "Number 1 Shift right 2 (/4):",0 sariex db "Number 1 Shift right 2 (/4) with : 512 Number 1 Shift right 2 (/4): 32 Number 1 Shift right 2 (/4) with sign extension: -3 The product 这儿会见证一次数字的神奇: 举一个例子, 比如一个8位的寄存器,需要表示 -4,那么结果如下: 0000 0100 => 1111 1011 + 1 1111 1100 (-4 的补码,也就是计算机中真正的存储形式

    59520编辑于 2022-12-07
  • 来自专栏Linux驱动

    汇编指令-str存储指令(4)

    实例1: str   r1,[r2]        ; 将r1中的值存到r2所指定的地址中 str  r1,[r2,#4]   ;将r1中的值存到r2+4所指定的地址中 str   r1,[r2],#4 //每个寄存器4字节,r2=r0+13*4=最后一个存储器寄存器+4 0:  ldr r3, [r0], #4                                       /将r0 的内容存到r3的内容中,同时r0地址+=4; str r3, [r1], #4                                      //将r3的内容存到r1所指的地址中,同时 Tacp<<2)+(B3_PMC)) .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp <<2)+(B4_PMC)) .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<

    2.5K50发布于 2018-01-03
  • 来自专栏Hk_Mayfly的学习记录

    汇编语言》课程设计2

    1 assume cs:code,ss:stack 2 stack segment 3 db 128 dup (0) 4 stack ends 5 code segment db '4) set clock',0 31 ;相减得到的是标号的相对位置,+7e00h得到的绝对位置 32 func_pos dw offset func0-offset boot boot+7e00h 35 dw offset func3-offset boot+7e00h 36 dw offset func4- zhidao.baidu.com/question/564008138.html int 16的1号程序:https://zhidao.baidu.com/question/511189643.html 总结   汇编的难度并不大 ,我认为在有编程的基础上,学习汇编要做到细致,细致的理解计算机编程的编译过程,对于我理解其他编程语言也有很大的帮助。

    1K20发布于 2019-07-30
  • 来自专栏太阳影的学习记录

    操作系统(4)实验0——准备知识、基本内联汇编、扩展内联汇编

    AT&T: _variable(%eax) Intel: [eax + _variable] AT&T: _array( ,%eax, 4) Intel: [eax × 4 + _array] AT&T: _array(%ebx, %eax,8) Intel: [ebx + GCC提供了两种内联汇编语句:基本内联汇编语句和拓展内联汇编语句。 这是是为了让 gcc 把内联汇编代码翻译成一般的汇编代码时能够保证换行和留有一定的空格。最终GCC编译出来的汇编代码就是双引号里面的内容。 参考资料 32位汇编语言学习笔记(3)--leal和算术运算指令 GCC内联汇编基础 内嵌汇编 %0,%1 是什么

    1.2K20发布于 2021-10-15
  • 来自专栏Hk_Mayfly的学习记录

    汇编语言》课程设计2

    ;设置CS:IP为0:7e00h mov ax,0 push ax mov ax,7e00h push ax retf mov ax,4c00h db '4) set clock',0 ;相减得到的是标号的相对位置,+7e00h得到的绝对位置 func_pos dw offset func0-offset boot+7e00h offset boot+7e00h time db 'YY/MM/DD hh:mm:ss',0 cmos db 9,8,7,4,2,0 clock1 db 'F1 zhidao.baidu.com/question/564008138.html int 16的1号程序:https://zhidao.baidu.com/question/511189643.html 总结   汇编的难度并不大 ,我认为在有编程的基础上,学习汇编要做到细致,细致的理解计算机编程的编译过程,对于我理解其他编程语言也有很大的帮助。

    1.2K20发布于 2019-07-30
  • 来自专栏c++与qt学习

    汇编语言设计程序篇-03

    汇编语言设计程序篇-03 用汇编语言写的源程 用汇编语言编写程序的工作过程 程序中的三种伪指令 源程序经编译连接后变为机器码 汇编程序的结构 如何写出一个程序来? 段前缀的使用 在代码段中使用数据 应用案例 在代码段中使用栈 以数据逆序存放为例 数据逆序存放程序 在Debug中的执行结果 将数据、代码、栈放入不同 段 在Debug中执行 ---- 本系列文章参考汇编语言第四版和汇编语言程序设计 贺利坚主讲整理而成 ---- 用汇编语言写的源程序 用汇编语言编写程序的工作过程 ---- 程序中的三种伪指令 CS:IP寄存器是定位代码段位置的 ---- 源程序经编译连接后变为机器码 - --- 汇编程序的结构 在Debug中直接写入指令编写 的汇编程序 适用于功能简单、短小精悍的程序 只需要包含汇编指令即可 单独编写成源文件后再编译为可执行文件的程序 适用于编写大程序 需要包括汇编指令 codesg codesg segment mov ax,0123H mov bx,0456H add ax,bx add ax,ax mov ax,4c00H

    95210编辑于 2022-06-19
  • 来自专栏sringboot

    x86汇编加载用户程序-4-2

    屏幕光标控制 索引寄存器的端口号是 0x3d4,可以向它写入一个值,用来指定内部的某个寄存器。 在显卡文本模式下25x80,换行就是+80,移动到行首就是 除以80取商再乘以80 疑问 汇编有函数吗? 一下是我的理解,有如果错误欢迎批评指正。 所以必须明确汇编在运行的时候没有遇到转移指令,call和ret或retf的时候都是一步一步向下执行的。 code_entry dw start dd section.code_1.start realloc_tbl_len dw (header_end-code_1_segment)/4 运行虚拟机显示如下 资源 汇编代码及二进制文件:https://github.com/duofanCoder/x86-NASM/tree/master/ASM-Learn-4-2/code 虚拟机固定大小硬盘

    1K30编辑于 2021-12-06
  • 来自专栏IC知识库平台

    RISCV 汇编语言程序设计 (1) 跑马灯设计

    本文主要介绍汇编语言程序设计中跑马灯程序的设计要求,GPIO的概念和相关硬件知识,为之后分析汇编程序做准备。 1. 跑马灯的设计: 使用汇编语言实现跑马灯。 程序设计要求: 假设系统时钟50Mhz,状态机版本RISC-V CPU约每3个时钟周期执行一条指令。 设计要求:系统中有8个LED(汇编语言代码中使用寄存器x10),在risc-v cpu 的硬件连接中, 我们将 LED[7:0] 连接到 risc-v cpu GPIO外设的A组外设寄存器[7:0], 因为LED在开发板上采用共阳极方式设计,所以FPGA管脚为低电平时LED点亮。如下图原理图中所示。 图1. PC为32位宽寄存器,对应的最大寻址空间是4G。CPU地址分配可参考CPU address map文件。其中包括GPIO专用地址的相关介绍。

    1.6K30发布于 2021-08-02
  • 来自专栏sringboot

    x86汇编加载用户程序-4-1

    只需要像如下的写就可以解决这个问题 SECTION mbr align=16 vstart=0x7c00 如果段定义没有vstart=0,那么汇编地址就会从程序开头算起。 [0x0c]段重定位表的开始汇编地址。 加载过程 读取用户程序所在磁盘的扇区,然后加载进内存某个地址,用户程序头部的信息,根据加载的地址修改段重定位表。 问题:为什么要修改重定位表呢? 28 位的扇区号太长,需要将其分成 4 段,分别写入端口 0x1f3、0x1f4、0x1f5 和 0x1f6 号端口。 用户程序重定位,就需要使用加载的地址和汇编里的汇编地址(也就是偏移地址)相加,计算出实际的物理地址,然后通过移位操作,获取段地址,存入到segment定位表里。 运行虚拟机显示如下 资源 汇编代码及二进制文件:https://github.com/duofanCoder/x86-NASM/tree/master/ASM-Learn-4/code 虚拟机固定大小硬盘

    1K10编辑于 2021-12-06
  • 来自专栏电子工程师成长日记

    设计分享|基于单片机的计数器设计汇编

    具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口 设计内容 01 仿真图 本设计利用protues8.7软件实现仿真设计,具体如图。 Protues也是在单片机仿真设计中常用的设计软件之一,通过设计出硬件电路图,及写入驱动程序,就能在不实现硬件的情况进行电路调试。 02 程序 本设计汇编语言编写,主代码具体如下: ORG 0000H LJMP MAIN ORG 0003H LJMP JIAYI ORG 0013H LJMP JIANYI ORG P0,A MOV A,COUNT ANL A,#0FH MOVC A,@A+DPTR MOV P2,A LJMP XSHI SMBIAO:DB 3FH,06H,5BH,4FH

    1.2K10编辑于 2022-07-27
  • 来自专栏TechBlog

    汇编语言程序设计技巧详解(附例题)

    (5)提供足够的调用信息: 1.寄存器传送参数 2.存储器传送参数 3.堆栈传送参数 模块化设计 ---- 汇编语言程序设计技巧 四种基本结构:顺序结构、分支结构、循环结构和子程序。 PC ← A+DPTR TAB: AJMP     SUB0  ;转移指令表 AJMP  SUB1 AJMP     SUB2       …… AJMP     SUB6 3、循环结构 循环程序结构是汇编语言程序中常见的一种程序结构 DJNZ R4,LOOP1   ;外循环结束?                 RET 4、子程序 能完成某项特定功能的独立程序段,可被反复调用。 子程序设计 (1)子程序入口用标号作为子程序名。              DJNZ    R6,DL1              DJNZ    R7,DL2              RET                        END 模块化设计 模块化设计是指把一个具体的功能分解成多个小的模块,各个模块之间相互独立,而又可以相互传递参数。

    1.9K31编辑于 2022-07-20
  • 来自专栏电子工程师成长日记

    设计分享|单片机LED点阵时钟(汇编

    设计介绍 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。 :比较不同单片机智能手环系统的具体原理,以及同一类传感器性能的区别,分析单片机智能手环系统的研究现状与发展前景; 软硬件设计法:通过软硬件设计实现具体硬件实物,最后测试各项功能是否满足要求。 设计内容 01 仿真实现 本设计利用protues8.7软件实现仿真设计,具体如图。 Protues也是在单片机仿真设计中常用的设计软件之一,通过设计出硬件电路图,及写入驱动程序,就能在不实现硬件的情况进行电路调试。 02 汇编程序 本设计汇编语言编写,主代码具体如下: ORG 0000H LJMP MAIN ORG 0003H LJMP PINT0 ORG 000BH

    1.1K10编辑于 2022-07-27
  • 来自专栏IC知识库平台

    RISC-V 汇编语言程序设计(2)汇编程序asm_run_led

    使用RISC-V 汇编语言,编写一个led 跑马灯的实验 程序分析: LI x8, 0xf0000000; # 设置gpio address; LI是伪指令,可被编译器翻译成LUI risc-v汇编指令集内无专门用来清零的指令。 LI x7, 0x00400000; # x7 设置delay counter 将值0x0040_0000存储到x7寄存器中。 因为led是共阳设计,一端已经是3.3V高电平,led7对应的GPIO接口如果是1,led7不会被点亮。反而其他led灯会被点亮,因为led6-0此时为低电平。所以需要把x10的值整体取反。 SH x0, 4(x8); # addr[0xf000_0004] = 0 as output 用gpio的地址加4,生成方向控制寄存器地址f000_0004。

    1.9K30发布于 2021-08-03
  • 来自专栏乱码三千

    汇编语言之MIPS汇编

    MIPS汇编中的分段处理 .data #数据段 .text #代码段 传送指令 加载立即数指令 li li(load immediate) :用于将立即数传送给寄存器 li $t0,1 ;十六进制数据使用 move 用于将一个寄存器中的数据传送至另一个寄存器当中 move $t0,$t1 # 将寄存器$t1中的数据传送至$t0 系统服务指令 syscall 在C语言中输出文本可以使用printf函数,但是汇编中没有 : scanf("%d",$a); scanf("%d",$b); if(a>b){ printf("YES"); }else{ printf("NO"); } 汇编代码: # 用$t0 ){ s=s+i; i=i+1; } printf("%d",s); 汇编代码: # 用$t0指代i ,$t1指代s .text li $t0 ,1 li $t1 ,0 loop: 0x00000000+0x00000014=0x00000014 使用mips汇编实现二维数组定义 #需求:实现int a[3][3] = {{1, 2, 3}, {5, 6, 7}, { 10, 11

    10.9K31发布于 2021-08-24
  • 来自专栏酷酷的哀殿

    lldb入坑指北(4)-打印任意函数的汇编代码

    x 命令 实际上,lldb 已经提供了一个方便的工具查看汇编代码。 #0x10] 0x1a8dcb734: 0x910043fd add x29, sp, #0x10 ; =0x10 (lldb) b NSLog Breakpoint 4: str x0, [sp, #0x8] 0x104ee9d2c: 0xf90003e1 str x1, [sp] (lldb) x/3i $pc -> 0x104ee9bc4: 2、以汇编格式打印该地址后方的内容。 ? 下面,我们验证一下上面的汇编内容。 首先,我们先查看通过 Xcode 生成的汇编代码,(655-673行) ? 至此,可以确认,通过 x 命令可以正确打印任意函数的汇编代码 参考文章 GDB to LLDB command map GDB Memory lldb

    3.5K20发布于 2020-10-26
  • 来自专栏电子工程师成长日记

    设计分享|单片机抢答器(汇编

    资料内容 01 仿真实现 本设计利用protues8.7软件实现仿真设计,具体如图。 Protues也是在单片机仿真设计中常用的设计软件之一,通过设计出硬件电路图,及写入驱动程序,就能在不实现硬件的情况进行电路调试。 02 汇编程序 本设计汇编语言编写,主代码具体如下: ORG 000 JMP BEGIN TABLE: ,准备接收信号 MOV R4, #0 ; "R4"的位标志值清零。 ;每移一次位,R4位标志值加1 JNC LOOP2 ;如果没有遇到抢答信号返回LOOP1继续移位 MOV A, R4 ;遇到抢答信号把R4

    86420编辑于 2022-07-27
  • 来自专栏LongJava学习资料

    汇编语言篇——顺序程序、循环程序设计

    运行结果:2、下面的程序的功能时将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序,上机调试,跟踪运行结果。 0020h mov es,ax mov bx,0 mov cx,  17h s: mov al,[bx] ; mov es:[bx],al inc bx loop s mov ax,4c00h assume cs:codea segment db 1,2,3,4,5,6,7,8a endsb segment db 1,2,3,4,5,6,7,8b endsc segment db 0,0,0,0,0,0,0,0c          int 21hcode endsend start运行结果:4、程序如下,编写code段中的代码,用push 指令将a段中的钱8个字符型数据,逆序存储到b段中。 sp,10h         mov bx,0         mov cx,8s:  push [bx]         add bx,2         loop s       mov ax,4c00h

    85500编辑于 2023-11-30
领券