Этот код работает.Я просто не понимаю, почему это всегда должно работать.
Вот строка, которая заканчивается символом перевода строки, то есть целое число 10.
section .data
message: db 'aye sup dawg!', 10
Вот как я печатаю такойстрока.Проблема с длиной строки.Я ищу 0, но в моей строке нет 0.Очевидно, следующий байт после 10 - это 0, но это не является явным в коде, и я запутался, если у меня есть правильное понимание.
string_length:
xor rax, rax
.loop:
inc rax
cmp byte [rdi+rax], 0
jnz .loop
ret
print_string:
call string_length
mov rdx, rax ; length arg moved for syscall
mov rsi, rdi ; string ptr moved for syscall
mov rax, 1 ; 'write' syscall numb
mov rdi, 1 ; stdout descriptor
syscall
ret
Это мой собственный код для книжного упражнения.Ответ в github автора использует то же сравнение с 0, однако.Должно быть, я допустил ошибку, исходящую из C, где внутреннее строковое представление оканчивается нулем и считается длиной байта самой строки.
По сути, как я могу быть уверен, что следующеебайт после 10 равен 0?