TASM:如何在乘法后打印出寄存器对dx:ax在屏幕上?

时间:2014-03-09 18:02:29

标签: assembly multiplication tasm

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朋友

1 个答案:

答案 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中下载 也许它可以帮到你。