[汇编 16位]

1.设(DS)=3000H,(ES)=2000H,(SS)=1000H,(BX)=0100H,(BP)=0200H,(S1)=0300H,偏移量DVAL为0400H,试确定下列指令中操作数在内存中的物理地址。
(1)MOV AX,[2000H]
(2)MOV AI,50[BX]
(3)INC DVAL[SI]
(4)MOV DVAL[BP],BL
(5)MOV AX,DVAL[BP][SI]
(6)MOV ES:[BX+SI],CX
(7)MOV AX.[BX+50]
(8)MOV AX,ES:[BX]


16位的指令指针寄存器 IP
指定段内偏移量,增1。

20位的地址加法器
段地址左移4位+偏移量 →
      20位的实际物理地址
段基地址*16+偏移量 → 20位的实际物理地址
在这里插入图片描述

段基地址和段内偏移组成了逻辑地址
格式为:段地址:偏移地址

地址分段一般是由段基地址+段内偏移地址组成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
10H不就是十进制的16嘛,(lll¬ω¬),真不知道一开始自己在迷什么!竟然会纠结十进制的16和十六进制的10H。
段基地址为16位
段 地 址 = 段 基 地 址 ∗ 16 段地址=段基地址*16 =16
物 理 地 址 = 段 基 地 址 × 10 H + 偏 移 地 址 物理地址=段基地址×10H+偏移地址 =×10H+
等价于:
物 理 地 址 = 段 基 地 址 × 16 + 偏 移 地 址 物理地址=段基地址×16+偏移地址 =×16+

例:MOV AX,ES:[2000H],
冒号左侧ES为指定的段寄存器,冒号右侧为偏移地址。若未指定段寄存器,则默认段寄存器为DS。


答:
(1) MOV AX,[2000H] Ds:2000=3000:2000=32000
(2) MOV AX,50[BX] DS:(0100+50)=3000:150=30150
(3) INC DVAL[SI] DS:(040+0300)=30340
(4) MOV DVAL[BP],BL ss:(0200+040)=1000:0240=10240
(5) MOV AX,DVAL[BP][SI] ss:(BP+SI+DVAL)=1000:0540=10540
(6) MOV ES:[BX+SI],CX es:(0100+0300)=2000:0400=20400
BP默认SS段,BX默认DS段

参考资料:

https://zhidao.baidu.com/question/442780249.html

INC

加1指令 INC
指令功能 目标操作数+1
INC指令只有1个操作数,它将指定的操作数的内容加1,再将结果送回到该操作数。INC指令将影响SF,AF,ZF,PF,OF标志位,但是不影响CF标志位。
INC指令的操作数的类型可以是通用寄存器或存储单元,但不可以是段寄存器。字或字节操作均可。
对于存储单元,需要用BYTE PTR或者WORD PTR说明是字节还是字操作
https://zhidao.baidu.com/question/397464019.html

帮助理解汇编原理:

https://blog.csdn.net/best_fiends_zxh/article/details/53134001

DS寄存器、SS/SP寄存器:

https://blog.csdn.net/apollon_krj/article/details/70550667

汇编语言中 cs, ds,ss 的区别

https://zhidao.baidu.com/question/347752668.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值