Как вы можете догадаться, я новичок в этом (как нос, так и сборка, хотя я уже делал некоторые базовые сборки).
Я пытаюсь создать функцию, которая печатает целые числа в стандартный вывод. Используя одноразовый код (где число для печати является статическим), я добился успеха ... Однако по понятным причинам я хочу, чтобы в качестве аргумента он использовал число для печати.
Я не уверен, что мне лучше всего подходит макрос или функция, и я не могу найти много на тему макросов NASM вообще. Я внимательно прочитал руководство, но этого недостаточно.
Во всяком случае, я пытался сделать это с помощью макроса NASM, так как я создал еще один, который таким образом печатает строки с успехом.
Я сузил проблемный код до этого:
%macro crash 1
jmp %%endstr
%%str: db %1,0x0a
%%endstr:
mov [%%str], byte 0x16 <<< this crashes (segmentation fault)
%endmacro
section .text
global _start
_start:
crash "abc"
Похоже, что все, что использует скобки в буфере, падает, и я могу только предположить, что я делаю это неправильно.
То, что я хочу выше, это перезаписать первый байт в %% str другим байтовым значением. Точнее, мне нужно записать строку в буфер побайтно назад; Я (пытаюсь) сделать это с помощью цикла, где я делаю
mov [%%str+rcx], dl
dec rcx
, пока rcx не станет 0.
Если я не буду использовать макросы для этого, пожалуйста, просветите меня!
Я намерен сохранить эту функцию в мини-библиотеке для последующего использования, поэтому ее будет легко вставить в любой проект NASM.
Как говорится в теме и тегах, все это под Linux / amd64.