ARM指令集

本文详细介绍了ARM处理器的9种寻址方式,包括寄存器寻址、立即寻址、寄存器偏移寻址、寄存器间接寻址、基址寻址、多寄存器寻址、堆栈寻址、块拷贝寻址和相对寻址。通过实例解析了每种寻址方式的工作原理和应用场景,帮助读者深入理解ARM指令集的操作机制。
摘要由CSDN通过智能技术生成

 
ARM处理器有9种寻址方式:
1、寄存器寻址
    操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值操作。
    寄存器寻址指令举例如下:
    MOV        R1,R2        ;R2->R1
    SUB        R0,R1,R2    ;R1-R2->R0
2、立即寻址
    立即寻址指令中的操作码字段后面的地址码部分就是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(立即数)。
    立即寻址指令距离如下:
    SUBS    R0,R0,#1    ;R0-1->R0
    MOV        R0,#0xff00    ;0xff00->R0    
    立即数要以“#”为前缀,表示16进制数值时以“0x”表示
3、寄存器偏移寻址
    寄存器偏移寻址是ARM指令集特有的寻址方式,当第2操作数是寄存器偏移方式时,第2个寄存器操作数在与第1个寄存器操作数结合之前,选择进行移位操作。
    寄存器偏移寻址方式指令举例如下:
    MOV        R0,R2,LSL #3        ;R2的值左移3位,结果放入R0,即R0=R2*8
    ANDS    R1,R1,R2,LSL R3        ;R2的值右移R3位,然后和R1想与操作,结果放入R1
    可采用的移位操作如下:
    LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补0
    LSR:逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补0
    ASL:算术左移(Arithmetic Shift Left),操作数向左移位,低位补0
    ASR:算术右移(Arithmetic Shift Right),移位过程中保持符号不变,即如果源操作数为正数,则字的高端空出的位补0,否则补1
    ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位
    RRX:带扩展的循环右移(Rotate Right eXtended by 1place),操作数右移一位,高端空出的位用原C标志值填充
4、寄存器间接寻址
    寄存器间接寻址指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针
    寄存器间接寻址指令举例如下:
    LDR        R1,[R2]        ;将R2中的数值作为地址,取出此地址中的数据保存在R1中
    SWP        R1,R1,[R2]    ;将R2中的数值作为地址,取出此地址中的数值与R1中的值交换
5、基址寻址
    基址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,基址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。
    基址寻址指令距离如下:
    LDR        R2,[R3,#0x0f]    ;将R3中的数值加0x0f作为地址,取出此地址的数值保存在R2中
    STR        R1,[R0,#-2]        ;将R0中的数值减2作为地址,把R1中的内容保存到此地址位置
6、多寄存器寻址
    多寄存器寻址就是一次可以传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器
    多寄存器寻址指令距离如下:
    LDMIA    R1!,{R2-R7,R12}        ;将R1单元中的数据读出到R2-R7,R12,R1自动加1
    STMIA    R0!,{R3-R6,R10}        ;将R3-R6,R10中的数据保存到R0指向的地址,R0自动加1    这里保存到R0指向的地址是指R0指向的首地址,是指一片内存
7、堆栈寻址
    
8、块拷贝寻址
9、相对寻址
 
 
 
 
 
 
 
 
跳转指令:从程序的一个位置跳转到另一个位置
下面四个指令可以完成32MB的地址空间跳转,可以向前,也可以向后
B        B{条件}    目标地址        //条件可以有,也可以没有
        CMP R1, #1
BL
BLX
BX

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

monkey_llll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值