zoukankan      html  css  js  c++  java
  • 32位汇编基础_内存_每个应用进程都会有自己独立的4GB内存空间

    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

    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]

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

  • 相关阅读:
    清理计算机硬盘
    DIY-组装
    go函数类型的使用
    go同步互斥锁
    Go读写文件
    go mod
    go html
    channel
    arp和rarp协议
    自己实现的反射
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9266959.html
Copyright © 2011-2022 走看看