Assembly(六)--寄存器总篇章

1.1 内存中的字存储

我们知道在8086CPU中,用16位寄存器来存放一个字,高8位(H)存放高字节,低8位(:L)存放低字节,在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),因此一个字要用两个连续的内存空间来存储(每个一个字节,共两个字节,16位,每个空间内存8位,1字节),字的低位字节存放在低地址,高位字节存放在高地址.
在这里插入图片描述
如图所示,不难看出 0,1 两个内存空间所组成的为 20000(4E20H) 其高位字节为4E 存放到1处,低位字节为20H存放到低处0
再来举个例子:18(0012H) 其高位为00 所以存放到3 处 低位为12 存放到2处
一个字单元就是存放一个完整的字所占的内存单元 ,这里的 01 23 都可以算作字单元
将起始地址为N的字单元简称为N地址字单元,如 一个字所占的内存空间为2,3 那么这个字单元就是2地址字单元,像图中的0012
为2地址字单元,4e20为0地址字单元

1.2 思考:

在这里插入图片描述
对于图中的表示,思考以下几个问题:

  1. 0地址单元中存放的字节数据是? 答:20H
  2. 0地址字单元中存放的字型数据是? 答:4E20H
  3. 2地址单元中存放的字节数据是? 答: 12H
  4. 2 地址字单元中存放的字型数据是? 答:0012H
  5. 1 地址单元中存放的字节数据是? 答:4EH
  6. 1 地址字单元中存放的字型数据是? 答:124EH(4686)
    所以这里的问题6就表明了 不一定是固定的两个 如 01 23 可以组成地址字单元 12 也可以

1.3 DS和[address]

我们知道 当cpu想要访问一个内存的单元时,必须要知道其物理地址,我们还知道,在8086CPU中的物理地址由段地址和偏移地址组成.DS寄存器就是存放要访问的段地址.
假设我们要读取10000H处的内容,我们可以用汇编语言来这样实现:

mov bx,10000H
mov ds,bx
mov al,[0]

这段指令的意思时将10000H中的第0块数据读入到AL中
mov指令的功能有:将数据送入寄存器,将一个寄存器的内容送入另一个寄存器.
这里还有一个功能:将内存中的数据送入一个寄存器,
这里的

mov al,[0]

就是用到了这一点
其中[xxx]表示一个内存单元,[0]表示一个内存单元的偏移地址,这个偏移是基于ds寄存器中的内容进行的,cpu在访问时,先去读取ds中的内容,后根据给定的偏移地址进行读取,因此在执行mov 指令将内存中的内容送入寄存器时,要先给出对应内存的地址,并将其送入ds寄存器中.
有人可能就想:为什么不能直接使用

mov ds,10000H

来将内存地址送入ds寄存器中呢?
很抱歉,并不可以,因为这是8086CPU的硬件设计问题,所以在送入ds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值