arm汇编指令集整理

本文详细介绍了ARM汇编指令集,包括b, bl、mov、ldr, str, stm, ldm等常用指令,以及条件变量、伪指令在程序中的作用。同时,探讨了ARM-Thumb过程调用标准(ATPCS)中的规则,如寄存器使用、数据栈管理和参数传递。" 136218211,14655166,VMware支持包收集全攻略,"['服务器', '运维', '云计算']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在学习汇编的时候,我们常常会被要去记忆各种各样的指令集所烦恼,其实在开发过程中,我们需要使用的指令就那么几条,下面是我们在使用中的积累:

一、常用汇编指令

1. b, bl  (相对跳转指令)

2. mov  (数据传输, ldr地址读取伪指令)        

<span style="font-family:SimSun;">mov r1, r2               ;将r2里面的值复制到r1中

mov r1, #4096            ;常数必须用立即数表示</span>

当不知道数是否是"立即数"来表示时,可以使用ldr来赋值。ldr是伪指令, 由编译器会把它扩展成真正的指令。

如果是立即数用mov指令替换,否则 编译时将改常数保存在某个位置,使用内存读取指令把它读出来。

 ldr 本意为大范围的地址读取伪指令

<span style="font-family:SimSun;">       ldr r1, =4096    ; 把常量赋给寄存器
       ldr r2, =label   ; 获取代码的绝对地址
label:
       ...</span>

    movs : 数据传输,并且影响z条件标志位,如果目标寄存器为0,则z条件标志位为1,

               接下来beq就成立,如下:

<span style="font-family:SimSun;">        movs r10, r5                     ; invalid processor (r5=0)?
        beq  error_p                   ; yes, error 'p'
error_p:
        ...
</span>

3.ldr, str, stm, ldm

3.1 ldr, str

         ldr的第二个参数前面是"="时,表示伪指令,否则为内存访问指令        

<span style="font-family:SimSun;">ldr r0, [r1]         //从r1中的存储器地址处读取一个字,然后放入到r0中
str r0, [r1]         //把r0的值写入寄存器r1所指向的地址中。</span>

3.2  stm ldm(多寄存器加载/存储指令)

         ‘!’ : 表示指令执行后寄存器被更新。

                stmia r0!,  {r2-r7}  //将r2-r7的数据存储到r0指向的地址,r0值更新

                ldmia r0!,  {r2-r7}  //加载r0指向的地址上的多字数据,保存到r2-r7中,r0的值更新。

          IA  执行后增加  (increase after), 这时对应的{r2-r7},赋值的顺序是r2~r7

          IB  执行前增加  (increase before)

          DA 执行后减少 (decrease after), 这时对应的{r2-r7}, 赋值的顺序是r7-r2

          DB 执行前减少 (decrease before)

3.3 小结

         ldm ldr 都是往寄存器里面load,ldm是内存往寄存器组,ldr是寄存器往寄存器。

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值