本章节包括ARMv6指令集,寄存器集以及GNU汇编程序语法。
1、ARM指令集个别指导(Tutorial)
接下来列出在课程中所有使用的指令。
ldr reg,=val :把一个数值val,放入一个叫做reg寄存器中
mov reg,#val :把一个数值val,放入一个叫做reg寄存器中
lsl reg,#val :把reg寄存器中的值左移动val位
str reg,[dest,#val] : 把reg寄存器中的值写入到dest+val的内存地址中
name :下一行指令的标签
b label :跳转指令,跳转到标签指定的下一行指令
sub reg,#val : 将寄存器reg中的值减去val
cmp reg,#val :将寄存器reg的值和val进行比较
ne :后缀指令,如cmpne,表示不等于(not equal)的时候,执行后面的指令。!=
.global lbl : lbl这个标签是外部文件中去访问它。
mov reg1,reg2 :把reg2的值拷贝到reg1中
ls :后缀指令 <= 意思 (unsigned)无符号比较
hi :后缀指令 >意思 (unsigned)
push (reg1,reg2,reg3...) :将reg1,reg2,reg3...入栈,只有一般目的寄存器,lr寄存器可以入栈
bl lbl :lr寄存器保存了下一行的地址,跳转到lbl后,可以执行mov PC,lr回到下一行的执行指令。
add reg,#val :将寄存器reg中的值+val
mov r1,12
mov r0,r1,lsl#2 :这两个指令结果r0值是12<<2
lsl reg1,reg2 :将reg1的值左移reg2的值
str reg,[dst] :等价str reg,[dst,#0]
pop (reg1,reg2,reg3...),出栈,不多说了
(未用到,暂时待定)别名(alias).req reg :
.unreq:
lsr dst,src,#val :逻辑右移,参照左移
and reg,#val : 逻辑与
teq reg,#val : reg的值是否等于val
ldrd regLow,regHigh,[src,#val] :双字节读取,将src+val地址的值按8位双子节读取到regLow和regHigh两个寄存器中
.align num :确保下一行地址按照2num次幂对齐
.int val :输出val
tst reg,#val :reg和val逻辑与,为0时相等
strh reg,[dest] :将寄存器的half world 低位存储到dest地址中。
.i
.
.