Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; --- Дальний вызов. Передача параметров через глобальные переменные ------------------------------------------------------------------
- ; Exe-файл
- format MZ
- ; Точка старта
- entry Main:Start
- ; --- Сегмент данных ------------------------------------------------------------------------------------------------------------------
- segment DataSeg
- E dw 256
- F dw 16
- Res dw ?
- ; --- Сегмент с основным кодом программы ----------------------------------------------------------------------------------------------
- segment Main
- Start:
- ; Подпрограмма подсчёта значений
- call far Library:Calculating
- ; Вывод значений
- call far Library:Output
- ; Ввод символа
- mov AX, $0C08
- int 21h
- test AL, AL
- jnz @F
- mov AH, $08
- int 21h
- @@:
- retf
- ; --- Сегмент, содержащий процедуры ---------------------------------------------------------------------------------------------------
- segment Library
- ; Вычисление формулы [E and F^2]
- Calculating:
- ; Адрес сегмента данных
- push DataSeg
- pop DS
- ; Получаем парамеры для процедуры в регистры
- mov AX, [F]
- mov BX, [E]
- ; Возвести AX в квадрат
- mul AX
- ; Два старших байта 100% пустые
- xor DX, DX
- ; Побитовое умножение F^2 и E
- and AX, BX
- mov [Res], AX
- retf
- ; Вывод чисел
- Output:
- ; Адрес сегмента данных
- push DataSeg
- pop DS
- ; Получаем парамеры для процедуры в регистры
- mov AX, [Res]
- ; Делитель тут хранится
- mov BL, 10
- ; Параметры цикла: BP - кол-во цифр, CX - счётчик цикла
- mov CX, 0
- PushDigit:
- ; Частное в AL, остаток в AH
- div BL
- ; Поместили в стек (AH - нужное)
- push AX
- ; Количество цифр++
- inc CX
- ; Преобразовать частное в новое число
- xor AH, AH
- ; Если в АХ ноль, покинуть. Иначе продолжить
- cmp AX, 0
- jz PopDidit
- jmp PushDigit
- PopDidit:
- ; Выгрузить из стека в DL цифру
- pop AX
- mov DL, AH
- ; Вывести цифру из DL
- add DL, 48
- mov AH, $02
- int 21h
- loop PopDidit
- ; Вернуться к месту вызова процедуры
- retf
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement