2013-04-24 34 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