第三章 --- 第一节

内存中字的存储:

在0地址处开始存放4E20H这个字(4EH是高位数据,20H是低位数据)

Intel的CPU是小尾(小端)顺序,也就是说,低位数据存放在低地址的内存单元中,高位数据存放在高地址的内存单元中。

针对上图,提出如下问题:

问题一:0地址单元中存放的字节型数据是多少? 20H

问题二:0地址单元中存放的字型数据是多少?     4E20H

问题三:2地址单元中存放的字节型数据是多少? 12H

问题四:2地址单元中存放的字型数据是多少?     0012H

问题五:1地址单元中存放的字型数据是多少?     124EH

 

结论:

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

 

 

DS和[address]

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

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

MOV BX, 1000H

MOV DS, BX

MOV AL, [0]

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

 

已知的MOV指令可完成的两种传送功能:

(1)将数据直接送入寄存器,例如:MOV AX, 2000H

(2)将一个寄存器中的内容送入另一个寄存器中,例如:MOV AX, BX

除此之外,MOV指令还可以将一个内存单元中的内容送入一个寄存器,例如:MOV AX, [0]

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

MOV指令的格式:

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

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

执行指令时,8086CPU自动取DS中的数据为内存单元的段地址,然后DS中的内容 * 16 + [...]中的... 构成内存单元的物理地址。

 

细节:MOV DS, 1000H这条指令是否正确呢?

答案:不能。

原因:8086CPU不支持将数据直接送入段寄存器的操作,DS是一个段寄存器,所以,MOV DS, 1000H是非法的。这是硬件设计的问题。

访问方式就是  数据--》通用寄存器--》段寄存器。

 

问题:

写几条指令,将AL中的数据送入内存单元10000H?

结论:

MOV BX, 1000H

MOV DS, BX

MOV [0],  AL

 

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

比如:

MOV BX, 1000H

MOV DS,  BX

MOV AX,  [0]        ; 1000:0处的字型数据(因为AX是16位寄存器)送入AX

MOV [0],  CX        ; CX中的16位数据(因为CX是16位寄存器)送到1000:0处

 

问题3.3:内存中的情况如下图,写出下面指令执行后寄存器AX, BX, CX中的值。

AX = 1000H   BX = ?  CX = ?

AX = 1123H   BX = ?  CX = ?

AX = 1123H   BX = 6622H  CX = ?

AX = 1123H   BX = 6622H  CX = 2211H

AX = 1123H   BX = 8833H  CX = 2211H

AX = 1123H   BX = 8833H  CX = 8833H

 

问题3.4:内存中的情况如下图,写出下面指令执行后寄存器AX, BX, CX中的值。

AX = 1000H   BX = ?

AX = 2C34H  BX = ?

AX = 2C34H  BX = 2C34H

AX = 2C34H  BX = 1B12H

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值