Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тетрадь_ЗИ.doc
Скачиваний:
1
Добавлен:
10.11.2019
Размер:
711.17 Кб
Скачать

Программа 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

Выводы:___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Алгоритм программы сложения

Алгоритм программы умножения

Алгоритм программы деления

Выполнил студент _____________________ дата _____________________________

Принял ___________________ "____________________" оценка ________ дата __________________

(подпись) (Ф И О)