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段
参考资料:
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寄存器:
汇编语言中 cs, ds,ss 的区别