# #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.