Почему этот код сборки показывает номер, отличный от указанного мной? - PullRequest
0 голосов
/ 28 сентября 2018

Я учусь использовать константы и могу загружать строки и целые числа в разные регистры.Единственная проблема заключается в том, что вместо отображения 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 голосов
/ 28 сентября 2018

Что мне нужно было сделать, это переместить приведенный ниже код

_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"
...