day12.汇编的内存

本文介绍了汇编语言中的内存管理概念,包括内存的基本单位、内存地址的表示方式及其重要性。此外,还详细讲解了如何使用MOV指令进行数据在寄存器与内存之间的移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



第12节: 汇编的内存

在上节课我们学过了寄存器,它本身就是拿来存储数据的,但是寄存器在CPU当中的,那么大家可以算一下无论是32位还是16位和8位的所有寄存器加在一起数量非常有限。如果我要寄存器的数据特别多的话,CPU里面这几个寄存器远远是不够的,那么我们把数据存储在哪里呢?我们可以把它存储到内存中,我们这里面说的内存,在我们编程中提到的内存而不是所说的内存条,它们两者之间是不一样的。有一点计算机基础的人都知道,每个进程都有独立的4G内存空间,其实这样写的话,会给很多新手带来障碍,那么怎么说呢?你算一下,比如我们前面讲计算机有2G内存,那么每一个进程都占用了4G的内存空间,如果有两个进程就占用8G的内存空间,说明是不科学,所以大家应该记住,4G空间是假的,它并不是真正的分配了4G的内存地址空间,也就是说我这个4G内存空间里,给你这个进程了,在这个进程里面随便使用,当某个时刻你真正要用这个内存的时候,操作系统会把这个内存给引到物理内存上。

那么物理内存是不是我们所说的内存条呢?物理内存也不是我们所说的内存条,因为物理内存和真正的内存还有一条隐射关系。那么你想了解在后面章节会详细介绍,那么假的4G内存有多大呢?我们先看一下内存的的宽度介绍:
1BYTE =8bit 1KB = 1024byte 1MB = 1024KB 1GB = 1024mb

那么好了我们在使用寄存器的时候都有名字,无论你的是32位还是16位和8位,比如:32位是EAX、16位是AX、8位是AH和AL,为什么它们有名字呢?因为是少,少就可以起名字吗?那如果多了怎么办,比如我里有1000个孩子,如果起名字现实吗?答案是不现实的,那么家里有5个孩子是现实的,这个例子和内存是一样的道理。所有大家不要把它看成两个东西,对编程人来讲内存也好,还是寄存器也好,都是存储数据的容器仅此而已,所以内存太大了,就没有办法给它起名字了,那就只能用编号来代替。如图:


我们起了一个编号,比如编号0x00000000那么编号就是代表一快内存,每一个编号代表着内存块有多大呢?是8位一字节,换句话说我们在内存使用的时候,每一个编号至少对应一个字节,也就是八个0和1组成,那这个编号还有另一个名字,我们称它为内存地址,这个内存地址非常重要,我们在使用内存的时候无论是读还是写都必须提供这个内存地址,否则你想一想,你有4G内存,我怎么知道你写到哪里去,所以编号是非常重要的,就像我们写信一样,如果信上没有写收信人的地址的话,就不知道寄到哪里去了,这就是编号的意义。我们以后称它为内存地址,那么这个内存地址有多大呢?它有32位,如32位转换成十六进制有8个,为什么是8个,因为一个16进制数代表4个二进制数,4 * 8 = 32,我说的32位数是二进制的,转换成十六进制就是8个的,那么这个宽度就是32位,那你能够弄明白一个进程有4G的空间,而不是3G、2G等。4G是由0x00000000来决定的,因为你的地址的宽度是32位,这个宽度决定了你能查找的最大的地址范围就是4G。

3、MOV指令

1、立即数到内存
MOV BYTE PRT DS:[0018FFF0],1
在olldebug工具的反汇编窗口中输入以上指令,结果看右下窗口中的值的变化。按“F8” 单步执行结果是,0018FFF0的内存值为00000001。

2、寄存器到内存
MOV DWORD PTR DS:[0018FFFC],EAX
在olldebug工具的反汇编窗口中输入以上指令,结果看右下窗口中的值的变化。按“F8” 单步执行结果是,0018FFFC的内存值为004183D7。

3、内存到寄存器
MOV EAX,DWORD PTR DS:[0018FFF8]
在olldebug工具的反汇编窗口中输入以上指令,结果看右上窗口中的值的变化。按“F8” 单步执行结果是,0018FFF8的内存值为0x12345678.。

注意:以上的内存地址,不一定相同情况,根据你的olldebug工具的地址为准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随行之旅

python国产化自动化

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值