首先说计算的原始模型说起,计算机最初可以理解为一个运算器在纸条上按照一定规则和前面的点的内容产生下一步所打得内容。例如:有一个打孔机,它有一个规则,当前面为
01 打印一个1
10 打印一个0
11 感应打孔形状的针头跳转10个位置
001 其他
。。
现代计算机由于有运算器和很多的寄存器,原理要比这个复杂得多,不过基础原理简单可以这样理解。
从80x86,其内部有运算器和寄存器
寄存器
Name | Length (bits) | Use/comments |
---|---|---|
EAX | 32 | accumulator, general use; |
low-order-word AX, divided into bytes AH and AL | ||
EBX | 32 | general use; |
low-order-word BX, divided into bytes BH and BL | ||
ECX | 32 | general use; |
low-order-word CX, divided into bytes CH and CL | ||
EDX | 32 | general use; |
low-order-word DX, divided into bytes DH and DL | ||
ESI | 32 | source index; source address in string moves, array index |
EDI | 32 | destination index; address of destination, array index |
ESP | 32 | stack pointer; address of top of stack |
EBP | 32 | base pointer; address of reference point in the stack |
CS | 16 | holds selector for code segment |
DS | 16 | holds selector for data segment |
ES | 16 | holds selector for extra segment |
SS | 16 | holds selector for stack segment |
FS | 16 | holds selector for additional segment |
GS | 16 | holds selector for additional segment |
EIP | 32 | instruction pointer; address of next instruction to be |
fetched | ||
EFLAGS | 32 | collection of flags, or status bits |
在名字中 E的意思为extend 扩展的意思,如AX为16位,其扩展EAX为32位。
其中EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP。
简单说明,EAX通常被用于一些计算值得存储和保存返回值,经常可以看到调用一个函数后,立刻使用EAX的值,因为一般习惯上都会把返回值放入EAX中(不知道这点是否后一般C++中返回类型通常小于32位,4字节有关)
ebx为基地址处理器,一般可以看到
push ebx
mov ebx,esp
的语句
ecx 一个特点是作为计数器,各种循环都是把它自动减1,用来确定循环次数
edx 为乘法和除法是前32位 或 保存结果用途等
后面的可以自己查找
同时80x86可以用的寄存器还有
st系列 浮点运算作用
cr系列 一些模式的标志位,指示页地址等等
(下面3个内容看下罗云彬的win32汇编,有介绍)
GDTR 全局描述符表
LDTR 局部描述符表
IDTR 中断描述符表