二进制到汇编(2)


通用寄存器

寄存器:

存储数据:CPU > 内存 > 硬盘

32位 CPU 8 16 32

64位 CPU 8 16 32 64

通用寄存器:可以存储任意的值

# 32位的通用寄存器只有8个

 

 

存值范围0~FFFFFFFF

对于二进制来说,直接修改值

计算机如何向寄存器存值。

mov指令

 mov 存的地址,存的数
 mov 存的地址1,存的地址1

可以将数字写入寄存器,可以将寄存器中的值写到寄存器。

计算机:计算力!

不同的寄存器

         FFFF      FF  0000 0000
 32位     16位     8位
 EAX       AX      AL
 ECX       CX      CX
 EDX       DX      DX
 EBX       BX      BX
 ESP       SX      AH
 ENP       NX      CH
 ESI       SX      DH
 EDI       DX      BH

8位:L低8位,H高八位

除了这些通用寄存器之外,那么其他的寄存器每一位都有自己特定的功能!

 

内存

寄存器很小,不够用,所以说,数据放到内存中!

平时买的内存条!

 

每个应用程序进程都有4GB的内存空间,空头支票。

程序真正运行的时候,才会用到物理内存。

1B = 8bit

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

4GB的 内存,4096m =>最终计算为位,就是这个可以存储的最大容量的。

计算机中内存地址很多,空间很大。

内存地址

存一个数:占用的大小,数据宽度!存到哪里?

计算机中内存地址很多,空间很大,每个空间分配一个地址,名字。

这些给内存起的编号,就是我们的内存地址。32位 8个 16进制的值。

32位:寻址能力!4GB 。

FFFFFFFF+1= 100000000,最大的值。

位是怎么限制内存大小的。

100000000 内存地址 * 8 = 位:800000000

转换为10进制/8 = 4,294,967,296字节

按照规则/1024,最终发现就是4GB!

64位,绰绰有余!

FFFFFFFFFFFFFFFF+1

 

每个地址都有一个编号!可以通过这个编号向里面存值。

内存如何存值?

数据宽度: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] 偏移

 

相关