将我的解决方案从十进制转换为Hex

时间:2012-07-25 01:37:12

标签: assembly microprocessors 68000

我的目标是显示用户在十六进制中输入的2个数字的解。截至目前,我的代码从用户获得2个数字,然后以十进制形式返回解决方案。我认为我应该做的只是得到我的十进制解决方案,并在数字加在一起后将其转换为十六进制。如果有其他合理的方式请告诉我。谢谢你。

org $8000
START   movea.l #MSG1, A1
    move.b  #13,D0
    trap    #15        
    clr.w   D2
    JSR Loop

    move.w  d2, d4
    movea.l #msg2, a1
    move.b  #13,D0
    trap    #15       
    clr.w   d2
    jsr loop

    movea.l #msg3, A1
    move.b  #13,D0
    trap    #15 
    add.w   d4, d2
    JSR DISP

    MOVE.B  #9,D0
    TRAP    #15      
LOOP    move.b  #5,D0
    trap    #15
    cmp.b   #$0D, D1
    BEQ BREAK
    and.b   #$0F, d1
    mulu    #10, d2
    add.w   d1, d2
    jmp loop
Break   rts
DISP    clr.b   d3
DISDIV  divu    #10, D2
    move.b  #16, d5
    ror.l   d5, d2
    or.b    #$30, d2
    move.b  d2, -(A7)
    addq    #1, d3
    clr.w   d2
    ror.l   d5, d2
    bne DISDIV
DISDIG  move.b  (a7)+, D1
    move.b  #6,D0
    trap    #15     ; char out
    subq.b  #1, D3
    bne DISDIG
    rts
    org $8100
MSG1    DC.B    'Please enter a two digit number ', 0
MSG2    DC.B    'Please enter another two digit number ', 0
MSG3    DC.B    'The sum of the two 2 digit numbers you entered is ', 0
    end     start

我正在使用EASY68k汇编程序。

2 个答案:

答案 0 :(得分:3)

您需要更改输入和输出代码。

输入代码将字符与$0f进行AND运算,当字符为0-9时有效,但字符为a-f时无效。你需要测试角色并对a-f情况采用不同的方法。然后,您需要将先前结果乘以16而不是10。

输出上存在相反的问题。将divu从10更改为16会让您到达中途,但在您添加30美元以转换为ASCII 0 - 9时,您需要测试该值并添加$ 41,如果它是在10到15之间。

答案 1 :(得分:1)

只需更改

DISDIV  divu    #10, D2

DISDIV  divu    #16, D2