我正在学习如何使用常量,并且已经能够将字符串和整数加载到不同的寄存器中。唯一的问题是,不是显示42
,而是显示16777258
。这个数字一直都是一样的。如果将_number
更改为其他值,也会显示不同的数字。
这是为什么,我需要做什么?
这是我的汇编代码:
.section __TEXT,__text,regular,pure_instructions
.globl _main
_main:
#Backup base and stack pointer
pushq %rbp
movq %rsp, %rbp
#Move arguments
leaq L_.str(%rip), %rdi
movl _number(%rip), %esi
#Should calll printf("%d", 42)
callq _printf
#return 0
xorl %eax, %eax
popq %rbp
retq
.section __TEXT,__cstring,cstring_literals
L_.str:
.asciz "%d"
_number:
.long 42
答案 0 :(得分:1)
我要做的是移动下面的代码
_number:
.long 42
从.section __TEXT,__cstring,cstring_literals
到.data
。我的代码如下:
.section __TEXT,__text,regular,pure_instructions
.globl _main
_main:
#Backup base and stack pointer
pushq %rbp
movq %rsp, %rbp
#Move arguments
leaq L_.str(%rip), %rdi
movl _number(%rip), %esi
#Should calll printf("%d", 42)
callq _printf
#return 0
xorl %eax, %eax
popq %rbp
retq
.data
_number:
.long 42
.section __TEXT,__cstring,cstring_literals
L_.str:
.asciz "%d"