x86-64的CPU当中包含16个存储64位值的通用目的寄存器,用来存储整数数据和指针,下图只列出了前8个,后面还有r8-r15,结构类似
上述寄存器以及相关默认功能
rax
|
保存所有api函数返回值
|
rbx
|
基地址寄存器,在内存寻址时存放基地址
|
rcx
|
计数器,是REP前缀指令和loop指令的默认计数器
|
rdx
|
存放整数除法产生的余数
|
rsi
|
源索引寄存器,字符串操作中,指向源串
|
rdi
|
目标索引寄存器,字符串操作中,指向目标串
|
rbp
|
基址指针寄存器,其内存放着一个指针,永远指向系统栈最上面一个栈的底部
|
rsp
|
栈指针寄存器,其内存放着一个指针,该指针指向系统最上面一个栈帧的栈顶
|
内存寻址的几种格式
类型
|
格式
|
操作数值
|
名称
|
立即数
|
$Imm
|
Imm
|
立即数寻址
|
寄存器
|
ra
|
R[ra]
|
寄存器寻址
|
存储器
|
Imm
|
M[Imm]
|
绝对寻址
|
存储器
|
(r)
|
M[R[r]]
|
间接寻址
|
存储器
|
Imm(r)
|
M[Imm+R[r]]
|
(基址+偏移量)寻址
|
存储器
|
(r1, r2)
|
M[R[r1]+R[r2]]
|
变址寻址
|
存储器
|
Imm(r1, r2)
|
M[Imm + R[r1]+R[r2]]
|
变址寻址
|
存储器
|
(,r,s)
|
M[R[r]*s]
|
比例变址寻址
|
存储器
|
Imm(,r,s)
|
M[Imm+R[r]*s]
|
比例变址寻址
|
存储器
|
(r1,r2,s)
|
M[R[r1]+R[r2]*s]
|
比例变址寻址
|
存储器
|
Imm(r1,r2,s)
|
M[Imm+R[r1]+R[r2]*s]
|
比例变址寻址
|
上表中,s必须为1,2,4,8