通用寄存器和内存
一、32位通用寄存器
| 寄存器 | 主要用途 |
|---|---|
| eax | 累加器 |
| ecx | 计数器 |
| edx | I/O指针 |
| ebx | DS段的数据指针 |
| esp | 堆栈指针 |
| ebp | SS段的数据指针(堆栈栈底) |
| esi | 字符串操作的源指针;SS段的数据指针 |
| edi | 字符串操作的目标指针;ES段的数据指针 |
| 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 |
二、内存
寄存器与内存的区别:
1、寄存器位于CPU内部,执行速度快,价格昂贵,毕竟一分钱一分货。
2、内存速度相对较慢,但是成本低,可以扩展。
3、寄存器和内存本质都是存储数据的容器,都是定宽的。
4、1KB = 1024BYTE
5、1MB = 1024KB
6、1GB = 1024MB
我们称计算机CPU是32位或者64位,主要指的就是内存编号的宽度,而不是寄存器的宽度。
| 地址编号 | 存储内容(字节) |
|---|---|
| 0x00000000 | 0x80 |
| 0x00000001 | 0x90 |
| 0x00000002 | 0xAF |
| … | … |
| … | … |
| 0xFFFFFFFF | 0x32 |
三、内存读写
1、寻址公式一:[立即数]
读取内存:mov eax,dword ptr ds:[0x0018ff94]
写入内存:mov dword ptr ds:[0x0018ff80],eax
获取内存地址:lea eax,dword ptr ds:[0x0018ff90]
2、寻址公式二:[寄存器]
读取内存:
mov ecx,0x0015FEFC
mov eax,dword ptr ds:[ecx]
写入内存:
mov edx,0x0018FE0C
mov dword ptr ds:[edx],0x12345678
获取内存地址:
lea eax,dword ptr ds:[edx]
mov eax,dword ptr ds:[edx]
3、寻址公式三:[reg+立即数]
读取内存:
MOV ECX,0x13FFD0
MOV EAX,DWORD PTR DS:[ECX+4]
写入内存:
MOV EDX,0x13FFD8
MOV DWORD PTR DS:[EDX+0xC],0x87654321
获取内存地址:
LEA EAX,DWORD PTR DS:[EDX+4]
MOV EAX,DWORD PTR DS:[EDX+4]
4、寻址公式四:[reg+reg*{1,2,4,8}]
读取内存:
MOV EAX,13FFC4
MOV ECX,2
MOV EDX,DWORD PTR DS:[EAX+ECX4]
写入内存:
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR DS:[EAX+ECX4],87654321
获取内存地址:
LEA EAX,DWORD PTR DS:[EAX+ECX*4]
5、寻址公式五:[reg+reg*{1,2,4,8}+立即数]
读取内存:
MOV EAX,13FFC4
MOV ECX,2
MOV EDX,DWORD PTR DS:[EAX+ECX4+4]
写入内存:
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR DS:[EAX+ECX4+4],87654321
获取内存地址:
LEA EAX,DWORD PTR DS:[EAX+ECX*4+2]