Я пытаюсь написать функцию, которая преобразует десятичные числа в двоичные в ассемблере. Поскольку там очень сложно печатать, я решил создать в С отдельную функцию, которая просто печатает цифры. Но когда я запускаю код, он всегда печатает «0110101110110100»
Вот функция C (и печать, и преобразование):
void printBin(int x) {
printf("%d", x);
}
void DecToBin(int n)
{
// Size of an integer is assumed to be 16 bits
for (int i = 15; i >= 0; i--) {
int k = n >> i;
printBin(k & 1);
}
вот код в asm:
.globl _DecToBin
.extern _printBin
_DecToBin:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp),%eax
movl $15, %ebx
cmpl $0, %ebx
jl end
start:
movl %ebx, %ecx
movl %eax, %edx
shrl %cl, %eax
andl $1, %eax
pushl %eax
call _printBin
movl %edx, %eax
dec %ebx
cmpl $0, %ebx
jge start
end:
movl %ebp, %esp
popl %ebp
ret
Не могу понять, где ошибка. Любая помощь будет оценена
дизассемблированный код с помощью онлайн-программы