汇编基础_内存

1、每个应用进程都会有自己独立的4GB内存空间

 

这句话很多人听起来可能会很矛盾很不解。

例如,我的电脑只有2GB的内存,打开个软件机会占用4GB内存,而我的电脑内存只有2GB,显然不够用,但是为什么程序还能在我的电脑上流畅运行呢?因为程序占用的这4GB内存是一个空头支票,知识口头上说给你4GB内存,其实没有全部给你,而是你用到多少就会从物理内存中给你多少。

2、内存地址

内存地址不像寄存器那样只有几个,内存地址有非常多所以起名字的时候都是用编号,每块内存地址都有其唯一的编号,就像寄信的地址一样,我们灭此用到这块内存时都会根据它的地址去寻找这块内存。

每个编号(内存地址)对应的内存块的容量最少是8位,一个字节。

一个内存地址有32位。像0x00000000,是由8个16进制的数组成,1个16进制的数对应着4个2进制的位,所以4x8=32,一个内存地址有32位。

我们来算一下32位的内存空间有多大:

内存地址一共有多少个(包括0x00000000)  FFFFFFFF+1=100000000

16进制内存空间:              800000000

换算成十进制 Bit:                34359738368

扫描二维码关注公众号,回复: 1888447 查看本文章

Byte:                    4294967296

KB:                    4194304

MB:                    4096

GB:                    4

现在你可以知道,32位的程序最大就是寻址空间就是4GB,所以每个程序占用4GB的内存空间。

向内存中存放数据

MOV  指令

mov指令移动数据时要保证左右两边的数据宽度是一样的。

绝大部分指令是不能把数据从内存移动到内存的。

(1)、立即数到内存

    mov byte ptr ds:[0146FCF4],1

    将立即数1,写入内存地址为0146FCF4 的地方

  mov :指令

  byte:写入数字的大小(1个字节)   word:2个字节  dword:4个字节

  ptr ds:[] :写入内存的哪个地址

  1    :要写入的数据

 

(2)、寄存器到内存

   mov dword ptr ds:[0146FCFC],esp

   将esp寄存器里面的值写入内存地址为014FCFC的内存空间

 

(3)内存到寄存器

   mov esp,dword ptr ds:[0x0146FCF8]

   将内存中的值存入寄存器。

猜你喜欢

转载自www.cnblogs.com/chuijingjing/p/9266959.html