2013-04-24 31 views
0

下面的汇编代码的输出预计为6,但它是以3.出现了什么问题?其余部分以div运算(X86 tasm汇编程序)

data_seg segment 
msg1 db "hi",10,13,"$" 
msg3 db 26 
num db 10 
data_seg ends 
code_seg segment 
assume cs:code_seg, ds:data_seg 
start: 
     mov ax,data_seg     ;init 
     mov ds,ax 

    loop1: 
     mov ah,0 
     mov al,msg3 
     div num 
     mov ah,02 
     int 21h 
    term: 
     mov ah,4ch   ;termination code      
     mov al,0 
     int 21h 
code_seg ends 
end start 
+3

感叹......看看div有什么分歧。在你的情况下,其余的是在'啊'...所以你及时打破它。 'mov dl,啊'可能会让你失望。 – 2013-04-24 05:41:12

+2

噢,如果你希望看到一个数字,'add dl,'0'... ... – 2013-04-24 05:43:53

+0

剩下的就是啊,而不是dl。刚刚检查 – manoj 2013-04-24 05:51:01

回答

4

documentation

无符号二进制由源累加器的分裂。如果来源 除数是一个字节值,那么AX除以src,并且商是 放置在AL 中,剩余部分在AH中。如果源操作数是一个字 值,则DX:AX除以src,商存储在AX 中,其余部分存储在DX中。

+0

谢谢..它解决了 – manoj 2013-04-24 05:51:58

1

DOS功能AH=02h预计DL寄存器字符代码。
您的分部操作是word(AX)/byte(10) -> quot(AL)+res(AH)并且不会更改DL