0

32 ビット Ubuntu での NASM アセンブリの学習。私はやや混乱しています:

では.bss、変数用に 1 バイトを予約しています。

num resb 1

後で、次の値を指定することにしました5

mov byte [num],5

そして、ある時点でそれを印刷します:

mov EAX,4
mov EBX,0
mov ECX,num
add ECX,'0'   ; From decimal to ASCII
mov EDX,1
int 0x80

しかし、それは何も印刷していません。

numの値を与えるときに問題があると思います5。私はもともとこれをやりたかった:

mov byte num,5

numメモリ内の位置を参照していると思ったので、その位置にmovコピー5します。しかし、私はエラーが発生しました

オペコードとオペランドの無効な組み合わせ

では、基本的に、プログラムが 5 を出力しないのはなぜですか? また、上記の私の提案が無効だったのはなぜですか?

4

1 に答える 1

1

int 0x80コードを使用して印刷するには、印刷するバイトのアドレスである4必要があります。ルーチンを呼び出す前にそのアドレスにECX追加したため、メモリ内のどこかにある別のアドレスでした。'0'numECXprint

あなたはこのようなものが欲しいかもしれません。numoutのASCIIバージョンを保持するために、別の領域を作成しましたnum

numout resb 1
....

mov EAX,4
mov EBX,0
mov CL,[num]
add CL,'0'
mov [numout],CL
mov ECX,numout
mov EDX,1
int 0x80
于 2013-09-15T00:01:32.450 に答える