Вывод числа на экран в том виде, в котором оно хранится в памяти - Assembler
Формулировка задачи:
Вывод числа на экран при помощи флага СF в том виде, в котором оно хранится в памяти. В моём алгоритме: сдвигаем на 1 бит влево, смотрим на состояние флага, выводим на экран 1 или 0.
Выводит 32 нуля. В чем ошибка? Простейший код, а мучаюсь уже давно.
#include <stdlib.h>
#include <stdio.h>
int i=0, z;
int main() {
asm(
"movl $15, %eax\n");
for(i=0; i<32; i++)
{
asm(
"shl $1,%eax \n"
"jc one \n"
"jnc zero \n"
"zero:\n"
"movl $0, z\n"
"jmp end\n"
"one:\n"
"movl $1, z\n"
"jmp end\n"
"end:\n"
);
printf("%i",z );
}
printf("\n");
return 0;
}Решение задачи: «Вывод числа на экран в том виде, в котором оно хранится в памяти»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
int i=0, z;
int main() {
asm(
"movl $15, %ebx\n");
for(i=0; i<32; i++)
{
asm(
"shl $1,%ebx \n"
"setc z \n"
);
printf("%i",z );
}
printf("\n");
return 0;
}
Объяснение кода листинга программы
- Программа начинается с подключения двух заголовочных файлов: stdlib.h и printf.h
- Затем определяются две переменные: i=0, z;
- Далее идет цикл for, который выполняется 32 раза
- Внутри цикла происходит два действия:
- первое действие: сдвиг числа на 1 влево (shl $1,%ebx)
- второе действие: проверка результата сдвига (setc z)
- Результат выводится на экран с помощью функции printf
- После завершения цикла выводится символ новой строки с помощью функции printf
- В конце программы возвращается 0, что означает успешное выполнение программы