国庆day6
汇编语言的组成
伪操作
不参与程序的执行,但是用于告诉编译器程序该怎么编译 如:
.text .global .end .if .else .endif .data
汇编指令
汇编器将一条汇编指令编译成一条机器码,在内存里一条指令占4字节内存,一条指令可以实现一个特定的功能。
伪指令
不是指令,但是看似一条指令,可以实现指令类似的功能,一条伪指令可能是由多条指令共同实现。
注释
单行注释:@
多行注释:/**/
条件编译
.if 0
@text
.else
@text
.endif
汇编指令的介绍
基本数据操作指令
数据搬移指令:=
数据位移指令:<< >>
数据算数运算指令:+ - * /
位运算指令:$ | ~ ^
数据比较指令:cmp 第一操作数,第二操作寄存器,其有很多条件码,如果条件码满足则执行对应的指令
跳转指令
内存读写指令
状态寄存器读写指令
软中断指令
汇编指令的基本语法格式
基本格式: {cond}{s} Rd,Rn,#oprand2
解释:
opcode:指令码
cond:条件码
指令不加条件码,指令默认无条件执行
指令加条件码,指令有条件执行
s:状态位
指令不加s,指令执行的结果不会影响CPSR寄存器
指令加s,指令执行的结果会影响CPSR寄存器
Rd:目标寄存器
Rn:第一操作寄存器
#oprand2:第二操作数
1)立即数
2)有效数:将一个数取反之后,变成立即数
3)寄存器
4)经过移位的寄存器
注意事项:
1)汇编指令中不区分大小写
2)汇编指令不需要以;号结尾
3){cond}{s}:需要连在一起写
4)Rd,Rn,#oprand2:需要用逗号分隔开
5) {cond}{s}和Rd,Rn,#oprand2需要用空格分隔开
数据搬移指令
指令码:mov mvn
格式:{cond}{s} Rd,#oprand2
@ 代码1:
mov r0,#0xf @ r0 = 0xf
mov r1,#0xff
@ mov r2,#0xfff @ error
@ mov r3,#0xffff @ error
@ mov r4,#0xfffff @ error
mov r5,#0xffffff
mov r6,#0xfffffff
mov r7,#0xffffffff
/*------------------ ------------------ ---------------*/
@ 代码2:
mvn r5,#0xff @ 0xff按位取反之后,赋值给r5
mov r0,#0xff000000 @ 0xff 8
mov r1,#0x1f800000 @ 0x7e 10
mov r2,#0x00ffffff @ ~r2 = 0xff000000
mov r3,#0x0fffffff @ ~r3 = 0xf0000000
mov r4,#0xffffffff @ ~r4 = 0x00000000