-1

レジスタ ebx に次の値があるとします: 30303420

それを変換して、対応する ascii 値を出力したいと思います。したがって、印刷する必要があります

004

30  == 0
30  == 0
34  == 4
20  == space character.

それを画面に印刷するにはどうすればよいですか?

これは、アセンブリ コードを使用した 80x86 アーキテクチャです。

4

1 に答える 1

1

さて、あなたの質問にはいくつかの不明確な詳細があります。

1- ebx に 30303420 の 16 進値がある場合、正確には「004」という 4 つの Ascii 文字があります。つまり、次のようになります。

mov ebx,30303420H       ;is exactly the same than:
mov ebx,"004 "

10 進数の値はありません (どのような値ですか?) ため、ここでは変換は行われません。

2- ebx 値を画面に表示して「004」と表示する場合は、適切なサービスを使用するために、プログラムを実行するオペレーティング システムを指定する必要があります。たとえば、Windows の DOS ウィンドウでも実行される古いスタイルの MS-DOS INT 21H 関数を使用する場合は、このセグメントでそれを行います。

mov     cx,4        ;counter = 4 characters
    ;
next:
rol     ebx,8       ;rotate left EBX 1 byte: place next char in BL
mov     dl,bl       ;DL = char to show
mov     ah,2        ;AH = VIDEO OUTPUT function
int     21H         ;DOS kernel service Int: show the char
loop    next        ;repeat 4 times

ただし、プログラムが Linux で実行されている場合、ebx 値を表示する方法はまったく異なります。また、プログラムは別の方法で C ライブラリ関数を使用したり、Windows 準拠のプログラムであったり、BIOS INT 10H サービス (画面を担当) を使用したり、ビデオ回路などに直接アクセスしたりすることもできます。 ...

于 2012-04-12T20:16:28.603 に答える