如何在asm x86中将二进制转换为十进制?

时间:2013-12-01 10:53:21

标签: assembly binary x86 decimal

我不知道在DISPLAY_IN_DECIMAL中我的编码有什么问题。 他们一直给我这个错误。

 Assembling: coa.asm
coa.asm(314) : error A2006:undefined symbol : decimalArray
 DISPLAY_IN_DECIMAL(3): Macro Called From
  coa.asm(314): Main Line Code
Press any key to continue . . .

我认为我的decimalArray可能有问题,但我不确定是什么。

这是我完成所有二进制显示的代码部分。似乎没有错。

counter db 0
        X db 00000000B
        Y db 00000000B

        deciamlArray byte 8 DUP (' ')

        decimalResult db ?
        dec1 db ?

        .code
       DISPLAY_IN_BINARY MACRO result
            local L5, printBinary, print0, print1, nextBit

            PUSH ax
            MOV al, result
            MOV cx, 8

            printBinary:
            TEST al, 10000000b    ;1 in 10000000b indicate that the bit to be compare and print out
            JZ    print0
            JNZ print1

            print1:
            displayResult1  ;If bit of result not equal to 0 ,print 1
            SHL al, 1
            JMP nextBit

            print0:     ;If bit of result = 0,print 0
            displayResult0
            SHL al, 1
            JMP nextBit

            nextBit:
            LOOP printBinary

            POP ax
        ENDM  

但是当我尝试使用我的小数时,他们给了我刚才上面说的错误。 我认为我的decimalArray可能有问题,但我不确定。

DISPLAY_IN_DECIMAL MACRO result
    local L1,L2,L3
    MOV SI, OFFSET result
    MOV DI, OFFSET decimalArray
    MOV decimalResult, 0
    MOV CX, 8

    L1:
        MOV AL, [SI]    
        CMP AL, '1'
        JE L2
        JMP L3
    L2 :
        MOV AL, 0
        MOV AL, [DI]
        ADD decimalResult, AL
        JMP L3
    L3:
        INC SI
        INC DI
        LOOP L1
    MOVZX AX, decimalResult
    MOV BL, 10
    DIV BL
    MOV BX, AX
    MOV DH, BH
    MOV dec1, BL
    MOVZX AX, dec1
    MOV BL, 10
    DIV BL
    MOV BX, AX

    MOV AH, 02H     ; print results
    MOV DL, BL
    ADD DL, 30H
    INT 21H
    MOV DL, BH
    ADD DL, 30H
    INT 21H
    MOV DL, DH
    ADD DL, 30H
    INT 21H
 ENDM

1 个答案:

答案 0 :(得分:2)

您的代码中存在拼写错误:

deciamlArray byte 8 DUP (' ')

应该是:

decimalArray byte 8 DUP (' ')