Разработайте программу, вычисляющую заданное выражение и вывести результат на экран - 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                     ;Завершение программы

Объяснение кода листинга программы

  1. format MZ — начало кода. Здесь указывается исполнительный файл DOS EXE (MZ EXE).
  2. entry code_seg:start — точка входа в программу.
  3. stack 200h — размер стека.
  4. segment data_seg — сегмент данных. Здесь содержатся переменные и константы: CrLf, msgPressAnyKey, a, c, k.
  5. segment code_seg — сегмент кода. Здесь находится точка входа в программу start и основной код программы.
  6. В блоке кода после start происходит инициализация регистра DS значением сегмента данных.
  7. Далее происходит вычисление выражения, используя операции сложения, вычитания, умножения и деления. Результат сохраняется в регистре AX.
  8. Затем происходит проверка на отрицательность числа в AX. Если число отрицательное, то выводится знак минус и число становится положительным.
  9. После этого происходит перевод числа в символьный формат и вывод на экран с помощью функции вывода символа.
  10. В блоке кода после @@Conv происходит повторение предыдущего шага до тех пор, пока число в AX не станет однозначным.
  11. После этого происходит вывод числа на экран с помощью функции вывода символа.
  12. В блоке кода после @@Show происходит вывод сообщения Press any key to exit....
  13. Затем происходит завершение программы с помощью функции окончания работы программы.
  14. Значение 4C00h в mov ax, 4C00h; int 21h обозначает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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