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
这个问题目前很不清楚。你的输入是什么样的?输出应该是什么样子?是否需要使用BCD?发布代码的相关部分。 – Michael
@Denson由于您正在阅读来自键盘的输入,因此无论如何您都需要从ASCII转换,您并没有被绑定到输入格式。在我看来,在BCD中进行计算没有任何优势。如果你真的需要的话,用标准二进制进行计算,然后将结果转换成BCD。 – us2012
如果可能,你可以详细说明你的解决方案吗? – Denson