分部于8086年在MASM举行

时间:2014-02-09 07:39:24

标签: assembly masm masm32

我在8086写这个汇编程序,但是它运行不正常。即使我使用单位数字,商和余数也会打印出一些随机符号。有人可以指出程序中的错误/错误吗?谢谢。

.model small
.stack 50h

.data
Divisor db ?
Dividend db ?
Quotient db ?
Remainder db ?

.code
main_method   proc
              mov    ax, @data
              mov    ds, ax

              mov    ah, 01
              int    21h
              sub    al, 48
              mov    Divisor, al

              mov    ah, 01
              int    21h
              sub    al, 48
              mov    Dividend, al
              mov    bl, 00
              mov    al, 00
              mov    bl, Divisor
              mov    al, Dividend
              div    bl

              mov    Quotient, al
              mov    Remainder, ah

              mov    dl, Quotient
              add    dl, 48
              mov    ah, 02
              int    21h

              mov    dl, Remainder
              add    dl, 48
              mov    ah, 02
              int    21h
              mov    ah, 4ch
              int    21h
main_method   endp
              end    main_method

2 个答案:

答案 0 :(得分:4)

DIV BLAX中的16位值除以BL,因此您应该清除那些您未使用的AX位(在这种情况下为整个上部字节)。所以在DIV之前添加:

MOV AH,0

XOR AH,AH  ; XORing something with itself clears all bits


或者,如果您的目标是80386或更高,则可以将Mov Al, Dividend替换为MOVZX AX, BYTE PTR Dividend

答案 1 :(得分:1)

基本上 DIV 功能除 AX 然后将商置于 AL 中,其余部分置于 AH 中。 AX AH AL 组成。因此,如果您只想划分 AL ,则必须确保 AH 0 。你可以在下面的方法中做出零点。

MOV AH, 0

OR

AND AH, 0

OR

XOR AH, AH