目录
一、汇编基本语法
1、汇编指令的最典型书写模式
二、常用汇编指令
1、push压栈指令
2、pop出栈指令
3、sub指令
4、add指令
5、movs数据传输指令
6、str指令
7、ldr指令
8、bl指令
9、MOVW指令
10、MOVT指令
三、代码分析
1、代码段1
一、汇编基本语法
1、汇编指令的最典型书写模式
操作数:一般跟在操作码后面,一个操作码后可以跟多个操作数。
注释:;是注释符号 类似C语言的 “//” 和 “/*” 。
二、常用汇编指令
1、push压栈指令
把若干寄存器的值压入堆栈中。
示例:
push {r7};将寄存器R7的值压入栈中。
push {r7, lr};将寄存器R7和LR的值压入栈中。
2、pop出栈指令
从堆栈中弹出若干的寄存器的值。
示例:
pop {r7}; 将栈顶的值弹出到R7寄存器中。
pop {r7, pc};将栈顶的两个值弹出到R7和PC寄存器中。
3、sub指令
减法指令。有以下多种用法:
SUB Rd, Rn ;同C语言 Rd -= Rn; //Rd减去Rn并将结果保存到Rd。
SUB Rd, Rn, #imm3 ;同C语言 Rd = Rn-imm3; //Rn减去立即数imm3并将结果保存到Rd。
SUB Rd, #imm8 ;同C语言 Rd -= imm8; //Rd减去立即数imm8并将结果保存到Rd。
SUB Rd, Rn, Rm ;同C语言 Rd = Rn-Rm; //Rn减去Rm并将结果保存到Rd。
示例:
sub sp, sp, #16; sp寄存器中的值减去立即数16,将结果赋值到sp寄存器中。表示栈向下生长。
4、add指令
加法指令。有以下多种用法:
ADD Rd, Rn, Rm ;同C语言 Rd = Rn+Rm;Rn加上Rm并将结果保存到Rd。
ADD Rd, Rm ;同C语言 Rd += Rm;Rd加上Rm并将结果保存到Rd。
ADD Rd, #imm ;同C语言 Rd += imm;Rd加上立即数imm并将结果保存到Rd。
示例:
add r7, sp, #0; sp寄存器的值加零,将结果保存到寄存器R7。
5、movs数据传输指令
movs r0, #10;将立即数10保存到寄存器R0。
6、str指令
把一个寄存器按字存储到存储器中。把CPU内部寄存器的数据写出到外部RAM等存储器。
STR R0,[R1,#12] ;将R0中的字数据写入以R1+12为地址的存储器中。
7、ldr指令
从存储器读取数据到寄存器中。从RAM等存储器读取数据到CPU的寄存器中。
ldr r2, [r7, #12]; 从以R1+12为地址的存储器中读取数据到R2寄存器。
8、bl指令
转移并连接。用于呼叫一个子程序,返回地址被存储在 LR 中。对应C语言的函数调用。
BL Putc;调用值程序Putc,Putc为子程序的入口地址。
9、MOVW指令
将16位立即数传送到寄存器的低半字[15:0]中,并将高半字[31:16]清零。
10、MOVT指令
将16位立即数传送到寄存器的高半字[31:16]中。
三、代码分析
1、代码段1
int a = 0; int b = 1; int c = a + b;
讯享网


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70237.html