LINUX.ORG.RU

Nasm, hello world

 , ,


0

1

Доброго времени суток. Дошли руки попрактиковаться на ассемблере nasm. не могу понять почему у меня происходит бесконечный цикл. как я понимаю команда loop делает if(--ecx) {}. хочу что то на подобии

while(--ecx)
    printf("ecx = %d", ecx);
extern printf
%macro  pabc 2          ; a "simple" print macro
        section .data
        .str db %1,0    ; %1 is first actual in macro call
        section .text
        mov rdi, fmt4   ; first arg, format
        mov rsi, .str   ; second arg
        mov rdx, [%2]   ; third arg
        mov rax, 0      ; no xmm used
        call printf     ; Call C function
%endmacro

section .data
    fmt4 db "%s = %d",10,0

section .bss
    val_ecx resd 1

section .text
global main
main:
        mov rcx, 100     ; счетчик, будет идти с конца
again:
        mov [val_ecx], ecx
        pabc "ecx", val_ecx
        loop again
почему-то получается на выводе «ecx = 6» в бесконечном цикле. И я не могу понять почему. Вроде проще-то не куда...



Последнее исправление: SmilePlz (всего исправлений: 3)

А чего это ты после цикла не делаешь выхода из программы? Я уже не помню точно, вроде должно быть как-то так:

mov rax,1
int 0x80
luke ★★★★★
()

скорей всего printf модифицирует ecx, нужно уточнить в спецификации x86_64 ABI этот момент

Harald ★★★★★
()
Ответ на: комментарий от arturpub

спасибо большое всем, пойду копать в указанном направлении с помощью отладчика =)

SmilePlz
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.