gpt4 book ai didi

assembly - 两个整数的商不显示在汇编中

转载 作者:行者123 更新时间:2023-12-02 19:46:00 25 4
gpt4 key购买 nike

我的代码的一部分应该获取两个整数的和、差、乘积和商并显示它们。它对于求和、求差和乘积非常有效。然而,当涉及到商时,它没有显示任何内容。谁能解释一下为什么会这样以及是否有任何方法可以解决它?提前致谢!

printString result1
plus:
mov ax, firstInteger
mov bx, secondInteger
add ax, bx

call printAns

call printNewLine
; ---------------------------------------------------------------------------
printString result2
minus:
mov ax, firstInteger
mov bx, secondInteger
sub ax, bx

call printAns

call printNewLine
; ---------------------------------------------------------------------------
printString result3
multiply:
mov ax, firstInteger
mov bx, secondInteger
mul bx

call printAns

call printNewLine
; ---------------------------------------------------------------------------
printString result4
divide:
mov ax, firstInteger
mov bx, secondInteger
div bx

call printAns

call printNewLine

printAns 看起来像这样:

printAns proc
xor cx, cx
xor dx, dx
xor bx, bx
mov bx, 10
loop1:
mov dx, 0000h ;clears dx during jump
div bx ;divides ax by bx
push dx ;pushes dx(remainder) to stack
inc cx ;increments counter to track the number of digits
cmp ax, 0 ;checks if there is still something in ax to divide
jne loop1 ;jumps if ax is not zero

loop2:
pop dx ;pops from stack to dx
add dx, 30h ;converts to it's ascii equivalent
mov ah, 02h
int 21h ;calls dos to display character
loop loop2 ;loops till cx equals zero
xor ax, ax
xor bx, bx
ret
printAns endp

例如,如果我输入 9 作为第一个数字,3 作为第二个数字,则会发生以下情况: enter image description here

最佳答案

除法会错过 DX 寄存器的清除,因为字除法总是将 DX:AX 除以指定的操作数。

 printString result4
divide:
mov ax, firstInteger
xor dx, dx
div secondInteger
call printAns
call printNewLine

关于assembly - 两个整数的商不显示在汇编中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25931247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com