ustify">; ***************************************** **************** Макрокоманда зсуву SHIFT @ @MACRO var1, var2di, var1si, var2cx, 2movsw
; ----------------------------------- SEGMENT PARA STACK «STACK» ; 256 dup (0) ENDS
; ----------------------------------- SEGMENT PARA PUBLIC «DATA» ; dw 1 dup (0); Вхідний сигнал
Xnf dd 1 dup (0); Вхідний сигнал формат ПЗdd 1 dup (0); Вихідний сігналdd 1 dup (?); Dd 1 dup (?); Dd 1 dup (?); Dd 1 dup (?); Dd 1 dup (?); Dd 1 dup (0) dd 1 dup (0) dd 1 dup (0) dd 1 dup (0) dd 1 dup (0) db 1 dup (0) db 1 dup (0)
DSEG ENDS
; ----------------------------------- SEGMENT PARA PUBLIC «CODE» ; CS: CSEG, DS: DSEG, ES: DSEG, SS: SSEG
; -----------------------------------
; ----- Основна програма ---------- PROC FAR; Головна подпрограммаax, DSEGds, axes, ax: push cx @ y3, y2; y3=y2 @ y2, y1; y2=y1
mov ax, 0 al, port51 xn, ax bl, 0 si, xn ITOF; перетворення цілого xn у формат ПЗ, результат в BX: SI
mov Xnf, si Xnf +2, bx
lea di, y1; ? si, Хnf; ? si, index; ? cx, 2; ? y1=x (nT) movsw; ? @ Y5, y3; y5=y3si, y5di, b2MULT; y5=y5 * b2si, y1di, y5FSUMMA; y1=y1 + y5 @ y5, y2si, y5di, b1MULT; y5=y5 * b1si, y1di, y5FSUMMA; y1=y1 + y5
; ----------------------------------- @ y5, y1si, y5di , a0MULT; y5=y5 * a0 @ y4, y5; y4=y5 @ y5, y2si, y5di, a1MULT; y5=y5 * a1si, y4di, y5FSUMMA; y4=y4 + y5 @ y5, y3si, y5di, a2MULT; y5=y5 * a2si, y4di, y5FSUMMA; y4=y4 + y5di, ynt; ? si, y4; ?
; add di, index; ? cx, 2; | Y (nT)=y4movsw; ?
; start
; ========================================= ======
MULT PROC FAR
; Перший операнд X знаходиться в регістрах BX: SI,
; другий Y в регістрах DX: DI, твір
; повертається в регістрах BX: SI.
; При виникненні особливого випадку CF=1
;
; lea si, X; в нашому випадку не використовуються
; lea di, Y; в нашому випадку не використовуються
; bx, [si +2] si, [si] dx, [di +2] di, [di]:; Перевірити операнди на нульax, bx; Перевірити на 0ax, si; перший операнд @ @ M1; Твір одно 0ax, dx; Перевірити на 0ax, di; другий операндMULF1; Операнди не рівні 0bx, dx; Твір одно 0si, di
@ @ M1: jmp MULF8
;
; Операнди не нульовий, можна множити.
; Утворити знак твори, відновити мантиси.: Mov ch, bh; Знак проізведеніяch, dh; в регістрі CHbx, 1; Відновити прихований біт; мантиси першого операндаbl, 1dx, 1; Відновити прихований біт; мантиси другого операндаdl, 1
; Скласти порядкі.al, bh; Скласти в ALal, dh; зміщені порядкіMULF2; Виник переносal, 127; Відняти смещеніеMULF3; Можна умножатьMULF8; Виникло антипереполнение: add al, 129; Врахувати втрату 256 через переносаMULF3; Можна умножатьMULF8; Виникло переповнення
; Можна множити мантиси.: Mov bh, al; Порядок твори в BHdh, dh; Підготувати местоax, ax; для проізведеніяcl, dl; Звільнит...