Вывод числа на экран в том виде, в котором оно хранится в памяти - 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, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д