【问题标题】:how to convert binary to decimal in asm x86?如何在asm x86中将二进制转换为十进制?
【发布时间】:2013-12-17 03:51:02
【问题描述】:

我不知道我在 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

【问题讨论】:

    标签: assembly binary x86 decimal


    【解决方案1】:

    您的代码中有错字:

    deciamlArray byte 8 DUP (' ')
    

    应该是:

    decimalArray byte 8 DUP (' ')
    

    【讨论】:

    • 天哪——谢谢。我犯了这么愚蠢的错误!顺便说一句,我试图进行计算,但它们只显示 000 作为我的结果。我在 DISPLAY_IN_DECIMAL 中做错了吗?
    • 很难说,因为你还没有展示你是如何使用宏的。
    • 我可以收件箱或通过电子邮件向您发送我的程序吗?这样你就可以看到我的整个程序代码。
    • StackOverflow 的一个想法是,其他人可能稍后会出现与他们遇到的相同或相似问题的问题,因此所有相关信息都应发布在问题中和答案。如果你有很多代码,你应该先缩小范围,这样你的问题就只包含相关的代码行。
    猜你喜欢
    • 2014-05-24
    • 2022-06-28
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多