3

我的目标是以十六进制显示用户输入的 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 汇编程序。

4

2 回答 2

3

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

输入代码与字符与$0f,当字符为 0-9 时有效,但当字符为 af 时无效。您需要测试角色并针对 af 案例以不同的方式对待它。然后你需要将先前的结果乘以 16 而不是 10。

你在输出上有相反的问题。将 10更改divu为 16 可以使您成功,但是您添加 30 美元以转换为 ASCII 0-9您需要测试该值并添加 41 美元,如果它在 10 和 15 之间。

于 2012-07-25T02:25:14.937 回答
1

只是改变

DISDIV  divu    #10, D2

DISDIV  divu    #16, D2
于 2012-07-25T02:13:09.607 回答