私はアセンブリの初心者で、AT & T構文のLinux 64ビットでプログラミングしています。レジスタに数値1を格納すると、それをASCII文字 "A"にどのように変換できますか?たとえば:アセンブリー:数値をアスキーに変換して表示バッファーに書き込む方法
movl $1, %ebx
addl $64, %ebx
は、私が65(Aの小数点値)を作るために1に64を追加することができ、その後、何らかの形で「A」に変換し、writeシステムコールを使用してバッファにこれを送りますか?
EDIT 1:ここに自分のプログラムコードを掲載する。
.section .data
message:
.long 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
length:
.long 10
.section .text
.globl _start
_start:
xorq %rdi, %rdi
xorq %rax, %rax
xorq %rbx, %rbx
xorq %rcx, %rcx
xorq %rdx, %rdx
movl length, %edx
loop:
cmpl %ecx, %edx
je loop_end
movl message(,%rdi,4), %eax
addl $64, %eax
pushq %rax
incq %rdi
incq %rcx
jmp loop
loop_end:
cmpq $0, %rcx
je exit
popq %rbx
pushq %rcx
movq $1, %rax
movq $1, %rdi
movq %rbx, %rsi
movl length, %edx
syscall
popq %rcx
decq %rcx
jmp loop_end
exit:
movq $60, %rax
movq $0, %rdi
syscall
はい、あなたもあなたのコードはより人間に読みやすくするために、$「A」を追加 '%のebx'を使用して、定数の目的を文書化することができます。文字は*整数なので、メモリにそのバイトを格納し、そのメモリへのポインタをwrite(0、buf、1)に渡します。 –
しかし、定数を使用したくない場合は、 %ebxの$ 65を 'A'に変換しますか? asciiに変換されるそれらの操作はありますか? – Mic
一時バッファを作成します。それに文字を入れます(65は既に文字を表す値です)。 'sys_write'システムコールにバッファのアドレスを渡します。 –