Ничего не получай в терминале

# #assembly #x86-64 #nasm

Вопрос:

Я новичок в сборке, у меня есть один вопрос. Почему я ничего не получаю в терминале, когда запускаю его? Чтобы скомпилировать его, я пишу ( nasm -felf64 example.asm -o example.o amp;amp; ld example.o -o example amp;amp; ./example )

 section .data
   first_number:
           dq '50'
   second_number:
           dq '40'
   
   section .text
   global _start
   _start: 
          mov rax, first_number
          mov rdi, second_number
          cmp rax, rdi
          jae .true
          jb .false
  
  .true:  
          mov rcx, ‘1’
          jmp .execution
  .false: 
          mov rcx, ‘0‘
          jmp .execution
  .execution: 
          mov rax, 1
          mov rdi, 1
          mov rsi, [rcx]
          mov rdx, 8
          syscall
          
          mov rax, 60
          xor rdi, rdi
          syscall
 

Но почему, если я изменю rsp на rcx, этот код не будет работать?
Спасибо

Комментарии:

1. пожалуйста, удалите номера строк из вашего кода

2. Использование rsp в качестве регистра общего назначения нехорошо.

3. Потому что это указатель стека. Но это не причина отсутствия результатов. write Системный вызов ожидает адрес, и вы передаете 0 или 1, которые являются недопустимыми. Также вы сравниваете 8 байт, когда хотите сравнить 2.

4. Вместо mov rsp, '0' того, чтобы делать push '0' и вместо mov rsi, [rsp] того, чтобы делать mov rsi, rsp .

5. Также вы должны использовать скобки для доступа к значениям. Вы сравниваете адреса. Делать mov rax, [first_number] . Тогда вы получите 1 вывод, да. Примечание. Вам нужно напечатать только 1 символ, а не 8.