通用寄存器
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寄存器中读取下一条指令的内存地址,然后继续执行。
- 寄存器的分布
内存读写
-
寄存器与内存的区别:
1、寄存器位于CPU内部,执行速度快,但比较贵。
2、内存速度相对较慢,但成本较低,所以可以做的很大。
3、寄存器和内存没有本质区别,都是用于存储数据的容器,都是定宽的。
4、内存的数量特别庞大,无法每个内存单元都起一个名字,所以用编号来代替,我们称计算机CPU是32位或者64位, 有很多书上说之所以叫32位计算机是因为寄存器的宽度是32位,是不准确的。 32位与64位的区别就是计算机能够指向多大的内存。计算机内存的每一个字节会有一个编号(即内存编号的单位是字节),如下图:
-
内存的格式
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的值
Comments | 0 条评论