通用寄存器
寄存器:
存储数据:CPU > 内存 > 硬盘
32位 CPU 8 16 32
64位 CPU 8 16 32 64
通用寄存器,可以存储任意的东西
32位的寄存器只有8个
存值的范围:0 ~ FFFFFFFF
对于二进制来说,直接修改值
计算机如何像寄存器存值。
mov指令
mov 存的地址,存的数
mov 存的地址1,存的地址1
可以将数字写入寄存器,可以将寄存器中的值写到寄存器。
计算机的本质:计算力!
不同的寄存器
FFFFFFFF FFFF FF
32位 16位 8位
EAX AX AL
ECX CX CL
EDX DX DL
EBX BX BL
ESP SP AH
ENP NP CH
ESI SI DH
EDI DI BH
8位:L低8位,H高8位
除了这些通用寄存器之外,那么其他的寄存器每一位都有自己特定的功能!
内存
寄存器很小,不够用。所以说,数据放到内存!
平时买的内存条!
每个应用程序都有4G的内存空间。虚拟内存。空头支票。
程序真正运行的时候,才会用到物理内存!
1B = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
4G的内存,4096M => 最终计算单位为位,就是这个可以存储的最大容量的。
计算机中内存地址很多,空间很大。
内存地址
存一个数:占用的大小,数据宽度!存到哪里?
计算机中内存地址很多,空间很大,每个空间分配一个地址,名字。
这些给内存起的编号,就是我们的内存地址。32位 8个16进制的值。
32位:寻址能力!4GB。
FFFFFFFF+1=100000000 最大的值
位是怎么限制内存大小的。
100000000 内存地址*8=位:800000000
转换为十进制/8:4,294,967,296字节
按照规则/1024,最终发现就是4GB!
64位:寻址能力!绰绰有余。
所以每个内存地址都有一个编号!可以通过这个编号向里面存值!
指针 =>内存
内存如何存值?
数据宽度:byte word dword
地址的位置:0xFFFFFFFF
不是任意的地址都可以写东西的,申请使用的。只有程序申请过的内存,我们才可以使用。
汇编如何向内存中写值。
mov 数据宽度 内存地址,1
mov byte/word/dword/qword,1
mov byte ptr ds:[0x19FF70],1
传递的值的大小一定要和数据宽度相等。
内存地址有多种写法
ds:[0x19FF70+4] 内存地址偏移
ds:[eax] 寄存器
ds:[eax+4] 寄存器偏移
数组[]
ds:[reg+reg*{1,2,4,8}]
ds:[reg+reg*{1,2,4,8}+4] 偏移