通用寄存器

32位

★ EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。

★ EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址。

★ ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。

★ EDX 则总是被用来放整数除法产生的余数。

★ ESI/EDI分别叫做"源/目标索引寄存器"(source/destination index),在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串

★ ESP:寄存器存放当前线程的栈顶指针
★ EBP:寄存器存放当前线程的栈底指针

★ EIP:寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。

14.jpg

  • 寄存器的分布
    15.jpg

内存读写

  • 寄存器与内存的区别:
    1、寄存器位于CPU内部,执行速度快,但比较贵。
    2、内存速度相对较慢,但成本较低,所以可以做的很大。
    3、寄存器和内存没有本质区别,都是用于存储数据的容器,都是定宽的。
    4、内存的数量特别庞大,无法每个内存单元都起一个名字,所以用编号来代替,我们称计算机CPU是32位或者64位, 有很多书上说之所以叫32位计算机是因为寄存器的宽度是32位,是不准确的。 32位与64位的区别就是计算机能够指向多大的内存。计算机内存的每一个字节会有一个编号(即内存编号的单位是字节),如下图:
    批注 20200609 234615.jpg

  • 内存的格式
    1、内存单元的大小为8bit
    2、[编号]称为地址 ,例如[0x217fa223]
    3、地址的作用: 标记内存的位置

  • 从指定内存中读写数据

写: mov dword ptr ds:[0x0012FF34],0x12345678
读: mov eax,dword ptr ds:[0x0012FF34]
dword: 读写数据的大小  byte(1字节) word(2字节) dword(4字节)
ptr:  Point 代表后面是一个指针(指针的意思就是里面存的不是普通的值,而是个地址) 
ds: 段寄存器
x0012FF34: 内存编号,必须是32位的前面0可以省略,使用时需要加[]

注意:地址编号不要随便写,因为内存是有保护的,并不是所有的内存都可以直接读写(需要特别处理) 建议地址编号写成esp的值


hhhhh