@sos1mple

Как сделать простой цикл с printf на nasm 64bit macos?

Добрый день!
Хочу вывести значения от 0 до 4. Насколько я правильно прочитал - ecx итерационный регистр. Но в моем случае почему то цикл превращается в бессконечный. Как это исправить? Заранее спасибо!

На данный момент есть вот такой код:
default rel

section .data
    fmt:    db "%d",10,0
    i: dq 0

extern	_printf

section .text
	global	start
    start:
        sub rbp, 8
        push rbp			; set up stack

        mov ecx, 5
        mov rax, 0
        mov [i], rax
        call loop1


    loop1:
        mov	rdi, fmt ; Загружаем шаблон вывода
        mov	rsi, [i]; Передаем параметр
        call _printf

        mov rax, [i]
        inc rax
        mov [i], rax
        loop loop1
  • Вопрос задан
  • 232 просмотра
Решения вопроса 1
@none7
В Mac OS x86-64, rcx используется в качестве четвёртого параметра и не обязан сохранять свое значение после вызова функции. Храните значение счётчика в памяти или в одном из сохраняемым регистров(rbx, rbp, r12-r15), но помните Вы так же обязаны восстановить значения этих регистров, при выходе в код Си, если конечно меняли их.
Посколько rcx не сохраняется то лучше заменить loop на пару инструкций dec, jne.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы