Разработайте программу, вычисляющую заданное выражение и вывести результат на экран - Assembler/FASM
Формулировка задачи:
Заранее спасибо.
Решение задачи: «Разработайте программу, вычисляющую заданное выражение и вывести результат на экран»
textual
Листинг программы
format MZ ;Исполняемый файл DOS EXE (MZ EXE) entry code_seg:start ;Точка входа в программу ;-------------------------------------------------------------------- stack 200h ;Размер стека ;-------------------------------------------------------------------- segment data_seg ;Cегмент данных CrLf db 0Dh, 0Ah, '$' ;перевод строки msgPressAnyKey db 0Dh, 0Ah, 'Press any key to exit...', '$' a db 12 c db -23 k db 17 ;-------------------------------------------------------------------- segment code_seg ;Сегмент кода start: ;Точка входа в программу mov ax, data_seg ;Инициализация регистра DS mov ds, ax mov al, [a] sub al, [c] imul al mov bx, ax mov al, 2 imul byte [a] imul byte [c] idiv byte [k] cbw add ax, bx mov cx, 10 xor di, di ; di - кол. цифр в числе ; если число в ax отрицательное, то ;1) напечатать '-' ;2) сделать ax положительным or ax, ax jns @@Conv push ax mov dx, '-' mov ah, 2 ; ah - функция вывода символа на экран int 21h pop ax neg ax @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ; выводим из стека на экран @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show mov ah, 09h mov dx, msgPressAnyKey int 21h mov ah, 0 int 16h mov ax, 4C00h int 21h ;Завершение программы
Объяснение кода листинга программы
- format MZ — начало кода. Здесь указывается исполнительный файл DOS EXE (MZ EXE).
- entry code_seg:start — точка входа в программу.
- stack 200h — размер стека.
- segment data_seg — сегмент данных. Здесь содержатся переменные и константы: CrLf, msgPressAnyKey, a, c, k.
- segment code_seg — сегмент кода. Здесь находится точка входа в программу start и основной код программы.
- В блоке кода после start происходит инициализация регистра DS значением сегмента данных.
- Далее происходит вычисление выражения, используя операции сложения, вычитания, умножения и деления. Результат сохраняется в регистре AX.
- Затем происходит проверка на отрицательность числа в AX. Если число отрицательное, то выводится знак минус и число становится положительным.
- После этого происходит перевод числа в символьный формат и вывод на экран с помощью функции вывода символа.
- В блоке кода после @@Conv происходит повторение предыдущего шага до тех пор, пока число в AX не станет однозначным.
- После этого происходит вывод числа на экран с помощью функции вывода символа.
- В блоке кода после @@Show происходит вывод сообщения
Press any key to exit...
. - Затем происходит завершение программы с помощью функции окончания работы программы.
- Значение 4C00h в mov ax, 4C00h; int 21h обозначает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д