目录
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