ARM汇编(第一天)

ARM 109浏览

ARM指令格式:
operation{cond}{s} Rd ,Rn, operand2
操作指令{条件}{状态} 目标寄存器,源寄存器,后续附件的操作
{}:可选项
如:ADD R2,R1,#100; 功能:R2 = R1 + 100

ARM的9种寻址方式
一个简单的汇编程序:

    AREA testhello,CODE,READONLY
    ENTRY
    CODE32
START
    ADD R1,R2,#4
    MOV R5,R1
    END

ARM的六大类指令集---LDR、LDRB、LDRH、LDM、STR、STRB、STRH、STM 

内存操作--读取指令
Opcode Operands Description
LDR Rn,Addr 按照字长(32b)读取到Rn
LDRB   按照字节(8bit)读取到Rn
LDRH   按照半字(16b)读取到Rn
STR Rn,Addr 按照字长(32b)写入Addr
STRB    
STRH    
多寄存器内存访问指令(load/store multi)
LDM(读出内存) LDM{mode} Rn,{Rs,Re} 示例:LDMIA R1,{R5,R9}

Rn为基址寄存器(n≠15),mode为地址操作模式
功能:以R1存储的内容为内存地址,读取内存地址的内容写入R5,之后读取内存地址加4后的内容写入R9

STM(写入内存) STM{mode} Rn,{Rs,Re} 示例:STMIB R1,{R5,R9}
功能:以R1存储的内容为内存地址(假定为a),将R5内容写入内存(a+4),之后将R9的内容写入(a+8)
地址模式:
数据块模式:
IA(Increase after)传输后地址加4,IB(Increase before)传送前加4
DA(Decrease After)传输后减4,DB(Decrease before)传输后加4
堆栈模式:
EA(Empty add)空递增堆栈,ED空递减堆栈
FA(Full     add) 满递增堆栈,FD满递减堆栈
数据交换指令(Swap)
SWP Rd,Rn1,[Rn2] 内存和寄存器字交换(Rn1将数值赋给[Rn2],同时将Rn2内容作为内存地址的数据传给Rd)
SWAPB   字节交换