これは、純粋なアセンブリで行う必要があります(つまり、ライブラリやCの呼び出しは不要です)。アセンブリの整数をLinuxに出力する
私は問題の本質を理解しています。整数を10で除算し、1桁の剰余をASCIIに変換し、それを出力し、商を使ってプロセスを繰り返す必要があります。
何らかの理由で、機能していないだけです。私はx86上でNASMを使用しています。ここで
は、私が今まで持っているものだ(何も出力しませんが、いずれかの任意のアセンブラエラーをスローしません):
; integer to output is stored in eax
mov ecx, 10 ; for base 10
loop:
div ecx ;EAX contains the quotient, EDX the remainder
; Do something to EDX to convert it to ASCII, not sure if this is correct
add edx, '0'
push eax ;We'll be playing with EAX to output EDX, save EAX to the stack
mov eax, 4 ; sys_write
mov ebx, 1 ; to STDOUT
mov ecx, edx
mov edx, 1
int 0x80
pop eax ;restore EAX
cmp eax, 0 ;If EAX is 0, our job is done
jnz loop
、これと同じ質問の数(すなわち、thisがあります。とthis)、私は実装が失われています。 This question(DOS用)も役に立ちましたが、私はまだ混乱しています。
私はここで何かを紛失しているはずです。思考?
このコードのどこにでも定数10が表示されません。小数点を出力するために必要です。 (10桁で「div」と「mod」を繰り返し入力し、その桁を格納して反転して出力するか、「ビッグエンド」から最初に「100,000,000」、次に「10,000,000」で割ります。などがありますが、ストアアンドリバースの方法よりもそれほど複雑ではないかもしれません)。 – sarnold
@sarnold一番上に行を挿入するのを忘れました。それを追加するために私の質問を編集しました。 –
優秀!更新していただきありがとうございます。 – sarnold