Print decimal in 8086 emulator

前端 未结 3 1813
感动是毒
感动是毒 2020-12-04 04:23

I implemented the multiplication of two big integer in emu8086 with code as below :

; MULTIPLY N1 * N2 = RES
MULTIPLY PROC
    MOV BH, 0H                


        
3条回答
  •  再見小時候
    2020-12-04 04:37

    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
    

    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 :)

提交回复
热议问题