【2020.11.14】内存、MOV指令

每个进程拥有4GB的虚拟内存空间,在真正使用到时才会映射到物理内存上。

为什么是4GB?

4GB是由内存地址决定的,当内存地址为32位时(0x00000000),决定了寻址范围最大为0xFFFFFFFF+1(因为0x00000000也是一个地址,所以需要+1),最终结果为0x100000000。一个字节占8位,乘以8计算出0x800000000,将其转换为十进制为34359738368,除以8(得到整块内存能寻找的字节)结果为4294967296,再除以1024(得到KB),再除以1024(得到MB),再除以1024(得到GB)。

内存必须有地址,这个地址的宽度是32位(bit)的。每个内存地址对应的内存有1个字节也就是8位(bit),可存放8个0和1(二进制)

【MOV指令】

需要注意宽度必须相等

1.立即数到寄存器
2.寄存器到寄存器

3.寄存器到内存

4.内存到寄存器

5.立即数到内存

在汇编中,绝大部分的指令是不允许从内存到内存的。

注意:当MOV指令操作寄存器时,计算机是知道宽度的。但是当我们操作内存地址时,需要告诉计算机我们要操作的宽度是多少。

例:

写1个字节

mov byte ptr ds:[0x00004000],0x1

解:

mov:操作指令

byte:一个字节

word:两个字节

dword:四个字节

ptr ds:[0x00004000]:告诉计算机,我要操作内存地址了。要操作的内存地址是0x00004000。

每个进程都有自己4GB的虚拟内存空间,当我们操作内存地址时不能乱写,我们需要找到程序已经申请的,或者在我们开发的时候申请内存以后才来使用,使用OD做练习时可以看OD右下角的堆栈窗口,堆栈窗口出现的地址一定是程序申请过的,我们是可以使用的。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值