目录 load(LD加载)/srore(ST存储)指令:访问(读写)内存 跳转指令实现程序的的跳转,本质就是修改了PC寄存器 @方式一直接去修改pc寄存器的值(不建议使用,需要我们自己去计算) MOV PC, #0x18 @方式二B FUNC 不带返回的跳转指令,本质就是将pc寄存器的值修改成跳转标号下第一条指令的地址 @方式三带返回的跳转指令,本质就是将pc寄存器的值修改成跳转标号下第一条指令的地址 BL FUNC @程序返回MOV PC, LR ARM指令的条件码不是指令,指令的后缀,通过添加后缀能够决定指令在什么条件下执行 @比较指令CMP R1,R2 @CMP的本质就是一条减法指令(SUNS),只是没有将运算的结果存入寄存器 没有目标寄存器,结果放在CPSR中的n、z、c、v中 @== z=1 @!= z=0 @< c=0 @<= c=0或z=1 @> c=1且z=0 @>= c=1 条件码助记后缀可以放在B后, 如BEQ FUNC @if(EQ){B FUNC} 本质:if(z==1){B FUNC} 如BNE FUNC @if(EQ){B FUNC} 本质:if(z==0){B FUNC} ARM指令集中大多数指令都可以带条件码后缀 内存访问指令(一)load(LD加载)/srore(ST存储)指令:访问(读写)内存@写内存MOV R1, #0xFF000000 MOV R2, #0x40000000 STR R1,[R2] 将R1寄存器中的数据存储到R2的内存空间 @读内存LDR R3,[R2] 将内存中R2指向的内存空间中的数据读取到R3寄存器 MOV R1, #0xFFFFFFFF MOV R2, #0x40000000 STRB R1,[R2]写入最后一个字节 STRH R1,[R2]写入最后两个字节 LDR指令同样支持以上两个指令 ARM指令的寻址方式寻址方式就是CPU去寻找一个操作数的方式 @立即寻址MOV R1 , #1 ADD R1, R2, #1 @寄存器寻址ADD R1, R2, R3 @寄存器移位寻址MOV R1, R2, LSL #1 @寄存器间接寻址STR R1, [R2] @基址加变址寻址MOV R1, #0xFFFFFFFF MOV R2, #40000000 MOV R3, #4 STR R1, [R2,R3] 将R1寄存器中的数据写入到R1+R3指向的内存空间 STR R1, [R2, R3, LSL #1] 将R1寄存器中的数据写入到R2+(R3<<1)指向的内存空间 @基址加变址寻址的索引方式@前索引MOV R1, #0xFFFFFFFF MOV R2, #40000000 STR R1, [R2,#8] 将R1寄存器中的数据写入到R2+8指向的内存空间 @后索引MOV R1, #0xFFFFFFFF MOV R2, #40000000 STR R1, [R2],#8 将R1寄存器中的数据写入到R2指向的内存空间,然后R2自增8 @自动索引MOV R1, #0xFFFFFFFF MOV R2, #40000000 STR R1, [R2,#8]! 将R1寄存器中的数据写入到R2+8指向的内存空间,然后R2自增8 以上寻址方式和索引方式同样适用于LDR |
原文地址:https://blog.csdn.net/m0_72760584/article/details/131696266
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://www.msipo.com/article-781.html 如若内容造成侵权/违法违规/事实不符,请联系MSIPO邮箱:3448751423@qq.com进行投诉反馈,一经查实,立即删除!
Copyright © 2023, msipo.com