关于汇编的一个小问题
assume cs:codesgcodesg 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就报错,究竟是什么回事?哪位仁兄能帮忙解答一下,谢谢。
chabuduo 发表于 2012-5-21 19:02 static/image/common/back.gif
这个我知道,但是我给个2000:0,它不是也会翻译成2000:0000 的吗?所以我想啊,如果bl中是12的话,它为什么就 ...
:L你要知道,偏移地址是16位的,如果你偏移地址是bl的话,它最多能放的是FF,是8位的,而bx放的才是16位 表示的是地址,地址要16位,而bl是8位 亲,您发错板块了,我帮你转移到汇编板块。 强制转换一下应该可以, 8086的地址是16位的 bl是8位
必须用16位通用寄存器 在课程中已经说过[]里面只能放bx,si,di这些寄存器 可没说bl可以放哦。楼主仔细看看前面的课程吧。
那是第几课的东西哦,还没有{:5_92:} 【】里面的地址一定要16为的吗?还有只能通用寄存器吗?
chabuduo 发表于 2012-5-21 17:03 static/image/common/back.gif
【】里面的地址一定要16为的吗?还有只能通用寄存器吗?
物理地址是20位的,所以要用一个段寄存器存放1个16位的段地址和一个通用寄存器存放一个16位的偏移地址,在得到段地址和偏移地址后,CPU会通过地址加法器,组合成20位的物理地址,详细的你可以查看书本的第二章关于地址的一些讲解{:5_108:} 这个我知道,但是我给个2000:0,它不是也会翻译成2000:0000 的吗?所以我想啊,如果bl中是12的话,它为什么就不能翻译成2000:0012呢? 好吧,不行就不行吧,我也认了,毕竟人家编译器说了算嘛!
好吧,不行就不行吧,我也认了,毕竟人家编译器说了算嘛!
页:
[1]