1、通用寄存器
寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是中央处理器内的组成部分。寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和位址。在计算机领域,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器。
通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。
| 32位 | 16位 | 8位 | 8位 |
|---|---|---|---|
| EAX | AX | AH | AL |
| EBX | BX | BH | BL |
| ECX | CX | CH | CL |
| EDX | DX | DH | DL |
| ESP | SP | 无 | 无 |
| EBP | BP | 无 | 无 |
| ESI | SI | 无 | 无 |
| EDI | DI | 无 | 无 |
其中EAX、EBX、ECX和EDX的结构都相一致,如下:
八个寄存器都可以作为普通的数据寄存器使用。
但有的有特殊的用途:
EAX为累加器,常用于存放数据计算得到的结果;
ECX为计数器,在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;
EBX为基址寄存器,它可作为存储器指针来使用;
EDX称为数据寄存器。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
EBP为基址寄存器,它可作为存储器指针来使用;
ESI为源变址寄存器,EDI为目的变址寄存器,它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便;
EBP位基址寄存器,通常指向栈低,也可以用来寻址,见EBP寻址;
ESP为堆栈指针寄存器,指向当前栈顶;
2、内存地址
<1> 内存太大没法起名字,所以只能用编号。当我们想向内存中存储数据,或者从内存中读取数据时,必须用到这个编号,就像写信必须要写收信人地址一样。
<2> 这个编号又称为内存地址(32位,前面0可以省略)。
因为32位机器寻址范围为2^32=4GB,所以32计算机最多为每个进程分配4GB的逻辑空间
汇编语言中对内存书写的格式
Byte ptr ds:[地址编号]
Word ptr ds:[地址编号]
Dword ptr ds:[地址编号]
如果地址编号处使用ESP和EBP,则ds换成ss:
Byte ptr ss:[地址编号]
Word ptr ss:[地址编号]
Dword ptr ss:[地址便还]
内存地址的五种形式
1、形式一:[立即数]
MOV EAX,DWORD PTR DS:[0x13FFC4]
2、形式二:[reg] reg代表寄存器 可以是8个通用寄存器中的任意一个
MOV ECX,0x13FFD0
MOV EAX,DWORD PTR DS:[ECX]
3、形式三:[reg+立即数]
MOV ECX,0x13FFD0
MOV EAX,DWORD PTR DS:[ECX+4]
4、形式四:[reg+reg*{1,2,4,8}]
MOV EAX,13FFC4
MOV ECX,2
MOV EDX,DWORD PTR DS:[EAX+ECX*4]
- 形式五:[reg+reg*{1,2,4,8}+立即数]
MOV EAX,13FFC4
MOV ECX,2
MOV EDX,DWORD PTR DS:[EAX+ECX*4+4]