gpt4 book ai didi

assembly - 如何显示存储在 DX :AX 中的 32 位 DIV 结果

转载 作者:行者123 更新时间:2023-12-04 07:34:36 25 4
gpt4 key购买 nike

我写了这段代码来显示一些计算后的当前值。但是程序在应该给出十进制 10 结果时给出了错误的输出它给出了 13107 结果,我找不到原因。在此标签之前,我所做的基本上是从用户那里获取输入并将这些值存储在 si 寄存器中。

islem: 

MOV AX,[SI+14]
MOV BX,[SI+10]
MOV CX,[SI+2]

SUB AX,BX
SUB AX,CX

MOV BX,[SI+8]

MOV [SI+16],AX

MOV DX,00H
MOV AX,[SI+16]
DIV BX



MOV [SI+18],OFFSET IE

MOV [SI+18],AX
MOV [SI+20],DX

CALL NEWLINE

mov dx, offset Ie_msg
mov ah,9
int 21h

MOV AX,[SI+18]
MOV DX,[SI+20]



mov bx,10 ;CONST
push bx ;Sentinel
a: mov cx,ax ;Temporarily store LowDividend in CX
mov ax,dx ;First divide the HighDividend
xor dx,dx ;Setup for division DX:AX / BX
div bx ; -> AX is HighQuotient, Remainder is re-used
xchg ax,cx ;Temporarily move it to CX restoring LowDividend
div bx ; -> AX is LowQuotient, Remainder DX=[0,9]
push dx ;(1) Save remainder for now
mov dx,cx ;Build true 32-bit quotient in DX:AX
or cx,ax ;Is the true 32-bit quotient zero?
jnz a ;No, use as next dividend
pop dx ;(1a) First pop (Is digit for sure)
b: add dl,"0" ;Turn into character [0,9] -> ["0","9"]
mov ah,02h ;DOS.DisplayCharacter
int 21h ; -> AL
pop dx ;(1b) All remaining pops
cmp dx,bx ;Was it the sentinel?
jb b ;Not yet




ret

最佳答案

MOV AX,[SI+18]
MOV DX,[SI+20]

您的计算结果来自除法 ( div bx )。 商保存在 AX 中仅注册 . DX寄存器包含除法的余数。
只需加载 AXmov ax, [si+18]然后归零 DXxor dx, dx .
此后您可以运行我的转换代码...

关于assembly - 如何显示存储在 DX :AX 中的 32 位 DIV 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67796211/

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