assembly - 8086 中的除法 MASM 中的组装

标签 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

最佳答案

DIV BLAX 中的 16 位值除以 BL,因此您应该清除 AX 的那些位code> 你没有使用(在本例中是整个高位字节)。所以就在 DIV 之前,添加:

MOV AH,0

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


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

关于assembly - 8086 中的除法 MASM 中的组装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21656571/

相关文章:

linux - ARM Linux下的特权模式

assembly - 一个从数组中查找最大和最小数字的程序

c++ - 在 MASM 中调用 C++ 函数

assembly - 参加汇编类(class),陷入DOS!

assembly - 通过加法和减法设置和清除进位标志

assembly - 圈,圈,圈?

assembly - 使用 asm 指令读取 MIPS CPU 寄存器

c - MASM 函数未返回正确的值

assembly - `bx`和 `bp`之间的区别?

assembly - 在宏汇编器中连接