在8086仿真打印十进制 [英] Print decimal in 8086 emulator
本文介绍了在8086仿真打印十进制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我实现了两大整数乘法 EMU8086
与code如下:
I implemented the multiplication of two big integer in emu8086
with code as below :
; MULTIPLY N1 * N2 = RES
MULTIPLY PROC
MOV BH, 0H
MOV CH, 0H
MOV CL, L1; initial counter of first loop ( L1 -> length of N1 )
DEC CX
MUL_1:
MOV COUNTER, CL ; store counter of first loop
MOV CL, L2 ; initial counter of second loop ( L2 -> length of N2 )
MUL_2:
MOV BH, 0H
MOV BL, COUNTER
DEC BL
MOV AL, N1[BX] ; get BX th byte of N1
MOV BL, CL
DEC BL
MUL N2[BX] ; multiple N1 and N2 's bytes
MOV BH, 0H
MOV BL, COUNTER
ADD BX, CX
DEC BX
ADD RES[BX], AL ; AL should be add into RES[loop1_counter + loop2_counter - 1]
ADC RES[BX+1], AH; AH and carry should be add into RES[loop1_counter + loop2_counter ]
ADC RES[BX+2], 0H; carry of above addition should be place here.
LOOP MUL_2
MOV CL, COUNTER; retrieve loop 1 counter
LOOP MUL_1
RET ; end function
MULTIPLY ENDP
所以,我想打印在小数模式
,我知道如何打印导致十六进制
:
So, i want to print it in Decimal Mode
, i know how to print result in HexaDecimal
:
PRINT_TABLE PROC
MOV CX, 16D
CASE:
MOV BX, 16D
SUB BX, CX
MOV AL, RES[BX]
CMP AL, 10D
JB LBL1
JAE LBL2
LBL1:
ADD AL, '0'
JMP CONTINUE
LBL2:
ADD AL, 55D
CONTINUE:
MOV DL, AL
MOV AH, 02H
INT 21H
LOOP CASE
RET
PRINT_TABLE ENDP
可能任何一个请帮我打印我的结果在10进制模式?
Could any one please help me to print my result in Decimal Mode ?
感谢您提前:)
推荐答案
我解决了我的问题,改变了我的code如下:
I solved my problem with changing my code as below :
NORMALIZE PROC
MOV CH, 0H
MOV CL, L1
ADD CL, L2
DEC CX
NOMRALIZE_LOOP:
MOV BX, CX
DEC BX
MOV AL, RES[BX]
MOV AH, 1H
MUL AH
AAM
MOV RES[BX], AL
ADD RES[BX-1], AH
LOOP NOMRALIZE_LOOP
RET
NORMALIZE ENDP
; MULTIPLY N1 * N2 = RES
MULTIPLY PROC
MOV CH, 0H
MOV CL, L1
MOV AL, '0'
MOV BH, 0H
SUB_N1:
MOV BL, CL
DEC BL
SUB N1[BX], AL
LOOP SUB_N1
MOV CL, L2
SUB_N2:
MOV BL, CL
DEC BL
SUB N2[BX], AL
LOOP SUB_N2
MOV CH, 0H
MOV CL, L1
MUL_1:
MOV COUNTER, CL
MOV CL, L2
MUL_2:
MOV BH, 0H
MOV BL, COUNTER
DEC BL
MOV AL, N1[BX]
MOV BL, CL
DEC BL
MUL N2[BX]
AAM
MOV BH, 0H
MOV BL, COUNTER
ADD BX, CX
DEC BX
DEC BX
ADD RES[BX], AL
ADC RES[BX-1], AH
ADC RES[BX-2], 0H
LOOP MUL_2
MOV CL, COUNTER
LOOP MUL_1
RET
MULTIPLY ENDP
我改变了乘法和存储号码与 AAM
功能。最后,我添加 NORMALIZE
函数结果转换成十进制。 :)
I changed the multiplication and storing numbers with AAM
function. At the end, i add NORMALIZE
function to convert result to decimal. :)
希望其他人可以使用它:)
Hope others can use it :)
这篇关于在8086仿真打印十进制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文