0

以下汇编代码的输出预计为 6,但它是 3。怎么了?

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
4

2 回答 2

6

文档中:

按源对累加器进行无符号二进制除法。如果源除数是字节值,则 AX 除以 src 并将商放在 AL中,余数放在 AH 中。如果源操作数是字值,则 DX:AX 除以 src,商存储在 AX 中,余数存储在 DX 中。

于 2013-04-24T05:36:45.613 回答
1

DOS 函数需要寄存器中AH=02h的字符代码。 您的除法操作是并且不会改变。DL
word(AX)/byte(10) -> quot(AL)+res(AH)DL

于 2013-04-24T05:33:44.863 回答