Jeśli to ten algorytm, to na 64-bitowym Linuksie w składni AT&T byłby taki kod:
.text
.globl main
main:
mov $84, %rdi
mov $18, %rsi
call nwd
mov $format_string, %rdi
mov %rax, %rsi
mov $0, %al
call printf
xor %rax, %rax
ret
nwd:
mov %rdi, %rax
0: xor %rdx, %rdx
idivq %rsi
mov %rsi, %rax
mov %rdx, %rsi
cmp $0, %rsi
jne 0b
ret
.data
format_string:
.asciz "%d\n"
Wydaje się, że użyłeś rejestru esp zamiast eax.
A tak poza tym to nie wiem po co są te komentarze, skoro przepisują to, co robi sama instrukcja.