内存中字的存储+DS[address]

事实

对于8086CPU,用16位寄存器来存储一个字。
那对于一个16位的字存储在一个16位的寄存器中,如何存储?
高8位存放在高位字节
低8位存放在低位字节
一个单元存放一个字节
16位的字在内存中需要两个连续字节存储,怎样存放?
低位字节存在低地址单元,高位字节存在高地址
Ag:
存放20000(4E20H)
我们用0、1两个内存单元存放数据
用2、3两个内存单元存放数据18(0012H)
画个图理解
在这里插入图片描述
注意
先读高字节,再读低字节

字单元

由两个地址连续的内存单元组成,存放在一个字型数据
这里强调连续,也就是说比如上图中1、2也是可以连续的,这个数据是可以使用的
也就是124EH
做个题目理解一下
(1)0地址单元中存放的字节型数据是多少?
(2)0地址字单元中存放的字型数据是多少?
(3)2地址单元中存放的字节型数据是多少?
(4)2地址字单元中存放的字型数据是多少?
(5)1地址字单元中存放的字型数据是多少?
理解字节型和字型这两个的区别
(1)20H
(2)4E20H
(3)12H
(4)0012H
(5)124EH
对于我这个初学来说,很容易忘记起始地址虽然是N,但是读入数据一定是
从N+1(高字节)+N(低字节)这样读

DS和[address]

上面学习了字单元,再来理解这个
8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址
执行一下,下面3条汇编指令
mov bx,1000
mov ds,bx
mov al,[0]
在这里插入图片描述上面三条指令表示将10000H(1000:0)中的数据读到al中
深度理解一下mov指令
(1)将数据直接送入寄存器;
(2)将一个寄存器中的内容送入另一个寄存器
根据上面的例子我们可以理解,[0]所指的是一个地址,将该地址的内容输入进入了寄存器

在这里插入图片描述

学习了C语言过后,这个还是很好理解的,相当于指针,由上图我们看到1000:0的数据是B8,AX在没有执行第3条命令前是0100,al是低位字节,ax中现在的低位字节是00,执行mov命令后就成了B8,最后我们看到AX=01B8

重点:为什么不直接把数据放进去DS中呢?

8086CPU不支持将数据直接送入段寄存器的操作,而ds就是一个段寄存器
为了解决该问题,只好用一个寄存器来进行中转,就是上面所用的bx

除了上述的之外,我们还可以将数据从寄存器存入内存单元
由下面3条汇编指令,加深一下理解
mov bx,1000
mov ds,bx
mov [0],al
在这里插入图片描述

看一下是否改变

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Back~~

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值