Не могу понять как исправить (код на FASM-е), простенькая программа - Assembler
Формулировка задачи:
Написал программу для примера сдвигов, сдвигает нормально, вот только выводит каскадом (с начала выводит все переменные sent а потом только значение после сдвига), не знаю как исправить это - как после вывода нужного sent, прекратить вывод остальных + ещё для разных введённых [A] структура вывода меняется
format PE console 4.0 include 'win32a.inc' start: cinvoke printf, sent0, 'A' cinvoke scanf, sent4, A mov eax, [A] shl eax, 2d cinvoke printf, sent1, eax cinvoke printf, endl mov eax, [A] rol eax, 2d cinvoke printf, sent2, eax cinvoke printf, endl mov eax, [A] rcl eax, 2d cinvoke printf, sent3, eax cinvoke printf, endl invoke sleep, 50000 sentences: invoke exit, 0 sent0 db 'Enter %c: ', 0 sent1 db 'shl [A] by 2 = ' sent2 db 'rol [A] by 2 = ' sent3 db 'rcl [A] by 2 = ' sent4 db '%d', 0 endl db '', 10 A dd ? data import library msvcrt,'MSVCRT.DLL',\ kernel32,'KERNEL32.DLL' import kernel32,\ sleep,'Sleep' import msvcrt,\ puts,'puts',\ scanf,'scanf',\ printf,'printf',\ exit,'exit' end data
Решение задачи: «Не могу понять как исправить (код на FASM-е), простенькая программа»
textual
Листинг программы
format PE console 4.0 include 'win32a.inc' start: cinvoke printf, sent0 cinvoke scanf, sent4, A mov eax, [A] mov ebx, eax mov ecx, eax shl eax, 2 rol ebx, 2 rcl ecx, 2 cinvoke printf, sent1, eax, ebx, ecx ; cinvoke printf, endl ; ; mov eax, [A] ; rol ebx, 2d ; cinvoke printf, sent2, eax ; cinvoke printf, endl ; mov eax, [A] ; rcl eax, 2d ; cinvoke printf, sent3, eax ; cinvoke printf, endl ; invoke sleep, 50000 invoke _getch ; jmp start ; eсли не ctr/c sentences: invoke exit, 0 ; sent0 db 'Enter A:', 0 sent1 db 'shl [A] by 2 = %d', 0Dh, 0Ah sent2 db 'rol [A] by 2 = %d', 0Dh, 0Ah sent3 db 'rcl [A] by 2 = %d', 0Dh, 0Ah,0 sent4 db '%d', 0 ; endl db '', 10 A dd ? data import library msvcrt,'MSVCRT.DLL';,\ ; kernel32,'KERNEL32.DLL' ; import kernel32,\ ; sleep,'Sleep' import msvcrt,\ _getch,'_getch',\ scanf,'scanf',\ printf,'printf',\ exit,'exit' end data
Объяснение кода листинга программы
Список элементов кода на языке Assembler (FASM):
- Объявление формата PE console 4.0
- Включение файла 'win32a.inc'
- Начало работы программы
- Использование функции scanf для ввода значения переменной A
- Передача значения переменной A в качестве аргумента для функции printf
- Выполнение операции сдвига влево на 2 позиции для переменной A
- Выполнение операции сдвига вправо на 2 позиции для переменной B
- Выполнение операции сдвига вправо на 2 позиции с заполнением для переменной C
- Использование функции printf для вывода значений переменных A, B и C
- Выполнение операции сдвига влево на 2 позиции для переменной A
- Использование функции printf для вывода значения переменной A после операции сдвига влево
- Использование функции printf для вывода значения переменной A после операции сдвига вправо на 2 позиции
- Использование функции printf для вывода значения переменной A после операции сдвига вправо на 2 позиции с заполнением
- Использование функции sleep для задержки выполнения программы на 50 секунд
- Использование функции _getch для приостановки выполнения программы до нажатия клавиши
- Проверка наличия нажатия клавиши Ctrl+C и переход к началу программы при его отсутствии
- Объявление переменных A, B, C и D
- Определение строки, которую необходимо вывести при вводе значения переменной A
- Определение строки, которую необходимо вывести после операции сдвига влево на 2 позиции для переменной A
- Определение строки, которую необходимо вывести после операции сдвига вправо на 2 позиции для переменной A
- Определение строки, которую необходимо вывести после операции сдвига вправо на 2 позиции с заполнением для переменной A
- Определение строки, которую необходимо вывести после ввода значения переменной A
- Определение строки, которую необходимо вывести для завершения работы программы
- Импорт необходимых функций из библиотек msvcrt и kernel32
- Определение библиотеки msvcrt
- Определение библиотеки kernel32
- Завершение работы программы с помощью функции exit
- Конец списка элементов кода
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д