==============寄存器(内存访问)===========================
CPU用16位寄存器存储一个字,高八位存放高位字节,低八位存放低位字节。
在内存中存储时,内存单元是字节单元(一个单元存放一个字节,即8位),所以使用两个连续的内存单元来存放。
字在内存中的存储,重点解释“字单元”的概念:
字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。
高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
比如:用0,1两个内存单元存放20000(4E20H),0号地址是低内存单元,存放20;1号地址是高内存单元,存放4E;
总结:任何两个连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
DS和[address]:
mov ax,1000H
mov ds,ax
mov al,[0]
上面的3条指令是将10000H(1000:0000)内存单元中的数据读到寄存器al中
指令详解:前两条指令是将要访问内存单元的段地址放入ds中,最后一条指令中的[...]表示内存单元的偏移地址,它的段地址默认存放在ds中,
执行指令时,8086CPU自动取ds中的数据作为内存单元的段地址。
所以最后一条指令执行的操作是将从10000H(1000:0000)内存单元中取出数据并放入al中。
那么为什么不直接将段地址1000H放入段寄存器ds中呢?这是因为8086CPU设计的问题,
[不支持将数据直接放入段寄存器中。]所以我们才用ax寄存器作为中转进行数据传输。
段寄存器CS跟DS的区别:
cs是值cpu执行的当前指令的段地址,ds是数据开始的段地址。
通俗来讲,CS是告诉CPU,去哪个位置找内容当成指令去执行,
DS是告诉CPU,去哪个位置找内容当成数据被使用,用它们的扩展名便可以知晓区别:
dat
CPU用16位寄存器存储一个字,高八位存放高位字节,低八位存放低位字节。
在内存中存储时,内存单元是字节单元(一个单元存放一个字节,即8位),所以使用两个连续的内存单元来存放。
字在内存中的存储,重点解释“字单元”的概念:
字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。
高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
比如:用0,1两个内存单元存放20000(4E20H),0号地址是低内存单元,存放20;1号地址是高内存单元,存放4E;
总结:任何两个连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
DS和[address]:
mov ax,1000H
mov ds,ax
mov al,[0]
上面的3条指令是将10000H(1000:0000)内存单元中的数据读到寄存器al中
指令详解:前两条指令是将要访问内存单元的段地址放入ds中,最后一条指令中的[...]表示内存单元的偏移地址,它的段地址默认存放在ds中,
执行指令时,8086CPU自动取ds中的数据作为内存单元的段地址。
所以最后一条指令执行的操作是将从10000H(1000:0000)内存单元中取出数据并放入al中。
那么为什么不直接将段地址1000H放入段寄存器ds中呢?这是因为8086CPU设计的问题,
[不支持将数据直接放入段寄存器中。]所以我们才用ax寄存器作为中转进行数据传输。
段寄存器CS跟DS的区别:
cs是值cpu执行的当前指令的段地址,ds是数据开始的段地址。
通俗来讲,CS是告诉CPU,去哪个位置找内容当成指令去执行,
DS是告诉CPU,去哪个位置找内容当成数据被使用,用它们的扩展名便可以知晓区别:
dat