通用寄存器内存
通用寄存器和内存
一、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]