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