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

欢迎来到我的技术博客! 🎉

这里不仅有满满的编程干货学习资源,我的某站账号也为你准备了更多实用的技术视频和知识分享

👉 点击关注我的小破站账号,获取更多编程技巧和学习资源!
小破站主页


先看例题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命运之光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值