0%

寄存器

通用寄存器_内存_堆栈

寄存器(编号)二进制(编号)十六进制
32位16位8位
eaxaxal0000
ecxcxcl0011
edxdxdl0102
ebxbxbl0113
espspah1004
ebpbpch1015
esisidh1106
edidibh1117

r通用寄存器
m代表内存
imm代表立即数
r8代表8位通用寄存器
imm8代表8位立即数
m8代表8位内存

通用寄存器

mov指令

mov 目标操作数,源操作数

  • 源操作数可以是立即数,通用寄存器,段寄存器,内存单元
  • 源操作数和目标操作数不能同时为内存单元
  • 操作数宽度必须一样
  1. mov r/m8, r8
  2. mov r/m16, r16
  3. mov r/m32, r32
  4. mov r8, r/m8
  5. mov r16, r/m16
  6. mov r32, r/m32
  7. mov r8, imm8
  8. mov r16, imm16
  9. mov r32, imm32

add指令

同理,替换掉mov指令成add指令,上述也是成立的

sub指令

同理,替换掉mov指令成sub指令,上述也是成立的

and指令

同理,替换掉mov指令成sub指令,上述也是成立的

or指令

同理,替换掉mov指令成sub指令,上述也是成立的

xor指令

同理,替换掉mov指令成sub指令,上述也是成立的

not指令

not r/m8
not r/m16
not r/m32

内存

寄存器与内存的区别

  1. 寄存器位于CPU内部,执行速度块,但比较贵
  2. 内存速度相对较慢,成本较低,可以做的很大
  3. 计算机中几个常用计量单位: byte, word, dword, qword
    byte 字节 = 8bit
    word 字 = 16bit
    dword 双字 = 32bit
    qword 四字 = 64bit

1kb = 1024 byte
1mb = 1024kb
1gb = 1024mb

1024 = 2的10次方

  1. 32位计算机是因为地址总线总共有32条,最大寻址范围是0-0xFFFFFFFF, 内存中最多能存储信息0+0xFFFFFFFF = 100000000即4g

  2. 32位寻址最多识别内存为4g对吗?

通常情况下是4g
不对,可以通过打补丁

内存与立即数区别

内存:[编号]
立即数: 数值

内存读写

涉及内存读写要指定数据宽度,也就是word,dword指定
mov word ptr ds:[0x12345678],0xffff
mov dword ptr ds[0x12345678],0xffff

从高位往低写,比如写word,小端存储的话,是高位存高位,低位存低位

寻址公式

立即数寻址

mov eax,dword ptr ds:[0x13ffc4]

获取内存编号

lea eax,dword ptr ds:[0x13ffc4]

lea还可以用来计算

寄存器寻址

mov ecx,12ffc4
mov eax,dword ptr ds:[ecx]

lea eax,dword ptr ds:[ecx]

寄存器+立即数寻址

mov eax,dword ptr ds:[ecx+4]
lea eax,dword ptr ds:[ecx+8]

[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]

堆栈

EBP跟ESP,
EBP栈底
ESP栈顶

push 一次 esp-4
pop 一次 esp+4

push

push r32
push r16
push m32
push m16
push imm8,imm16,imm32

pop

pop r32
pop r16
pop m16
pop m32

pushad

pushad将通用寄存器全部push进去,按照寄存器顺序,eax,ecx,edx,ebx,esp,ebp,esi,edi,8个通用寄存器8*4=32个字节,所以是sub esp,0x20

popad

恢复全部通用寄存器

总结

  1. 32位通用寄存器,
    位通用寄存器,8位寄存器
    EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI

  2. 寄存器eax-ax-ah-al的关系
    EAX > ax > ah=al
    子集关系

本文作者:NoOne
本文地址https://noonegroup.xyz/posts/f8f1fb54/
版权声明:转载请注明出处!