[FASM] Напишите программу для вычисления формулы "Сложение и вычитание" - Assembler
Формулировка задачи:
Напишите программу для вычисления формулы. Все числа 16-битные целые со знаком.
k=n-m-1+(r+1-n)
пример:
Требуется вычислить значение формулы: e=a-(b+c-1)+(-d). Все числа являются 8-битными целыми со знаком. Объявим их после кода и придумаем какие-нибудь значения.
use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h mov al,[a] ;Загружаем значение a в AL mov ah,[b] ;Загружаем значение b в AH add ah,[c] ;AH = AH + c = b+c dec ah ;AH = AH - 1 = b+c-1 sub al,ah ;AL = AL - AH = a-(b+c-1) mov cl,[d] ;CL = d neg cl ;CL = -CL = -d add al,cl ;AL = AL + CL = a-(b+c-1)+(-d) mov [e],al ;Сохраняем результат в e mov ax,4C00h ;\ int 21h ;/ Завершение программы ;------------------------------------------------------- a db 2 b db 3 c db 5 d db -8 e db ?
Решение задачи: «[FASM] Напишите программу для вычисления формулы "Сложение и вычитание"»
textual
Листинг программы
use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h mov al,[n] sub al,[m] sub al,1 mov ah,[r] add ah,1 sub ah,[n] add al,ah mov [k],al mov ax,4C00h ;\ int 21h ;/ Завершение программы ;------------------------------------------------------- n db 2 m db 3 r db 5 k db ?
Объяснение кода листинга программы
В коде, написанном на языке Assembler, происходит вычисление формулы Сложение и вычитание
. Вот список действий, которые происходят в коде:
- Переменная
n
содержит значение 2. - Переменная
m
содержит значение 3. - Переменная
r
содержит значение 5. - Переменная
k
не инициализирована (равна ?). - Код генерирует 16-битный код (use16).
- Программа начинается с адреса 100h (org 100h).
- Значение переменной
n
копируется в регистр al. - Значение переменной
m
вычитается из регистра al. - К результату вычитания прибавляется 1.
- Значение переменной
r
копируется в регистр ah. - К значению регистра ah прибавляется 1.
- Значение переменной
n
вычитается из значения регистра ah. - Значение регистра al увеличивается на значение регистра ah.
- Результат вычисления сохраняется в переменной
k
(mov [k],al). - Значение регистров dx и cx устанавливается равным 4C00h (mov ax,4C00h).
- Выполняется команда int 21h (int 21h), что приводит к завершению программы.
Таким образом, результатом выполнения программы будет значение переменной
k
, которое будет равно 10.