GNU As, Dlaczego nie wyświetla przejść pętli?


(fedora24x) #1

Witam mam problem z poniższym programem, nie mogę znaleźć w ni powodu dlaczego nie wyświetla tekstu w każdym obrocie pętli?

.text

.global _start
_start:

	movl $0,%ecx
movl $9,%ebx

cmpl:
		cmpl %ecx,%ebx
		jle print
		jmp exit

print:

	pushq %rbx
	pushq %rcx

	movl $len,%edx
		movl $msg,%ecx
		movl $1,%ebx 
		movl $4,%eax 
		int  $0x80

		popq %rcx
		popq %rbx
		jmp cmpl

	exit:
		movl $0,%ebx
		movl $1,%eax
		int  $0x80

.data

msg:
	.ascii "Obrot petli!\n"
	len = . - msg

(tomms) #2

Nie wchodzisz do pętli, jle to jest ‘Jump if less or equal’ (jeśli drugi argument mniejszy lub równy) a wartość ebx masz 9 czyli jest większa. Jeśli chcesz 9 razy wyświetlić napis to można to zrobić tak:

.global _start
_start:

        mov $9,%rcx

cmpl:
        test %rcx, %rcx
        jz exit

print:

        push %rcx

        mov $len,%rdx
        mov $msg,%rcx
        mov $1,%rbx
        mov $4,%rax
        int  $0x80

        pop %rcx
        dec %rcx

        jmp cmpl

exit:
        mov $0,%rbx
        mov $1,%rax
        int  $0x80

        .data

msg:
        .ascii "Obrot petli!\n"
        len = . - msg