首页 > 其他 > 详细

第三章寄存器(内存访问) 其一

时间:2020-05-08 22:19:49      阅读:64      评论:0      收藏:0      [点我收藏+]

3.1内存中字的存储

在0地址处开始存放20000(4E20H)

技术分享图片

 

 0号单元是低地址单元,1号单元是高地址单元

技术分享图片

 

问题:

1)0地址单元种存放的字节型数据是多少?

  20H

2)0地址单元中存放的字型数据是多少?

  4E20H

3)2地址字单元中存放的字节型数据是多少?

  12H

4)2地址单元中存放的字型数据是多少?

  0012H

5)1地址字单元中存放的字型数据是多少?

  124EH

 

结论:

任何两个地址连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。

 

3.2  DS和[address]

CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址;

在8086PC中,内存地址由段地址和偏移地址组成。

8086CPU有一个DS寄存器,通常用来存放要访问的数据的段地址。

 

例如:我们要读取的10000H单元的内容可以用如下程序段进行:

mov  bx,1000H

mov  ds,  bx

mov  al,[0]

上面三条指令将10000H(1000:0)中的数据读到al中。

从哪个内存单元送到哪个寄存器中呢?

mov指令的格式:

mov  寄存器名,内存单元地址

[...]表示一个内存单元,[...]中的0表示内存单元的偏移地址。

那么内存单元的段地址是多少呢?

执行指令时,8086CPU自动取DS中的数据为内存单元的段地址。

如何用mov指令从10000H中读取数据?

10000H表示为1000:0

将段地址1000H放入ds

用mov  al,[0]完成传送(mov指令中的[]说明操作对象是一个内存单元,[]中的0说明这个内存单元的偏移地址是0,它的段地址默认放在ds中)

 

如何把1000H送入ds?

传送指令mov   ax,1

相似的方式   mov   ds,1000H?

8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器。(硬件设计的问题)

mov  ds,1000H是非法的。

数据-》一般的寄存器-》段寄存器

 

问题:

将al中的数据送入内存单元10000H

 

结论: 

mov   bx,1000H

mov  ds,bx

mov  [0],al

(一种合理的回答)

 

3.3字的传送

因为8086CPU是16位结构,有16跟数据线,所以,可以一次性传送16位的数据,也就是一次性传送一个字。

mov  bx,1000H

mov  ds,bx

mov  ax,[0]  ;1000:0处的字型数据送入ax

mov  [0],cx  ;cx中的16位数据送到1000:0处

 

第三章寄存器(内存访问) 其一

原文:https://www.cnblogs.com/fate-/p/12853250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!