汇编知识MOV,MRS,MSR,PUSH和POP指令

处理器做得最多的事情就是在处理器内部来回的进行数据传递

  1. 将数据从一个寄存器传递到另一个寄存器中

  2. 将数据从一个寄存器传递到特殊寄存器,例如CPSR,SPSR寄存器

  3. 将立即数传递到寄存器。

数据传输常用的三个指令:MOV,MRS,MSR指令

常用的存储器访问指令有两种:LDR和STR这两个指令

LDR指令:

LDR主要用于存储加载数据到寄存器RX中,LDR也可以将一个立即数加载到寄存器RX中,LDR加载立即数的时候要使用"-"而不是"#",在嵌入式开发中,LDR最常用的就是读取CPU寄存器中的值:

例如:

LDR R0, =0X0209C000 @将寄存器地址0x0209c000加载到R0中也就是R0=0x0209c000

LDR R1, R0 @读取地址中的数据到R1寄存器中

上述代码就是读取寄存器值保存到R1寄存器中

STR指令:

LDR指令是从寄存器中读取数据,STR就是将数据写入到寄存器中

LDR R0, =0X0209C000 @将寄存器地址0x0209c000加载到R0中也就是R0=0x0209c000

LDR R1, = 0X20000002 @R1保存要写入到寄存器的值

STR R1, R0 @将R1中的值写入到R0中所保存的地址中

注:LDR和STR都是按照字进行读取和写入的,也就是操作的32位数据,如果要按照字节,半字进行操作的话可以在指令"LDR"后面加上B或H,例如按字节操作的指令LDRB,STRB,半字操作的指令LDRH,STRH。

PUSH和POP指令

PUSH :将寄存器列表存入栈中

POP: 从栈中恢复寄存器列表

将R0~R3,R12进行压栈以后的堆栈示意图,此时SP指向0x7fffffec。

POP{R0~R3,R12} @在恢复R0~R3,R12

出栈就是从栈顶,也就是SP当前执行的位置开始,地址依次减小来提取堆栈中的数据

到要恢复的寄存器列表中

PUSH和POP的另一种写法是STMFD SP! 和 LDMFD SP!

相关推荐
iCxhust8 小时前
如何利用iret修改cs ip
汇编·单片机·嵌入式硬件·微机原理·8088单板机
是星辰吖~1 天前
X86反汇编:透视之眼_反编译特训(1-2)
汇编
是星辰吖~2 天前
X86反汇编:破茧成蝶 —— 赤裸逻辑与机械之心(1-1)
汇编
逆向命运2 天前
PC企微搜索手机号窗口绕过
c语言·汇编·c++·飞书·企业微信
是星辰吖~3 天前
函数战争:内存领地的争夺与撤退
汇编
止观止3 天前
在 WSL2 上从零搭建 ARM 混合编程环境
汇编·arm开发·嵌入式开发·混合编程
say_fall4 天前
8086汇编程序设计_从基础到实战
开发语言·汇编·8086
浩浩测试一下4 天前
LoadPE &&& 原理以及作用 (ASM汇编版本)>>01
汇编·免杀·pe结构·windows编程·二进制逆向·系统loadpe
ThornArmor5 天前
【控制篇】斩断无休止空转:4-bit 指令集里的跳转律令与时序状态机
c语言·汇编·c++·单片机·嵌入式硬件
大阳1235 天前
ARM4.(通过汇编,c语言,固件库点亮LED)
c语言·开发语言·汇编