3

私の目標は、ユーザーが16進数で入力した2つの数値の解を表示することです。今のところ、私のコードはユーザーから2つの数値を取得し、10進数で解を返します。私がすべきだと思うのは、小数の解を取得し、数値を合計した後でそれを16進数に変換することです。別のもっともらしい方法があれば私に知らせてください。ありがとうございます。

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

入力コードと出力コードの両方を変更する必要があります。

入力コードは、文字と。をANDします$0f。これは、文字が0〜9の場合は機能しますが、文字がafの場合は機能しません。キャラクターをテストし、afの場合は別の方法で処理する必要があります。次に、前の結果に10ではなく16を掛ける必要があります。

出力に関しては逆の問題があります。divuを10から16に変更すると、途中まで到達しますが、ASCIIに変換するために$ 30を追加する場合は、値をテストし、10〜15の場合は代わりに$41を追加する必要があります09

于 2012-07-25T02:25:14.937 に答える
1

変更するだけ

DISDIV  divu    #10, D2

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