[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, происходит вычисление формулы Сложение и вычитание. Вот список действий, которые происходят в коде:

  1. Переменная n содержит значение 2.
  2. Переменная m содержит значение 3.
  3. Переменная r содержит значение 5.
  4. Переменная k не инициализирована (равна ?).
  5. Код генерирует 16-битный код (use16).
  6. Программа начинается с адреса 100h (org 100h).
  7. Значение переменной n копируется в регистр al.
  8. Значение переменной m вычитается из регистра al.
  9. К результату вычитания прибавляется 1.
  10. Значение переменной r копируется в регистр ah.
  11. К значению регистра ah прибавляется 1.
  12. Значение переменной n вычитается из значения регистра ah.
  13. Значение регистра al увеличивается на значение регистра ah.
  14. Результат вычисления сохраняется в переменной k (mov [k],al).
  15. Значение регистров dx и cx устанавливается равным 4C00h (mov ax,4C00h).
  16. Выполняется команда int 21h (int 21h), что приводит к завершению программы. Таким образом, результатом выполнения программы будет значение переменной k, которое будет равно 10.

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы