0
.text
.global main
main:
push %r13
push %r14
push %r15
jmp label
x:
pop %rbx
movq $0, %rax
movq $1, %r9
pushq %r9
popq %rsi
movq %rsi, %r15
.data
a1: .quad 0
.text
mov %r15,a1
mov $format,%rdi
movq $5, %r9
pushq %r9
popq %rsi
movq %rsi, %r15
call printf
push a1
popq %rsi
movq %rsi, %rax
push %rbx
ret
label:
mov $format,%rdi
call x
push %rax
popq %rsi
movq %rsi, %r15
call printf
mov $0,%rax
pop %r15
pop %r14
pop %r13
ret
.data
format: .string "%lu\n"
Ожидаемый выходПочему сборка печатает символ нежелательной почты из возвращаемого значения, если я сначала что-то печатаю?
, но я получаю
Поэтому я говорю, что это первая печать Мессинг его в том, что, когда Я удаляю печать 5, 1 печатается правильно. Я не уверен, почему это испортит 1, когда они будут напечатаны с использованием того же кода.
Что это за сложная сборка? – fuz
@fuz main вызывает метку, которая присваивает значение 1 переменной a1, печатает 5, а затем возвращает значение a1, которое печатается по его названию. Я понимаю, что эти отпечатки могут быть выполнены более легко, но для моих целей мне нужен код, структурированный таким образом. –
@ Ped7g Я использую gdb. Это не помогло решить эту проблему. –