include io.h
cr equ 0dh
lf equ 0ah
stacksg segment stack
dw 100 dup(?)
stacksg ends
datasg segment
prp1 db '1st Number:',cr,lf,0
prp2 db '2nd Number:',cr,lf,0
prp3 db 'The result:',cr,lf,0
numA dw ?
numB dw ?
sum dw 20 dup(?),0
entersim db cr,lf
datasg ends
codesg segment
start:
assume cs:codesg,ds:datasg
mov ax,datasg
mov ds,ax
output prp1
inputs numA,10
atoi numA
mov numA,ax
output prp2
inputs numB,10
atoi numB
mov bx,ax
mov ax,numA
mul bx
itoa sum,ax
output entersim
output prp3
output sum
output entersim
mov al,0
mov ah,4ch
int 21h
codesg ends
end start
我无法在乘法结果大于16位并且答案存储在dx:ax对寄存器的情况下显示整个结果,我怎么能在屏幕上显示正确的操作答案? 如果有这种情况的示例代码写出来...... tnx朋友
答案 0 :(得分:2)
您需要使用不同版本的 itoa 来显示来自寄存器对DX:AX的32位数作为无符号十进制数。这个数字的最大值是4294967295。 将DX:AX中的数字除以1000000000,得到商4.这是第一个输出数字。 减去4 * 1000000000,现在DX:AX = 294967295。除以1亿,给2。 减去2 * 100000000,现在DX:AX = 94967295。重复,直到处理完所有十位数字。
二十年前我为此编写了一个名为 StoDD 的宏,它可以在http://vitsoft.info/vsasmlib.zip的文件CPU.MAC中下载 也许它可以帮到你。