2013-10-04 24 views
1

我不理解在这种情况下可以做什么 使用AAM指令 可以进行单个数字的乘法运算AAM你需要压缩BCD因此结果后两位数乘法不会在AX寄存器中积累......乘以两个数字的数字,将两个数字作为输入,结果也打印在Tasm

,所以我需要一个想法,我怎么能解决这个问题。谢谢

这里是如何进行的输入应该看起来像(取一个两位数字)并且BCD是可取的

mov dx,offset msg 
mov ah,09h 
int 21h 

mov ah,01h 
int 21h 

mov ch,al 
sub ch,30h 
ror ch,04h 

mov ah,01h 
int 21h 

mov cl,al 
sub cl,30h 
add cl,ch 
+3

这个问题目前很不清楚。你的输入是什么样的?输出应该是什么样子?是否需要使用BCD?发布代码的相关部分。 – Michael

+0

@Denson由于您正在阅读来自键盘的输入,因此无论如何您都需要从ASCII转换,您并没有被绑定到输入格式。在我看来,在BCD中进行计算没有任何优势。如果你真的需要的话,用标准二进制进行计算,然后将结果转换成BCD。 – us2012

+0

如果可能,你可以详细说明你的解决方案吗? – Denson

回答

1
mynumber1 db ? 
mynumber2 db ? 

mov ah,01h 
int 21h 
sub al, 30h <- ASCII to value 

mov bl, 0Ah 
mul bl <- multiply al with 10 

mov mynumber1, al <- mynumber1 now stores the tens (i.e. if you entered 8 it's now 80) 

mov ah,01h 
int 21h 
sub al, 30h <- ASCII to value, al now stores the ones 

add mynumber1, al <- now your two-digit number is completely in mynumber1 

现在重复相同的mynumber2。然后:

mov al, mynumber1 
mov bl, mynumber2 

mul bl 

现在该产品是在AX。如果您真的需要,继续将AX的内容转换回BCD。


下面的代码将打印数量与存储在AX 最多4位数

xor dx,dx 
mov bx,03E8h 
div bx 
call printdig 

mov ax,dx 
xor dx,dx 
mov bx,0064h 
div bx 
call printdig 

mov ax,dx 
xor dx,dx 
mov bx,000Ah 
div bx 
call printdig 

;remainder from last div still in dx 
mov al,dl 
call printdig 

请注意,您需要以下辅助函数,它从al打印一个单一的数字:

printdig proc 
push dx 
mov dl,al 
add dl,30h 
mov ah,02h 
int 21h 
pop dx 
ret 
printdig endp 
+0

你能告诉我,我应该如何输出斧头的数字没有转换为BCD的方式我输出的数字在这种情况下不起作用@ us2012 – Denson

+0

@Denson请参阅我对以下问题的回答:http://stackoverflow.com/questions/19147472。它解释了打印数字的简单算法。 – us2012

+0

我经历了你的算法 假设我有一个四位数的斧头 我该如何去做呢? 该算法是否也适用于此? – Denson