首页
社区
课程
招聘
[旧帖] [求助]关于相对基址加变址相对寻址方式有效地址的计算 0.00雪花
发表于: 2008-2-10 19:56 5994

[旧帖] [求助]关于相对基址加变址相对寻址方式有效地址的计算 0.00雪花

2008-2-10 19:56
5994
我在教程上看到一个习题

关于基址加变址相对寻址方式的

指令:mov [bx+di-2]
ds=5000h,bx=1223h,di=54h

有效地址为 ds+bx+di+fff4(-2的补码)

50000+01223+00054+fffffe(负数补码带符号扩展前+f)
=151275h(我用计算器算的也是这个啊)

教程上说=51275h,他为什么把高位的1给丢掉啊?

搞不明白。。。。

谢谢~

[IMG][/IMG]

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
正整数计算要用正整数计算,负整数要用负整数计算。
50000+01223+00054-2 = 51275h

   50000+01223+00054+ffffe
= 51277 + fffffe
= not 51277 = AED89 - ffffe = AED8B = not AED8B = 51275
2008-2-10 21:25
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
3
你的思路是对的,正数的补码和负数的补码可以一起相加,只是最后结果确实要把第六位丢掉,是因为在IA16位的环境下没有办法表示。
DS:DX最多只能显示5个十六进制位(从你的思路知道我不用解释),最大只能是0xFFFFF。就算DS=FFFF,DX=FFFF,最大也是这个数,即向上溢出。如果结果小于可以表示的最小数,就是向下溢出。
这也就是为什么DOS实模式中只能访问1MB的内存的原因(不使用其它技巧时)
2008-2-11 00:23
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
16进制运算,把我搞晕了,+,—都快不会算了。。

我明白了,遇到负数可以直接算,不管他的补码形式了。或者按补码算的话,查看最大可表示多少位,从低位到高位,超过的直接忽略。

谢谢版主和楼上的朋友。

"= not 51277 = AED89 - ffffe = AED8B = not AED8B = 51275"
not加入运算中是什么意思啊?
2008-2-11 01:34
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
我说的not是将正数转成负数再计算。
2008-2-11 09:07
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
6
我是菜鸟,没看出来这样算的原理。
50000+01223+00054+ffffe
= 51277 + fffffe
= not 51277 = AED89 - ffffe = AED8B = not AED8B = 51275
我想:还是按CPU的硬件逻辑来好些吧:所有的数都用补码来表示,补码相加后,将溢出位去掉。
2008-2-11 15:12
0
游客
登录 | 注册 方可回帖
返回
//