注册 登录
编程论坛 汇编论坛

高手帮忙解答阿?

wangluncbal6 发布于 2008-09-11 12:34, 1982 次点击
如MOV AX 20[SI]的如果(SI)=0030H DS=0200H书上的算出来是02044H我算出来是02050H怎么回事?
13 回复
#2
随心2008-09-11 13:56
期待高手回答,我也刚开始学习汇编.
你能说一下你是怎么算的么?
#3
zhulei19782008-09-11 13:59
20是十进制数,要转换成十六进制后在相加
#4
随心2008-09-11 15:31
这应该是寄存器的相对寻址方式
mov ax, 20[SI]也可以写成mov ax,[20+SI], 20也可以写成其它符号地址;
如果 (SI)=0030H, (DS)=0200H,
则物理地址 = 0030H + 0200H+ 20 = 0244H (20我看成了十进制数来算的)

也不是楼主书上的02044H,怪了
#5
ONEPROBLEM2008-09-11 16:40
[bo][un]随心[/un] 在 2008-9-11 15:31 的发言:[/bo]

这应该是寄存器的相对寻址方式
mov ax, 20[SI]也可以写成mov ax,[20+SI], 20也可以写成其它符号地址;
如果 (SI)=0030H, (DS)=0200H,
则物理地址 = 0030H + 0200H+ 20 = 0244H (20我看成了十进制数来算的)

也不 ...

这里的DS左移一位,再相加吧?
2000H + 0030H + 20 = 2044H
#6
随心2008-09-11 17:11
DS为什么要左移一位
#7
ONEPROBLEM2008-09-11 17:21
[bo][un]随心[/un] 在 2008-9-11 17:11 的发言:[/bo]

DS为什么要左移一位

物理地址是用20位来表示的,而DS是16位的寄存器,不能装下20位.所以,把后4位(二进制的,换成16进制是一位)给截了,最后换算的时候通过左移4位(16进制是一位),先还原成20位的.

[[it] 本帖最后由 ONEPROBLEM 于 2008-9-11 17:23 编辑 [/it]]
#8
随心2008-09-11 17:27
难怪疯子要加你好友,果然是高手,学习了
#9
ONEPROBLEM2008-09-11 17:32
这个疯子!我还没找他算账呢,有一次灌水差点把我灌到桌子底下了.
#10
summerxi2008-09-15 21:22
我也做出来了!!!
LS的很强啊。。
可否加下好友哦???
#11
zklhp2008-09-18 18:14
[bo][un]summerxi[/un] 在 2008-9-15 21:22 的发言:[/bo]

我也做出来了!!!
LS的很强啊。。
可否加下好友哦???


ONEPROBLEM就是挺强 偶也想加他好友 被拒绝了 可能人家忙
#12
ONEPROBLEM2008-09-18 18:39
[bo][un]zklhp[/un] 在 2008-9-18 18:14 的发言:[/bo]



ONEPROBLEM就是挺强 偶也想加他好友 被拒绝了 可能人家忙

太抬举我了~~~
在BCCN空间里,不是加了你好友么?
#13
zklhp2008-09-19 16:13
[bo][un]ONEPROBLEM[/un] 在 2008-9-18 18:39 的发言:[/bo]


太抬举我了~~~
在BCCN空间里,不是加了你好友么?


偶说的是qq 呵呵

以后有不懂还得多向您请教
#14
ONEPROBLEM2008-09-19 16:53
[bo][un]zklhp[/un] 在 2008-9-19 16:13 的发言:[/bo]



偶说的是qq 呵呵

以后有不懂还得多向您请教

相互切磋就可以了~~我敢断定你的汇编水平一定不弱~~
1