- •Микропроцессоры в системах защиты информации
- •Общие методические указания
- •Лабораторная работа 1
- •Выполненние работы Программа 1.1
- •Программа 1.2
- •Программа 1.3
- •Программа 1.4
- •Лабораторная работа 2
- •Выполненние работы Программа 2.4
- •Программа 2.5
- •Лабораторная работа 3
- •Выполненние работы Программа 3.1
- •Лабораторная работа 4
- •Выполненние работы Программа 4.1
- •Лабораторная работа 5
- •Выполненние работы Программа 5.1
- •Программа 5.3
- •Программа 5.4
- •Лабораторная работа 6
- •Выполненние работы Программа 6.1
Программа 5.4
TITLE Деление чисел в формате с плавающей запятой
;
SSEG SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
SSEG ENDS
;
DSEG SEGMENT PARA PUBLIC 'DATA'
X DD 64.0 ;1 DUP(0)
Y DD 126.25 ;1 DUP(0)
Z DD 1 DUP(0)
DSEG ENDS
;
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
;
DIVFLT PROC FAR
mov ax,DSEG
mov ds,ax
; Первый операнд Х находится в регистрах BX:SI,
; второй Y в регистрах DX:DI, произведение
; возвращается в регистрах BX:SI.
; При возникновении особого случая CF=1
;
Start: lea si,X
lea di,Y
mov bx,[si+2]
mov si,[si]
mov dx,[di+2]
mov di,[di]
DIVF: ; Проверить операнды на нуль
mov ax,bx ; Проверить на 0
or ax,si ; делимое
jz DIVF7 ; Не нулевой результат в BX:SI
mov ax,dx ; Проверить на 0
or ax,di ; делитель
stc ; Если деление на 0
jz DIVF7 ; CF = 1
; Оба операнда не нулевые
mov ch,bh ; Образовать знак частного
xor ch,dh ; в регистре CH
shl bx,1 ; Восстановить скрытый бит
stc ; мантиссы делимого
rcr bl,1
shl dx,1 ; Восстановить скрытый бит
stc ; мантиссы делителя
rcr dl,1
; Вычесть порядки
mov al,bh ; Образовать разность порядков
sub al,dh ; в регистре AL
jnc DIVF1 ; Порядок делимого больше
add al,127 ; Прибавить смещение
cmc ; Если нет переноса,
jc DIVF7 ; возникло антипереполнение
jmp DIVF2 ; Перейти к делению мантисс
DIVF1: add al,127 ; Прибавить смещение
jc DIVF7 ; Возникло переполнение
; Деление мантисс.
DIVF2: mov bh,0 ; Очистить старшие байты
mov dh,0 ; перед мантиссами
mov cl,24 ; Образовать счетчик бит
DIVF3: sub si,di ; вычесть мантиссу делителя
sbb bx,dx ; из мантиссы делимого
cmc ; Образовать в CF бит частного
pushf ; Сохранить его в стеке
jc DIVF4 ; Остаток положительный
add si,di ; Восстановить предыдущий
adc bx,dx ; положительный остаток
DIVF4: popf ; Вернуть бит частного в CF
rcl bp,1 ; Передать бит частного
rcl ah,1 ; в регистры AH:BP
shl si,1 ; Сдвинуть остаток
rcl bx,1
dec cl ; Декремент счетчика
jnz DIVF3 ; Повторять до завершения
; Проверить нарушение нормализации вправо
test ah,80H ; Проверить старший бит мантиссы
jnz DIVF5 ; Нарушения нормализации нет
dec al ; Декремент порядка
stc ; Проверить возможность
jz DIVF7 ; антипереполнения
sub si,di ; Определить еще один бит
sbb bx,dx ; мантиссы частного
cmc ; поместить бит частного
rcl bp,1 ; в нужное место
rcl ah,1
DIVF5: mov bl,ah ; Разместить частное
mov si,bp ; в регистрах BX:SI
mov bh,al
; Форматировать результат
add ch,ch ; Знак во флаге переноса
rcr bh,1 ; Знак числа на месте
rcr ch,1 ; Младший бит порядка в CH7
or ch,7fh ; Образовать маску
and bl,ch ; Образовать второй байт произведения
lea di,Z
mov [di],si
mov [di+2],bx
DIVF7: jmp Start ; RET
DIVFLT ENDP
CSEG ENDS
END DIVFLT
|
Делимое |
Делитель |
Частное |
|||
десятичное |
шестнадцат. |
десятичное |
шестнадцат. |
десятичное |
шестнадцат. |
|
1 |
|
|
|
|
|
|
2 |
|
|
|
|
|
|
Выводы:___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Алгоритм программы сложения
Алгоритм программы умножения
Алгоритм программы деления
Выполнил студент _____________________ дата _____________________________
Принял ___________________ "____________________" оценка ________ дата __________________
(подпись) (Ф И О)