事实
对于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
看一下是否改变