ARM处理器 寄存器 汇编指令集

寄存器
ARM微处理器共有37个32位寄存器,其中31个
为通用寄存器,6个为状态寄存器。但是这些寄
存器不能被同时访问,具体哪些寄存器是可以访
问的,取决ARM处理器的工作状态及具体的运行
模式。但在任何时候,通用寄存器R14~R0、程

序计数器PC、一个状态寄存器都是可访问的。

在ARM工作状态下,任一时刻可以访问16
个通用寄存器和一到两个状态寄存器。在
非用户模式(特权模式)下,则可访问到
特定模式分组寄存器,具体见下页图:









Thumb状态下的寄存器集是ARM状态下
寄存器集的一个子集,程序可以直接访
问8个通用寄存器(R7~R0)、程序计
数器(PC)、堆栈指针(SP)、连接寄
存器(LR)和CPSR。具体见下页图:






Thumb状态下的寄存器组织与ARM状态下的寄存器组织的
关系:
Thumb状态下和ARM状态下的R0~R7是相同的。
Thumb状态下和ARM状态下的CPSR和SPSR是相同的。
Thumb状态下的SP对应于ARM状态下的R13。
Thumb状态下的LR对应于ARM状态下的R14。
Thumb状态下的程序计数器PC对应于ARM状态下R15。


寄存器对应:





通用寄存器
R0~R15
R13_svc、R14_svc
R13_abt、R14_abt
R13_und、R14_und
R13_irq、R14_irq
R8_fiq ~R14_fiq


不分组寄存器(The unbanked registers)
R0-R7
分组寄存器(The banked registers)
R8-R14 
程序计数器:R15(PC)


R0-R7是不分组寄存器。这意味着在所有处
理器模式下,访问的都是同一个物理寄存
器。未分组寄存器没有被系统用于特别的用
途,任何可采用通用寄存器的应用场合都可
以使用未分组寄存器。


分组寄存器R8-R12
1. FIQ模式分组寄存器R8-R12
2. FIQ以外的分组寄存器R8-R12
分组寄存器R13、R14
1. 寄存器R13通常用做堆栈指针SP
2. 寄存器R14用作子程序链接寄存器(Link 
Register-LR),也称为LR,指向函数的返回
地址


程序计数器
寄存器R15被用作程序计数器,也称为
PC 。其值等于当前正在执行的指令的地
址+8(因为在取址和执行之间多了一个译码
的阶段)。

ARM寄存器的别名:

R0-R3  a1-a4

R4-R11  v1-v8

R10- sl SL

R11- fp FP

R12- ip IP

R13- sp SP

R14- lr LR

R15- pc PC


.byte1字节

.short2字节
.word 4字节
.asciz ASSIC码字符(末尾加\0)
.ascii ASSIC码字符(末尾不加\0)

----------------------------------------------------

----------------------------------------------------

汇编指令集:

1.通用数据传送指令.
MOV----> move
MOVSX---->extended move with sign data
MOVZX---->extended move with zero data
PUSH---->push
POP---->pop
PUSHA---->push all
POPA---->pop all
PUSHAD---->push all data
POPAD---->pop all data
BSWAP---->byte swap
XCHG---->exchange
CMPXCHG---->compare and change
XADD---->exchange and add
XLAT---->translate
2.输入输出端口传送指令.
IN---->input
OUT---->output
3.目的地址传送指令.

-----------------------------------
LEA---->load effective address
LDS---->load DS
LES---->load ES
LFS---->load FS
LGS---->load GS
LSS---->load SS
4.标志传送指令.
LAHF---->load AH from flag
SAHF---->save AH to flag 
PUSHF---->push flag
POPF---->pop flag
PUSHD---->push dflag
POPD---->pop dflag

二、算术运算指令

----------------------------------
ADD---->add
ADC---->add with carry
INC---->increase 1
AAA---->ascii add with adjust
DAA---->decimal add with adjust
SUB---->substract
SBB---->substract with borrow
DEC---->decrease 1
NEC---->negative
CMP---->compare
AAS---->ascii adjust on substract
DAS---->decimal adjust on substract
MUL---->multiplication
IMUL---->integer multiplication
AAM---->ascii adjust on multiplication
DIV---->divide
IDIV---->integer divide
AAD---->ascii adjust on divide
CBW---->change byte to word
CWD---->change word to double word
CWDE---->change word to double word with sign to EAX
CDQ---->change double word to quadrate word


三、逻辑运算指令
----------------------------------
AND---->and
OR---->or
XOR---->xor
NOT---->not
TEST---->test
SHL---->shift left
SAL---->arithmatic shift left
SHR---->shift right
SAR---->arithmatic shift right
ROL---->rotate left
ROR---->rotate right
RCL---->rotate left with carry
RCR---->rotate right with carry


四、串指令
--------------------------------
MOVS---->move string
CMPS---->compare string
SCAS---->scan string
LODS---->load string
STOS---->store string
REP---->repeat
REPE---->repeat when equal
REPZ---->repeat when zero flag
REPNE---->repeat when not equal
REPNZ---->repeat when zero flag
REPC---->repeat when carry flag
REPNC---->repeat when not carry flag


五、程序转移指令
------------------------
1>无条件转移指令(长转移)
JMP---->jump
CALL---->call
RET---->return
RETF---->return far
2>条件转移指令(短转移,-128到+127的距离内)
JAE---->jump when above or equal
JNB---->jump when not below
JB---->jump when below
JNAE---->jump when not above or equal
JBE---->jump when below or equal
JNA---->jump when not above
JG---->jump when greater
JNLE---->jump when not less or equal
JGE---->jump when greater or equal
JNL---->jump when not less
JL---->jump when less
JNGE---->jump when not greater or equal
JLE---->jump when less or equal
JNG---->jump when not greater
JE---->jump when equal
JZ---->jump when has zero flag
JNE---->jump when not equal
JNZ---->jump when not has zero flag
JC---->jump when has carry flag
JNC---->jump when not has carry flag
JNO---->jump when not has overflow flag
JNP---->jump when not has parity flag
JPO---->jump when parity flag is odd
JNS---->jump when not has sign flag
JO---->jump when has overflow flag
JP---->jump when has parity flag
JPE---->jump when parity flag is even
JS---->jump when has sign flag
3>循环控制指令(短转移)
LOOP---->loop
LOOPE---->loop equal
LOOPZ---->loop zero
LOOPNE---->loop not equal
LOOPNZ---->loop not zero
JCXZ---->jump when CX is zero
JECXZ---->jump when ECX is zero
4>中断指令
INT---->interrupt
INTO---->overflow interrupt
IRET---->interrupt return
5>处理器控制指令
HLT---->halt
WAIT---->wait
ESC---->escape
LOCK---->lock
NOP---->no operation
STC---->set carry
CLC---->clear carry
CMC---->carry make change
STD---->set direction
CLD---->clear direction
STI---->set interrupt
CLI---->clear interrupt


六、伪指令
─────────────────────────────────────
DW---->definw word
PROC---->procedure
ENDP---->end of procedure
SEGMENT---->segment
ASSUME---->assume
ENDS---->end segment
END---->end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值