首页 > 代码库 > 32位寄存器
32位寄存器
32位 | 16位 | 8位寄存器 |
EAX | AX | AH AL |
ECX | CX | CH CL |
EDX | DX | DH DL |
EBX | BX | BH BL |
ESP | SP | |
EBP | BP | |
ESI | SI | |
EDI | DI |
寄存器
主要用途 存储范围
EAX
累加器 32位
ECX
计次
32位
EDX
I/O指针
32位
EBX
DS段的数据指针 32位
ESP 堆栈指针
32位
EBP
SS段的数据指针
32位
ESI 字符串操作的源指针; SS段的数据指针
32位
EDI 字符串操作的数据指针;ES段的数据指针 32位
因为保护模式的缘故,我们可以用一种新的抽象思维理解.
我们的每一个32位程序,都可以使用4GB的内存空间.
16位的汇编需要CS和IP定位代码.
32位的汇编,我们只需要用一个32位的寄存器EIP就可以了.
EIP=0x00000000
EIP=0xFFFFFFFF
EIP指向的内存地址并不是真实的内存物理地址.这些问题我们现在不必深究,等研究操作系统内核的时候再来研究.
一个由C/C++编译的程序占用的内存分为以下几个部分 :
1、栈区(stack)— 由编译器自动分配释放
,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放,
若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域,
未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。 - 程序结束后由系统释放。
4、文字常量区
—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
在程序设计中,有一个很重要的原则.
Don‘t Repeat
Youself (不要重复你自己)
xor
eax,eax
xor ecx,ecx
xor edx,edx
xor ebx,ebx
Windows程序低2G:0x0000 0000-0x7FFF
FFFF
Windows程序高2G:0x7FFF FFFF-0xFFFF
FFFF
墨墨背单词.
32位寄存器