如何申请一个网站,360网站收录提交,天津百度推广,淮安app开发学习 Linux 系统启动流程#xff0c;必须熟悉几个汇编指令#xff0c;总结给大家。
这里不是最全的#xff0c;只列出一些最常用的汇编指令。
一#xff0e;数据处理指令
1.数据传送指令
【MOV指令】
把一个寄存器的值(立即数)赋给另一个寄存器#xff0c;或者将一个…学习 Linux 系统启动流程必须熟悉几个汇编指令总结给大家。
这里不是最全的只列出一些最常用的汇编指令。
一数据处理指令
1.数据传送指令
【MOV指令】
把一个寄存器的值(立即数)赋给另一个寄存器或者将一个常量赋给寄存器。
MOV指令的格式为
MOV 目的寄存器源操作数MOV R1R0 将寄存器R0的值传送到寄存器R12.算术运算指令
(1)【加法指令】ADD
ADD 目的寄存器操作数1操作数2ADD指令用于把两个操作数相加并将结果存放到目的寄存器中。
ADD R0R1R2 R0 R1 R2
ADD R0R1#256 R0 R1 256(2)【带进位的加法指令】ADC
ADC 目的寄存器操作数1操作数2ADC指令用于把两个操作数相加再加上CPSR中的C条件标志位的值并将结果存放到目的寄存器中。
(3)【减法指令】SUB
SUB 目的寄存器操作数1操作数2把操作数1减去操作数2并将结果存放到目的寄存器中。
SUB R0R1R2 R0 R1 - R2
SUB R0R1#256 R0 R1 - 2563.比较指令
(1)【直接比较指令】CMP
CMP 操作数1操作数2CMP R1R0将寄存器R1的值与寄存器R0的值相减并根据结果设置CPSR的标志位
CMP R1100将寄存器R1的值与立即数100相减并根据结果设置CPSR的标志位4.逻辑运算指令
(1)【逻辑与指令】AND
AND 目的寄存器操作数1操作数2AND 指令用于在两个操作数上进行逻辑与运算并把结果放置到目的寄存器中。
AND R0R03 该指令保持R0的0、1位其余位清零。(2)【逻辑或指令】ORR
ORR 目的寄存器操作数1操作数2ORR 指令用于在两个操作数上进行逻辑或运算并把结果放置到目的寄存器中。
ORR R0R03 该指令设置R0的0、1位其余位保持不变。二转移指令
【跳转指令】
B 跳转指令
BL 带返回的跳转指令
BLX 带返回和状态切换的跳转指令
BX 带状态切换的跳转指令三程序状态寄存器访问指令
1、【MRS指令】
MRS 通用寄存器程序状态寄存器CPSR或SPSRMRS R0CPSR 传送CPSR的内容到R0
MRS R0SPSR 传送SPSR的内容到R02、【MSR指令】
MSR 程序状态寄存器CPSR或SPSR_域操作数MSR CPSRR0 传送R0的内容到CPSR
MSR SPSRR0 传送R0的内容到SPSR资料直通车Linux内核源码技术学习路线视频教程内核源码 学习直通车Linuxc/c高级开发【直播公开课】 零声白金VIP体验卡零声白金VIP体验卡含基础架构/高性能存储/golang/QT/音视频/Linux内核 四加载/存储指令
ARM 微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据加载指令用于将存储器中的数据传送到寄存器存储指令则完成相反的操作。
1、【LDR指令】
LDR 目的寄存器存储器地址LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。
LDR R0[R1] 将存储器地址为R1的字数据读入寄存器R0。
LDR R0[R1R2] 将存储器地址为R1R2的字数据读入寄存器R0。
LDR R0[R18] 将存储器地址为R18的字数据读入寄存器R0。
LDR R0[R1R2] 将存储器地址为R1R2的字数据读入寄存器R0并将新地址R1R2写入R1。
LDR R0[R18] 将存储器地址为R18的字数据读入寄存器R0并将新地址R18写入R1。LDRB 和 LDRH 指令大家可以百度。
2、【STR指令】
STR 源寄存器存储器地址STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用且寻址方式灵活多样使用方式可参考指令LDR。
STR R0[R1]8 将R0中的字数据写入以R1为地址的存储器中并将新地址R18写入R1。
STR R0[R18] 将R0中的字数据写入以R18为地址的存储器中。STRB 和 STRH指令大家可以百度。
五异常产生指令
1、【SWI指令】
SWI 24位的立即数SWI指令用于产生软件中断以便用户程序能调用操作系统的系统例程。
SWI 0x02 该指令调用操作系统编号位02的系统例程。2、【BKPT指令】
BKPT 16位的立即数BKPT指令产生软件断点中断可用于程序的调试。
六伪代码
1.【AREA】
一个汇编程序至少要包含一个段当程序太长时也可以将程序分为多个代码段和数据段因此在汇编程序的开头我们一般的语句会用到AREA。
AREA 段名 属性 1 属性 2 .... AREA Init CODE READONLY 定义一个代码段段名为 Init 属性为只读。 2、【ALIGN】
ALIGN { 表达式 { 偏移量 }} ALIGN 伪指令可通过添加填充字节的方式使当前位置满足一定的对其方式。其中表达式的值用于指定对齐方式可能的取值为2的幂如 1 、2 、4 、8 、16 等。eg : xxx ALIGN(4)
3、【CODE16、CODE32】
CODE16 或 CODE32 CODE16 伪指令通知编译器其后的指令序列为 16 位的 Thumb 指令。
CODE32 伪指令通知编译器其后的指令序列为 32 位的 ARM 指令。
4、【ENTRY】
ENTRY ENTRY(stext)
很常见ENTRY 伪指令用于指定汇编程序的入口点。在一个完整的汇编程序中至少要有一个 ENTRY 也可以有多个当有多个 ENTRY 时程序的真正入口点由链接器指定但在一个源文件里最多只能有一个 ENTRY 可以没有。
5、【END】
END END 伪指令用于通知编译器已经到了源程序的结尾。 原文作者一起学嵌入式