计算机中数据存储的位置
CPU 内存 硬盘
寄存器
通用寄存器对应关系
验证结果
mov eax,0xAAAAAAAA //EAX AAAAAAAA
mov ax,0xBBBB //EAX AAAABBBB
mov ah,0xCC//EAX AAAACCBB
mov al,0xDD//EAX AAAACCDD
32位 CPU 8 16 32
64位 CPU 8 16 32 64
2005年以后的电脑都是64位CPU了。
32位通用寄存器:存储数据不能超过32个01,多余被丢弃。
通用寄存器
32位 | 16位 | 8位 | |
---|---|---|---|
EAX | AX | AL | 高8位 |
ECX | CX | CL | |
EDX | DX | DL | |
EBX | BX | BL | |
ESP | SP | AH | 低8位 |
EBP | BP | CH | |
ESI | SI | DH | |
EDI | DI | BH |
MOV指令 「寄存器操作」
<1>立即数到寄存器 mov eax,1
<2>寄存器到寄存器 mov eax,ecx 【注:同位赋值,否则语法错误。】
MOV指令 「内存操作」
数据宽度 byte,word,dword 8位 16位 32位
<1>存立即数到内存 mov dword ptr ds:[地址],1
<2>存寄存器的值到内存 mov dword ptr ds:[地址],eax
<3>存内存的值到寄存器 mov eax,dword ptr ds:[地址] 【注:1.数据宽度要一致,否则语法错误,同理与寄存器操作;2.汇编中绝大多数指令不支持内存到内存赋值。】
内存地址的5中表示形式
表示形式 | 取值方式 | 赋值方式 |
---|---|---|
[立即数] | MOV EAX,DWORD PTR DS:[0x13ffc4] | MOV DWORD PTR DS:[0x13ffc4],EAX |
[reg] reg代表寄存器,可以是8个通用寄存器中任意一个 |
MOV ECX,0x13ffd0 MOV EAX,DWORD PTR DS:[ECX] |
MOV EDX,0x13FFD8 MOV DWORD PTR DS:[EDX],0x87654321 |
[reg+立即数] | MOV ECX,0x13FFD0 MOV EAX,DWORD PTR DS:[ECX+4] |
MOV EDX,0x13FFD8 MOV DWORD PTR DS:[EDX+0xC],0x87654321 |
[reg+reg*{1,2,4,8}] 常见于数组类型操作 |
MOV EAX,13FFC4 MOV ECX,2 MOV,DWORD PTR DS:[EAX+ECX*4] |
MOV EAX,13FFC4 MOV ECX,2 MOV DWORD PTR DS:[EAX+ECX*4],87654321 |
[reg+reg*{1,2,4,8}+立即数] | MOV EAX,13FFC4 MOV ECX,2 MOV EDX,DWORD PTR DS:[EAX+ECX*4+4] |
MOV EAX,13FFC4 MOV EXC,2 MOV DWORD PTR DS:[EAX+ECX*4+4],87654321 |
内存存储模式
4G虚拟内存<1>MOV BTYE PTR DS:[0x00000000],0x1A
<2>MOV WORD PTR DS:[0x00000000],0x1A2B
<3>MOV DWORD PTR DS:[0x00000000],0x1A2B3C4D
大端模式:数据高位在地址低位,数据低位在地址高位.
小端模式:数据低位在地址低位,数据高位在地址高位.
顺序 | 大端模式(7-0) | 小端模式(7-0) | 地址 |
---|---|---|---|
小 | 1A | 4D | [0x00000000] |
... | 2B | 3C | [0x00000001] |
... | 3C | 2B | [0x00000002] |
... | 4D | 1A | [0x00000003] |
... | [0x00000004] | ||
… | [0x…………] | ||
大 | [0xFFFFFFFF] |
DEBUG内存窗口使用
指令表
字节 | 字 | 双字 |
---|---|---|
db | dw | dd |
向内存中存入4个字节的数据,并观察存储形式(大端存储or小端存储)
示例:
mov dword ptr ds:[12ffcc],11223344
db 12ffcc
image.png
数据可以存放到哪?寄存器、内存。
数据是如何存放的?小端存储。
网友评论