1、通用寄存器
ax | 字乘法,字除法,字IO |
al | 字节乘法,字节除法,字节io,十进制算术运算 |
ah | 字节乘法,字节除法 |
bx | 存储器指针 |
cx | 串操作或循环控制中的计数器 |
cl | 移位计数器 |
dx | 字乘法,字除法,间接io |
si | 存储器指针(串操作中的源指针) |
di | 存储器指针(串操作中的目的指针) |
bp | 存储器指针(存取堆栈的指针) |
sp | 堆栈指针 |
注:
EAX是32位, AX 是EAX的低16位 , AL 和AH是AX的低8位和高8位。
r
开头:64bit, 8字节
e
开头:32bit, 4字节
ax,bx,cx: 16bit, 2字节
ah, al: 8bit, 1字节
2、AX和al寄存器又称为累加寄存器(Accumulator)
什么是累加器
在中央处理器中,累加器 (accumulator) 是一种寄存器,用来储存计算产生的中间结果。如果没有像累加器这样的寄存器,那么在每次计算 (加法,乘法,移位等等) 后就必须要把结果写回到 内存,也许马上就得读回来。然而存取主存的速度是比从算术逻辑单元到有直接路径的累加器存取更慢。
累加器的作用
在运算器中,累加器是专门存放算术或逻辑运算的一个操作数和运算结果的寄存器。能进行加、减、读出、移位、循环移位和求补等操作。是运算器的主要部分。
BX是基(base)地址寄存器。
四个寄存器中唯一可作为存储器指针使用的寄存器。
CX寄存器是计数(count)寄存器
在字符串操作和循环操作时,用它来控制重复循环操作次数。在移位操作时,cl寄存器用来保存移位的位数。
DX寄存器是数据(data)寄存器。
在进行32位的乘除法操作时,用它存放被除数的高16位或余数。也用来存放io端口地址。
SI和DI变址和指针寄存器
16位的变址寄存器和指针寄存器不能分解成8位寄存器。SI和DI称为变址寄存器。在字符串操作中,规定由SI给出源指针,由DI给目的指针。
所以也称为源变址寄存器和目的变址寄存器。同时si和di可以作为一般存储器指针使用。
BP和SP寄存器称为指针寄存器
BP主要用于给出堆栈中数据区基址的偏移,从而方便地实现直接存取堆栈中的数据,所以BP也称为基指针寄存器,正常情况下SP只作为堆栈指针使用,即保存堆栈栈顶地址的偏移。
段寄存器
CS:代码段寄存器
DS:数据段寄存器
SS:堆栈段寄存器
ES: 附加段寄存器
标记寄存器
CF:进位标志
ZF:零标志
指令指针
ip:指令指针,如:rip是64位程序下一条指令。
栈寄存器:rsp(栈顶指针寄存器), rbp(栈基址寄存器)
一个函数在调用时,前四个参数是从左至右依次存放于RCX、RDX、R8、R9寄存器里面,剩下的参数从右至左顺序入栈;栈的增长方向为从高地址到低地址。
被调用函数的返回值是整数时,则返回值会被存放于RAX;浮点数返回在xmm0中
参考:
80X86汇编语言程序设计教程
寄存器 - 简书https://www.jianshu.com/p/57128e477efb汇编指令 - 简书 (jianshu.com)
https://www.jianshu.com/p/77d8c406b034