内存中数据的存储与获取
2022/4/6 7:19:46
本文主要是介绍内存中数据的存储与获取,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
数据的获取
CPU 通过段地址和偏移地址获取内存中的数据, 根据寄存器的大小获取相应的字节数目: mov al,ds:[0]
ds 为段地址寄存器, [0] 表示偏移地址为 0
物理地址 = 段地址 * 0x10 + 偏移地址
从物理地址获取数据需要注意存储该数据寄存器的长度,下面将通过实例进行展示
- 先对目标地址
2000:0
中的数据初始化,赋值为 "123456789A`
- 写入指令将
ds
段地址寄存器赋值为2000
: 用于寻找物理地址2000:0
(0x20_000H)
注意
ds
寄存器不能直接修改,需要通过数据寄存器间接修改
- 将内存单元中的 2000:[1], 2000:[3], 2000:[4] 分别送入
AX, BH, CL
中查看效果
可以看到根据物理地址我们其实只能定位到两位 16 进制数,也就是 8 bit,也就是 1 字节数据,这个和 BH 或 CL 寄存器的长度是一致的,所以直接对应存储;但是 AX 是 16 位寄存器,也就是 2 字节的长度,这时就需要向高位寻找,用于填充 AX 的高位字节,所以 AX 的值是
{2000:[2]} {2000:[1]}
数据的存储
一个内存单元只能存储一字节的数据, 对于 Byte 来说只需要一个内存单元即可存放;
但对于 Word(=2Byte) 则需要两个连续的内存单元存放, 将高位字节存放到内存的高位地址, 低位字节存放到内存的低位地址中。用下面一个例子来实践一下
- 使用
e 2000:0
修改目标内存单元的数据, 只能写入两位十六进制数, 也就是 8 位二进制数
-
AX, BX, CX, DX 这些寄存器的大小都是一个字
(word=2Byte=16bit)
在这我们利用AX
将两个字节的数据存储到内存单元中; 首先将AX
寄存器赋值1122
-
然后将
DS
寄存器(CPU默认用DS
在内存寻址) 定位到2000:0
, 现在的状态就是赋值前的初始状态:
不能直接修改
DS
寄存器, 需要借助A-DX
寄存器间接修改
2000:0
处的内存状态:
- 利用
DS
寄存器将AX
寄存器中的内容放到内存单元2000:0
中, 他会按照寄存器的大小, 自动分配相邻的两个内存单元, 如图所示,11
是高位字节因此放到了内存的高位地址处;
mov [0], ax
在这里
[0]
也就是[0000]
用于定义DS
的偏移地址, 合起来也就是2000:0000
的内存地址
这篇关于内存中数据的存储与获取的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署
- 2024-04-14RAG应用开发实战02-相似性检索的关键 - Embedding