当前位置:编程学习 > 汇编语言 >>

汇编地址换算问题

如果DS=3000H , 物理地址31000H=11H,31001H=22H,则执行指令BX=2211H ,这个物理地址是怎么换算的啊,比如31000H=11H
答案:原题的意思可能你误解了,从DS=3000H,BX=2211H,看都是(寄存器)地址=内容;
也可能是你我思考的入口点不同
于是31000H=11H,31001H=22H,表示的也是地址处(31000H\31001h)的内容为(11H,22H)
执行指令BX=2211H,其应该是执行什么指令使得BX=2211H的意思吧
数据段寄存器放的是20位地址线的高十六位的部分值(高十六位的另外一部分值在偏移量中,可能有,也可能没有,这只要看偏移量的值的大小,如果值大小超过4bit所表示的值,则高于第四位的都属于高十六位的一部分)
所以20位物理地址,只需将16位数据段地址右补四位0即可得到“物理基地址”,如3000H=》30000H,也即3000H*16.最后加上偏移量得到内存单元的20位物理地址。
于是就编程解方程的小学数学问题了,设偏移量为Shift;实际物理地址为PysicalAddr
DS*16+Shitf=PysicalAddr(只需要知道DS,Shift,PysicalAddr三个中的任意一个就可以求出第三个)
如题中DS=3000H,PysicalAddr=31000H,31001H==.>Shift=0H,1H
根据小端存储格式,要使BX=2211H,可有以下方案
方案一:MOV BX,DS:[0H]
方案二:MOV BH,DS:[1H];
              MOV BL,DS:[0H]

以上方案由于可直接省略“DS:”,因为偏移地址的默认段数数据段,阿门。。。
其他:lkol 王 换算?没懂!
DS = 3000H
物理地址
DS*16+偏移地址(或者说ds 左移一位加上偏移地址)
也就是 bx=2211H
的物理地址是
32211H
8086系列 

上一个:Win32创建一个窗口的源代码,怎么编译不成功
下一个:帮忙查出我的错好吗?我实在找不出。

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,