【计算物理地址】计算存储器操作数的物理地址时候如何选择DS还是SS

2024-09-23 08:09:04 浏览数 (2)

先看例题

DS=3000H,ES=4000H,SS=5000H,BX=0300H,BP=0050H,SI=0200H计算下列指令中存储器类型操作数的物理地址。(1)MOV AL,[BP 5] (2)ADD AL,5[BX SI] (3)MOV BP,[2000H](4)ADD [BP][SI] 20H,AX并详细解释如何选择DS还是SS


要计算给定指令中的存储器类型操作数的物理地址,我们需要理解如何通过段寄存器偏移寄存器来组合形成物理地址。通常,在8086微处理器中,物理地址由段寄存器内容乘以16,再加上偏移量来计算。具体地说:

  • 段寄存器可以是:DS(数据段寄存器)、ES(附加段寄存器)、SS(栈段寄存器)等。
  • 偏移寄存器可以是:BXBPSIDI等。
解释段选择规则

通常情况下:

  • 使用SS段:如果操作数涉及BP寄存器,则默认使用SS作为段寄存器。
  • 使用DS段:如果操作数不涉及BP寄存器,则默认使用DS作为段寄存器。

接下来我们逐条分析并计算物理地址:


1. MOV AL,[BP 5]
  • 段寄存器:由于BP寄存器参与计算,所以段寄存器为SS
  • 段基值SS = 5000H
  • 偏移量BP 5 = 0050H 5 = 0055H
  • 物理地址(SS * 16) (BP 5) = 5000H * 10H 0055H = 50000H 0055H = 50055H

因此,物理地址是50055H


2. ADD AL,5[BX SI]
  • 段寄存器:此操作数不涉及BP,因此段寄存器为DS
  • 段基值DS = 3000H
  • 偏移量BX SI 5 = 0300H 0200H 5 = 0505H
  • 物理地址(DS * 16) (BX SI 5) = 3000H * 10H 0505H = 30000H 0505H = 30505H

因此,物理地址是30505H


3. MOV BP,[2000H]
  • 段寄存器:此指令中的偏移量是显式的(2000H),没有使用BP或其他偏移寄存器,所以段寄存器为默认的DS
  • 段基值DS = 3000H
  • 偏移量2000H
  • 物理地址(DS * 16) 2000H = 3000H * 10H 2000H = 30000H 2000H = 32000H

因此,物理地址是32000H


4. ADD [BP][SI] 20H,AX
  • 段寄存器:因为涉及到BP寄存器,所以段寄存器为SS
  • 段基值SS = 5000H
  • 偏移量BP SI 20H = 0050H 0200H 20H = 0270H
  • 物理地址(SS * 16) (BP SI 20H) = 5000H * 10H 0270H = 50000H 0270H = 50270H

因此,物理地址是50270H


总结
  1. MOV AL,[BP 5]: 物理地址 = 50055H (使用SS)
  2. ADD AL,5[BX SI]: 物理地址 = 30505H (使用DS)
  3. MOV BP,[2000H]: 物理地址 = 32000H (使用DS)
  4. ADD [BP][SI] 20H,AX: 物理地址 = 50270H (使用SS)

在计算物理地址时,选择DS还是SS的关键在于是否使用了BP寄存器:如果使用BP,则默认使用SS;否则使用DS

0 人点赞