0

0 から 100 までの 20 個のユーザー入力数値を必要とするプログラムを作成して数値の平均を求め、それらを失敗または合格として分類する必要がありますが、入力を ascii としてメモリに保存し、ascii からバイナリに変更する必要があります。ascii 数値は 16 進数で 30 ~ 39 であることは知っていますが、93 を数値として入力すると 3933 として保存されるように、MC68K でそれを実装する方法がわかりませんが、バイナリに変換するにはどうすればよいですか?

4

2 に答える 2

0

これが私がそれを行う方法です:

str_to_int:
    ; Converts a decimal signed 0-terminated string in a0 into an integer in d0.
    ; Stops on the first non-decimal character. Does not handle overflow.
    ; Trashes other registers with glee.
    moveq #0, d3
.signed:
    cmpi.b #'-',(a0)     ; Check for leading '-'.
    bne.s  .convert
    bchg   #0,d3
    addq.l #1,a0
    bra.s  .signed
.convert:
    moveq.l #0,d0
    moveq.l #0,d1
.digit:
    move.v (a0)+,d1
    beq.s  .done
    subi.b #'0',d1       ; Convert to integer.
    bmi.s  .done         ; If < 0, digit wasn't valid.
    cmpi.b #'9'-'0',d1
    bgt.s  .done         ; If larger than 9, done.
    muls.l #10,d0
    add.l  d1,d0
    bra.s  .digit
.done:
    tst.b  d3
    bne.s  .signed
    rts
.signed:
    neg.l  d0
    rts

注:上記は、私が触れていないプロセッサのテストされていないアセンブリコードです...かなり長い間。うまくいけば、少なくともインスピレーションを与えることができます。もちろん、当時は誰もmulsここであえて使用することはなかったでしょうが、それは教育的です. しゃれを許してください。

于 2014-04-09T11:09:53.363 に答える