第2章 汇编语言[35页]

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM汇编指令:寻址方式
1 立即数寻址 : 也称立即寻址,立即数作为操作数在指令中给出。立即数 在指令中要以“#”为前缀,后面跟实际数值。数值前缀 0x表示十六进制数,0b表示二进制数。
MOV R1,#5 MOV R0,#0xFF000
;R1 =5 ;R0 = 0xFF000
ARM汇编指令:寻址方式
ARM汇编指令:寻址方式
5 基址变址寻址 : Rx寄存器(基址寄存器)的值与指令中给出的偏移地址 量相加,所得结果作为存放操作数存储单元的物理地址。 选项“!”表示指令执行完毕把最后的数据地址写到Rx。
LDR R0, [R1,#5] LDR R0, [R1, #5]!
ldmia r0!, {r3 - r10}
2 寄存器寻址 : 操作数存放在寄存器中,通过寄存器可以找到该数值。
MOV R1, R2 ADD R0,R1,#3
;R1 =R2 ;R0=R1+3
ARM汇编指令:寻址方式
3 寄存器间接寻址 : 寄存器中的值为存储操作数单元的物理地址,寄存器起到 指针作用。寄存器间接寻址指令举例如下:
MOV R1,#0xE0200000 MOV R0,#3 STR R0, [R1]
ARM汇编指令1:寻址方式
1 定义:操作数是一条指令的操作对象。在指令执行前,CPU需要 按照在指令中给定的方式找到操作数。在指令中给出操作数存放地 址的方式,简称寻址方式。处理器可依据给定的寻址方式来获得操 作数存放的地址,进而找到操作数。
2 种类(9种):立即数寻址、寄存器寻址、寄存器移位寻址、ቤተ መጻሕፍቲ ባይዱ存 器间接寻址、基址变址寻址、相对寻址、多寄存器寻址、块拷贝寻 址、堆栈寻址。
ARM汇编指令:指令格式
3 符号 (1)常数:十进制数以非0数字开头,如1234。
二进制数以0b开头。 八进制数以0开始,不常用。 十六进制数以0x开头,如0xd0024000。 (2)字符串:需要用两边加引号来表示中间内容为字符串,如 ‘hello’。 (3)“.”: 在汇编程序中可以使用这个符号表示当前运行的指令 代码存放地址,即程序计数器(PC)寄存器的值。 (4)表达式: 在汇编程序中的表达式可以使用常数或者数值, “-” 表示取负数, “~”表示取补,‘<>’表示不相等。其它运算符号如 “+”、“*”、“/”、“%”、“<”、“<<”、“>”、“>>”、 “|”、“&”、“^”、“! ”、“==”、“>=”、“<=”、 “&&”、“||”等与C语言中用法相似。
ARM汇编指令:指令格式
4 标号 (1)用途:在ARM汇编指令中,可以使用符号表示一个地址、变 量或常量。 (2)符号命名规则: • 标号可由a~z、A~Z、0~9、“.” 、“_”等字符组成,符号区分
大小写。
• 局部地址标号允许以数字开头,其它用途符号不能以数字开头。 • 符号在其作用域范围内不允许重名。 • 符号不要与指令助记符、伪指令或编译系统保留字同名。
;R0 = [R1+5] ;R0 = [R1+5], R1 = R1 + 4 ;copy from source address [r0]
ARM汇编指令:寻址方式
6 相对寻址 : 相对寻址与基址变址寻址相似,区别只是将程序计数器PC 作为基址寄存器,指令中的地址标号作为偏移量,将两者 相加之后得到操作数的存放地址。
ARM指令集提供的移位操作指令如下: (1)LSL: 逻辑左移(Logical Shift Left),移出空位补0。 (2)LSR: 逻辑右移(Logical Shift Right。 (3)ASL: 算术左移(Arithmetic Shift Left)。 (4)ASR:算术右移(Arithmetic Shift Right)。 (5)ROR:循环右移(Rotate Right)。 (6)RRX进位标志位C作为D32,与Rx组成33位数,执行循环右移操作。
ARM汇编指令:指令格式
5 举例 ldr r0, =0x00ffffff bic r1, pc, r0 ldr r2, _TEXT_BASE bic r2, r2, r0 cmp r1, r2 beq 1f bl system_clock_init 1: bl uart_asm_init
/*r0=0x00ffffff */ /* r1= pc & !(# 0x00ffffff), 屏蔽掉pc低24位地址*/ /* r2=0x23E00000 _TEXT_BASE定义为0x23E00000 */ /* r2=0x23000000*/ /*比较r1(运行地址), r2(编译链接地址) */ /*若r1 = r2成立,跳转到标号为1 的指令处执行 */ /*调用system_clock_init函数 /* /*定义局部标号/* /*调用uart_asm_init函数*/
;R1 = 0xE0200000 ;R0 = 3 ;[E0200000] = 3
ARM汇编指令:寻址方式
4 寄存器移位寻址 : 寄存器移位寻址是在寄存器寻址得到操作数后再进行移位 操作,最终得到操作数。移位的方式在指令中以助记符形 式给出,而移位的位数可用立即数或寄存器寻址方式表示。
ADD R0,R1,R2,ROR #5 ;R0=R1+(R2>>5)
第2章 汇编语言
1 ARM汇编指令 2 GNU ARM汇编器汇编命令 3 GNU ARM汇编器 4 案例
ARM汇编指令:指令格式
1 指令集:使用v7-A指令集,精简指令集,指令代码定长32位。 2 指令格式:label <opcode><cond>S <Rd>,<Rn>,<operand2> (1)label:指令标号。 (2)opcode:指令助记符,表示指令的功能或操作。(必选项) (3)cond:指令执行条件域,条件域来自CPSR寄存器。 (4)S:附带S则指令运行结果将影响CPSR响应标志位。 (5)Rd:目的寄存器。(必选项) (6)Rn:第一源操作数,使用“,”与目的寄存器字段分开。(必选项) (7)operand2:第二源操作数,使用“,”与第一源操作数字段分开。 (8);:表示后续内容为注释。GNU汇编使用“@”或C语言风格的“/*…*/”代替。
相关文档
最新文档