92版差不多先生 发表于 2012-5-21 00:59:47

关于汇编的一个小问题

assume cs:codesg
codesg segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,40h
s:mov ,bl
inc bl

loop s

mov ax,4c00h
int 21h

codesg ends
end
我把“s:mov 【bx】,bl”中的bx改成bl就报错,究竟是什么回事?哪位仁兄能帮忙解答一下,谢谢。

Yara 发表于 2012-5-21 00:59:48

chabuduo 发表于 2012-5-21 19:02 static/image/common/back.gif
这个我知道,但是我给个2000:0,它不是也会翻译成2000:0000 的吗?所以我想啊,如果bl中是12的话,它为什么就 ...

:L你要知道,偏移地址是16位的,如果你偏移地址是bl的话,它最多能放的是FF,是8位的,而bx放的才是16位

Yara 发表于 2012-5-21 12:28:09

表示的是地址,地址要16位,而bl是8位

内谁家内小谁 发表于 2012-5-21 13:14:44

亲,您发错板块了,我帮你转移到汇编板块。

xsx 发表于 2012-5-21 13:52:54

强制转换一下应该可以,

绝剑天涯 发表于 2012-5-21 15:03:44

沉醉.. 发表于 2012-5-21 15:05:40

8086的地址是16位的 bl是8位
必须用16位通用寄存器

退聊人物;战孜瞳 发表于 2012-5-21 16:21:26

在课程中已经说过[]里面只能放bx,si,di这些寄存器 可没说bl可以放哦。楼主仔细看看前面的课程吧。

橙子 发表于 2012-5-21 16:39:42

那是第几课的东西哦,还没有{:5_92:}

92版差不多先生 发表于 2012-5-21 17:03:39

【】里面的地址一定要16为的吗?还有只能通用寄存器吗?

Yara 发表于 2012-5-21 18:21:29

chabuduo 发表于 2012-5-21 17:03 static/image/common/back.gif
【】里面的地址一定要16为的吗?还有只能通用寄存器吗?

物理地址是20位的,所以要用一个段寄存器存放1个16位的段地址和一个通用寄存器存放一个16位的偏移地址,在得到段地址和偏移地址后,CPU会通过地址加法器,组合成20位的物理地址,详细的你可以查看书本的第二章关于地址的一些讲解{:5_108:}

92版差不多先生 发表于 2012-5-21 19:02:10

这个我知道,但是我给个2000:0,它不是也会翻译成2000:0000 的吗?所以我想啊,如果bl中是12的话,它为什么就不能翻译成2000:0012呢?

92版差不多先生 发表于 2012-5-22 03:00:23

好吧,不行就不行吧,我也认了,毕竟人家编译器说了算嘛!

vip_ 发表于 2012-5-24 09:51:28


好吧,不行就不行吧,我也认了,毕竟人家编译器说了算嘛!
页: [1]
查看完整版本: 关于汇编的一个小问题