----向一个寄存器中一个值添加100(立即数,即常量)--------
X89:add eax,#100(eax寄存器)
68K:ADD #100,D0(68K是摩托罗拉的)
ARM:add r0,r0,#100
------------从一个寄存器指针加载到寄存器--------
X86: mov eax,DWORD PTR[ebx]
68K:MOVE .L (A0),D0
ARM:ldr r0,[r1]
ARM汇编指令格式
Operation{congd} 【s】 RD , RN, operand2
操作 条件 状态 目标寄存器 源寄存器 后续附加操作
ADD R1 ,R2,#100 把R2加100存到R1例
汇编的入口(类似C的int main)
AREA example, CODE, READONLY
表示代码区域 名字 表明是代码 只读
ENTRY(入口)
CODE32(表示32位代码)
START
。。。
.。。。
END
条件位
状态位 v
立即数要求不同,比如有的芯片要求12位的立即数,8位表示立即数,剩下4位用来循环移位。那这个立即数必须能被4整除且得到的结果在0-255之间才有效。因为要移位,想到与除2的N次方。因此要求能被4整除
ADD 和MOV只能操作寄存器
LDR和STR是把数据从内存到寄存器之间操作
LSL左移
【R1】相当于C中*R1
寻址方式
1、立即数寻址
ADD R0,R0#0X3F (把R0自己加3F在给R0就是地址)
2、寄存器寻址
ADD R0,R1,R2(R1加R2再把值给R0)
3、寄存器间接寻址
LDR R0,[R1](把R1里所指向的内存地址的值给R0,如R1里为0xffff,认为他是一个内存的地址,将这个地址里的值赋给R0)
STR R0,[R1] (把R0的值放到R1中的内存地址)
4、寄存器移位寻址
ADD R3,R2,R1,LSL #2(R1左移两位加R2赋给R3)
5、基址地址寻址