ARM指令集--跳转指令 与 内存访问指令

跳转指令:

实现程序的跳转,本质就是修改了PC寄存器

方式一:

直接去修改PC寄存器的值 (不建议使用,需要我们自己去计算绝对地址)

ARM指令集--跳转指令 与 内存访问指令_第1张图片方式二:不带返回的跳转指令“B”,本质就是将PC寄存器的值修改成跳转标号下第一条指令的地址

ARM指令集--跳转指令 与 内存访问指令_第2张图片方式二:带返回的跳转指令“BL”,本质就是将PC寄存器的值修改成跳转标号下第一条指令的地址,同时保存下一条指令到LR寄存器ARM指令集--跳转指令 与 内存访问指令_第3张图片

mov PC,LR                   函数的返回

条件码

ARM指令集--跳转指令 与 内存访问指令_第4张图片

比较指令


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

ARM指令集--跳转指令 与 内存访问指令_第5张图片

题目:

ARM指令集--跳转指令 与 内存访问指令_第6张图片

答案:

ARM指令集--跳转指令 与 内存访问指令_第7张图片

0-100之和:

.text        

             MOV R1, #1
             MOV R2, #1
             MOV R3, #100
START:
             CMP R2,R3
             BNE  STOP
             ADDLE R2, R1, R2
             B START
            
stop:                    
    B stop
 
.end                    

内存访问指令:

load/store 加载和存储内存指令

STR->写内存

ARM指令集--跳转指令 与 内存访问指令_第8张图片

STRB :  往内存中存入一个字节

STRH :  往内存中存入两个字节

此后缀LDR同样适用

可以验证出:    ARM使用的是小端对齐;高地址存放低位,低地址存放高位

LDR->读内存

ARM指令集--跳转指令 与 内存访问指令_第9张图片代码汇编过程:

ARM指令集--跳转指令 与 内存访问指令_第10张图片

ARM指令集--跳转指令 与 内存访问指令_第11张图片

过程

1.从内存中取出                       2.CPU计算                                3.存入内存中去

寻址方式:寻址方式就是CPu去寻找一个操作数的方式

ARM指令集--跳转指令 与 内存访问指令_第12张图片

基址加变址寻址

ARM指令集--跳转指令 与 内存访问指令_第13张图片

中括号中间的是地址

ARM指令集--跳转指令 与 内存访问指令_第14张图片

前索引   后索引

ARM指令集--跳转指令 与 内存访问指令_第15张图片前索引执行后,R2存的地址不变

自动索引,R2的地址变化,且R1存的地址为R2变化的值

ARM指令集--跳转指令 与 内存访问指令_第16张图片

以上寻址方式和索引方式同样适用于LDR

你可能感兴趣的:(arm开发)