为什么此汇编代码显示的数字不同于我指定的数字?

时间:2018-09-28 19:34:55

标签: assembly numbers

我正在学习如何使用常量,并且已经能够将字符串和整数加载到不同的寄存器中。唯一的问题是,不是显示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

1 个答案:

答案 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"