我是新來的程序集,並且我正在使用ATL & T語法在linux 64位編程。如果我將數字1存儲在一個寄存器中,我怎樣才能將它轉換爲ASCII字符「A」?例如:彙編:如何將數字轉換爲ASCII並寫入顯示緩衝區
movl $1, %ebx
addl $64, %ebx
我可以添加64到1,使65(A的十進制值),然後以某種方式將其轉換爲「A」和使用寫系統調用發送該到緩衝區?
編輯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
是的,你甚至可以使用'add $'A',%ebx'使你的代碼更具人類可讀性,並記錄常量的目的。字符*是整數,所以是的,你只是將該字節存儲在內存中,並將指針傳遞給該存儲器以「write(0,buf,1)' –
好吧,但是如果我不想使用常量,我會將%ebx寄存器中的$ 65轉換爲'A'嗎?他們的任何操作是否會轉化爲ascii? – Mic
創建一個臨時緩衝區。在其中放置一個字符(65是一個已經表示字符的值)。將緩衝區的地址傳遞給'sys_write'系統調用。 –