L9-D7跳转与存储器访问指令

文章详细介绍了ARM指令集中的跳转指令,包括直接修改PC寄存器和使用BL指令带返回的跳转。此外,还讲解了条件码在比较指令中的应用,以及Load/Store指令进行内存读写的例子。同时,文中提到了多种寻址方式,如立即寻址、寄存器寻址和寄存器移位寻址等。

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

目录

7.1跳转指令

7.2ARM指令的条件码

7.3内存访问指令

7.4ARM指令的寻址方式

作业


7.1跳转指令

@1.2跳转指令:实现程序的跳转,本质是修改了PC寄存器
    @方式一:直接修改PC寄存器的值(不建议使用,需要自己计算跳转位置地址)
MAIN:
    MOV R1,#1
    MOV R2,#2
    MOV R3,#3
    MOV PC,#0x18        @修改地址
    MOV R4,#4
    MOV R5,#5
FUNC:
    MOV R6,#6
    MOV R7,#7
    MOV R8,#8

    @方式二:不带返回的跳转指令
MAIN:
    MOV R1,#1
    MOV R2,#2
    MOV R3,#3
    B FUNC            @
    MOV R4,#4
    MOV R5,#5
FUNC:
    MOV R6,#6
    MOV R7,#7
    MOV R8,#8

    @方式二:带返回的跳转指令
MAIN:
    MOV R1,#1
    MOV R2,#2
    MOV R3,#3
    BL FUNC           @会自动保存下一条指令的地址存储到LR寄存器。
    MOV R4,#4
    MOV R5,#5
FUNC:
    MOV R6,#6
    MOV R7,#7
    MOV R8,#8
    MOV PC,LR

7.2ARM指令的条件码

@比较指令
    CMP R1,R2        @CMP的本质是减法指令(SUBS),只是没有将运算的结果存入寄存器

条件码

 

 ​​​​​

 ARM指令集中大多数指令都可以带条件码后缀

 


7.3内存访问指令

@1.3Load/Srore指令:访问(读写)内存
    @写内存
    MOV R1,#0xFF000000
    MOV R2,#0x40000000
    STR R1,[R2]        
    @将R1寄存器中的数据存储到R2指向的内存空间

 右侧窗口查看内存

    @读内存
    LDR R3,[R2]
    @将R2指向的内存空间中的数据读取到R3寄存器


    @LDR指令同样支持以上后缀

7.4ARM指令的寻址方式

    @寻址方式就是CPU去寻找一个操作数的方式
    @立即寻址
    MOV R1,#1

    @寄存器寻址
    ADD R1,R2,R3

    @寄存器移位寻址
    MOV R1,R2,LSL,#1

    @寄存器间接寻址
    STR R1,[R2]

    @...

 


作业

1.使用汇编语言实现100以内的正整数之和
注:将最终的运算结果存储在R2寄存器

.text

.global _start

_start:

    MOV R2, #0@sum

    MOV R1, #0@num

BL ADDSUM

B STOP

ADDSUM:

    ADD R2, R2, R1 @将R2+R1的结果存储到R2寄存器

    ADD R1, R1, #1 @R1自增1后的结果存入R1寄存器

    CMP R1, #100 @比较自增的最大值是否等于100

    MOV PC, LR @等于的话将最后的求和结果存入程序计数器

    B ADDSUM

STOP:

B STOP

.end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值