[国嵌笔记][026][ARM伪指令]

ARM机器码

1.汇编程序通过汇编器变成机器码,然后才能在ARM处理器上运行

2.ARM机器码是一个32位的数,被分成了多个段,每个段都有各自的含义

3.格式:

cond:表示条件(4位)

I:表示源操作数是寄存器还是立即数

opcode:表示指令类型(4位)

S:表示是否影响cpsr寄存器

Rn:第一个源寄存器,有的指令中没有使用(4位)

Rd:目的寄存器(4位)

shift_operand:位移标志(4位)和第二个源寄存器或立即数(8位),所以mov指令中源操作数不能超过255

4.示例:

mov r0, r1   机器码:e1a00001

1110 00 0 1101 0 0000 0000 000000000001

moveq r0, #0xff   机器码:03a000ff

0000 00 1 1101 0 0000 0000 000011111111

 

伪指令定义

伪指令本身并没有对应的机器码,它只是在编译的时候起作用,或者转化为其他的实际指令来运行

 

定义类伪指令

1.global

作用:把一个标号定义为全局的,使其能够被其他C语言程序调用

示例:

.global _start

 

2.data

作用:定义数据段,表明数据将被存到数据段中

示例:

.data

 

3.byte word ascii

作用:定义数据类型

示例:

_byte: .byte 0xff

_word: .word 0xaabbccdd

_string: .ascii “hello world!”

 

4.equ

作用:宏定义,相当于C语言中宏的替换

示例:

.equ DATA, 0xff

mov r1, #DATA

 

5.align

作用:使数据地址按n字节对齐

示例:

.align 4

 

操作类伪指令

1.nop

作用:空操作指令,通常用来做延时

示例:

nop

@在执行时相当于

mov r0, r0

 

2.ldr

作用:用来在寄存器中装入大于8位的立即数,相当于mov,但mov不能装入大于8位的立即数

示例:

ldr r1, =0x1ff   @在ldr伪指令中“=”表示立即数

@在执行时相当于

ldr r1, [pc, #-4]

.word 0x000001ff

原文地址:https://www.cnblogs.com/d442130165/p/4896869.html