03.通用寄存器_内存读写

32位通用寄存器
寄存器 主要用途 编号
EAX 累加器 0
ECX 计数 1
EDX I/O指针 2
EBX DS段的数据指针 3
ESP 堆栈指针 4
EBP SS段的数据指针 5
ESI 字符串操作的源指针, SS段的数据指针 6
EDI 字符串操作的目标指针, ES段的数据指针 7

EIP
指向当前将要执行的代码

16位通用寄存器
AX
CX
DX
BX
SP
BP
SI
DI

8位通用寄存器
AL
CL
DL
BL
AH
CH
DH
BH

EAX寄存器经过下列运算结果
MOV EAX, 0xAAAAAAAA
MOV AX, 0xBBBB
MOV AH, 0xCC
MOV AL, 0xDD

0xAABBCCDD

OD快捷键
打开程序
F3

单步步过
F8

汇编指令
MOV
移动"源"到"目的"
MOV指令特殊注意: 两个操作数不能都是内存

汇编练习(深刻理解寄存器、内存、数据的宽度)
r 通用寄存器, m 代表内存, imm 代表立即数, r8 代表8位通用寄存器, m8 代表8位内存, imm8 代表8位立即数
MOV指令
MOV r/m8, r8
MOV r/m16, r16
MOV r/m32, r32
MOV r8, r/m8
MOV r16, r/m16
MOV r32, r/m32
MOV r8, imm8
MOV r16, imm16
MOV r32, imm32
ADD指令
将源操作的值加到目标操作数上
ADD r/m8, imm8
ADD r/m16, imm16
ADD r/m32, imm32
ADD r/m16, imm8
ADD r/m32, imm8
ADD r/m8, r8
ADD r/m16, r16
ADD r/m32, r32
ADD r8, r/m8
ADD r16, r/m16
ADD r32, r/m32

SUB指令
将目标操作数减去源操作的值
SUB AL, imm8
SUB AX, imm16
SUB EAX, imm32
SUB r/m8, imm8
SUB r/m16, imm16
SUB r/m32, imm32
SUB r/m16, imm8
SUB r/m32, imm8
SUB r/m8, r8
SUB r/m16, r16
SUB r/m32, r32
SUB

AND指令
将目标操作数按位与源操作的值
AND AL, imm8
AND AX, imm16
AND EAX, imm32
AND r/m8, imm8
AND r/m16, imm16
AND r/m32, imm32
AND r/m16, imm8
AND r/m32, imm8
AND r/m8, r8
AND r/m16, r16
AND r/m32, r32
AND r8, r/m8
AND r16, r/m16
AND r32, r/m32

OR
将目标操作数按位与源操作的值
OR AL, imm8
OR AX, imm16
OR EAX, imm32
OR r/m8, imm8
OR r/m16, imm16
OR r/m32, imm32
OR r/m16, imm8
OR r/m32, imm8
OR r/m8, r8
OR r/m16, r16
OR r/m32, r32
OR r8, r/m8
OR r16, r/m16
OR r32, r/m32

XOR
将目标操作数按位异或源操作的值
XOR AL, imm8
XOR AX, imm16
XOR EAX, imm32
XOR r/m8, imm8
XOR r/m16, imm16
XOR r/m32, imm32
XOR r/m16, imm8
XOR r/m32, imm8
XOR r/m8, r8
XOR r/m16, r16
XOR r/m32, r32
XOR r8, r/m8
XOR r16, r/m16
XOR r32, r/m32

NOT
将操作数按位取反
NOT r/m8
NOT r/m16
NOT r/m32

内存编号的单位
字节(8位)

32位计算机
正常情况寻址宽度是32位(2^32--> 2^2 * 2^10 * 2^10 * 2^10 --> 4G), 可以修改

内存编号的格式(加[]区分立即数)
[0x00000000 - 0xFFFFFFFF]

mov word ptr ds: [0x12345678], 0xFFFF
指令 大小 指针 数据段 操作内存编号 值

每个应用程序都有
4G的独立内存空间使用

原文地址:https://www.cnblogs.com/ret688/p/12827231.html