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