1

これを尋ねるのは少し恥ずかしいですが、アセンブラでバイトの値を出力するにはどうすればよいですか?ALレジスタに番号62があるとします。8086をターゲットにしています。ASCII値を出力する割り込みのみが使用可能であるようです。

編集:ニックDに感謝します、それは私が探していたものでした。いくつかの質問に答えるために、私は実際にエミュレーターemu8086を使用しています。このコードは、古い機器を使用する工場の小さなアプリケーションで使用されます(つまり、秘密です)。

Nick Dのアイデアを使用したソリューションは、次のようになります。

比較番号、99
over99Labelより大きい場合はジャンプします
比較番号、9
9と99Labelの間の場合はジャンプします

;ジャンプが失敗した場合、数字は1桁です
printdigit(数値)

between9and99Label:
数を10で割る
printascii(商)
printascii(モジュラス)
最後にジャンプ

over99Label:
数を100で割る
printascii(商)
9と99Labelの間が入力と見なす場所にモジュラスを格納します
9と99Labelの間にジャンプ

終わり:
戻る

署名されていないバイトに対しては正常に機能します:)

4

2 に答える 2

2
// pseudocode for values < 100
printAscii (AL div 10) + 48
printAscii (AL mod 10) + 48

値を文字列表現に変換して出力します。

于 2010-03-30T16:55:17.953 に答える
1

現時点でアセンブラーにアクセスして確認することはできません。構文は、使用しているアセンブラーによって異なりますが、それでもアイデアを伝えることができます。

FOUR_BITS:
.db '0'、 '1'、 '2'、 '3'、 '4'、 '5'、 '6'、 '7'、 '8'、 '9'、'A'、'B'、 'C'、'D'、'E'、'F'

; ebxを保存する必要がある場合は、そうしてください
ebxをプッシュ

; alの上位4ビットを取得する
mov bl、al
shl bl、4

; これをASCII16進表現に変換します
mov bl、[FOUR_BITS + bl]

; その値を印刷ルーチンのパラメータとして使用します
blを押す
printAsciiを呼び出す
ポップbl

; alの下位4ビットを取得します
mov bl、al
およびbl、0xF

; これをASCII16進表現に変換します
mov bl、[FOUR_BITS + bl]

; その値を印刷ルーチンのパラメータとして使用します
blを押す
printAsciiを呼び出す
ポップbl

于 2010-03-30T17:20:16.263 に答える