9. Використана література

 

1. Ровдо А. А. Микропроцессоры от 8086 до Pentium III Xeon и AMD-K6-3. М., ДМК, 2000


Додаток. Лістинг програми

.model small

.stack 100

.486

.data

f dd 0

.code

start:

jmp begin

;------------------------------------------------------------

;обчислення функцiї ABS(x) - DS:SI - REAL

REAL_ABS proc

push bx

mov bh,byte ptr ds:[si+3]

and bh,7fh

mov byte ptr ds:[si+3],bh

pop bx

ret

REAL_ABS endp

;------------------------------------------------------------

;конвертор REAL в DS:SI в WORD (AX)

REAL_TO_WORD proc

jmp start_proc

x dw 0 ;тимчасовий параметр AX

start_proc:

pusha

;1)видiлити окремо знак, порядок i мантису

; bh - знак, bl - порядок, ax - мантиса

mov bh,byte ptr ds:[si+3]

and bh,80h ;видiлили знак

mov bl,byte ptr ds:[si+3]

shl bl,1

mov ah,byte ptr ds:[si+2]

shr ah,7

or bl,ah ;видiлили порядок

mov ah,byte ptr ds:[si+2]

mov al,byte ptr ds:[si+1]

shl ax,1 ;видiлили мантису

cmp bl,127 ;перевiрка на нуль

jb res_zero

sub bl,127

mov cl,15

sub cl,bl ;cl-кiлькiсть зсувiв вправо мантиси

stc ;старший розряд завжди 1

rcr ax,1

shr ax,cl

mov word ptr cs:[x],ax ;... i отримаємо результат!

cmp bh,0 ;враховуємо знак

je res_ok

neg ax

mov word ptr cs:[x],ax

jmp res_ok

res_zero:

mov word ptr cs:[x],0

res_ok:

popa

mov ax,word ptr cs:[x]

ret

REAL_TO_WORD endp

;---------------------------------------------------------------

;конвертор 16-бiтного слова в AX в коротке дiйсне es:di (4 байта)

WORD_TO_REAL proc

pusha

;нуль?

cmp ax,0

jne no_zero

mov dword ptr es:[di],0

popa

ret

no_zero:

push di

;1) якщо d15=1 - bh=80h (знак), iнакше bh=0

xor bh,bh

test ax,8000h

jz plus

neg ax

mov bh,80h

plus:

;2)зсунути AX влiво так, щоб старша одиниця була в CF.

; пiдрахувати кiлькiсть зсувiв

xor di,di

mov cx,16

shift: inc di

shl ax,1

jc stop_shift

loop shift

stop_shift:

;3)обчислити порядок: bl=127+16-di

mov cx,di

mov bl,127+16

sub bl,cl

pop di

;отже,маємо:bh-знак,bl-порядок,ax-мантиса

;ставимо найстарший байт (3) в 0

mov byte ptr es:[di],0

;ставимо молодший байт: знак+7 старших бiтiв порядку

mov dl,bh

push bx

shr bl,1

or dl,bl

pop bx

mov byte ptr es:[di+3],dl

;ставимо 1-й байт: останнiй байт порядку i 7 ст байт мантиси

and bl,1

shl bl,7

shr ax,1

or bl,ah

mov byte ptr es:[di+2],bl

;ставимо 2-й байт: молодшi 8 байт мантиси

mov byte ptr es:[di+1],al

popa

ret

WORD_TO_REAL endp

;------------------------------------------------------------

;обчислення функцiї [X] - DS:SI - REAL

REAL_TRUNC proc

push ax

call REAL_TO_WORD

call WORD_TO_REAL

pop ax

ret

REAL_TRUNC endp

;------------------------------------------------------------

;обчислення функцiї {X} - DS:SI - REAL

REAL_REAL proc

push eax

push edx

push bx

push cx

;в EDX записати у зворотньому порядку число

mov dh,byte ptr ds:[si+3]

xor bh,bh

mov bl,dh

shl bl,1

adc bh,0

shl bh,7

mov dl,byte ptr ds:[si+2]

mov ah,dl

and ah,80h

shr ah,7

or bl,ah ;в BH - знак, в BL - порядок, в EDX - число

shl edx,16

mov dh,byte ptr ds:[si+1]

mov dl,byte ptr ds:[si]

cmp bl,127

jb stop_tr ;це вже число <0!

shl edx,9 ;прибрати все зайве (знак i порядок)

sub bl,127 ;кiлькiсть зсувiв (бiтiв з цiлою частиною)

mov cl,bl

shl edx,cl ;вiдкинути цiлу частину

;зараз в EDX - дробова частина

;тепер обчислюємо порядок

mov bl,127

shift_l:

dec bl

shl edx,1

jnc shift_l ;отже, тепер порядок в bl, а в edx готова мантиса

;тепер зсунути EDX вправо на 9

shr edx,9

xor eax,eax

mov al,bh

shl eax,1

or al,bl

shl eax,23

or edx,eax ;i комбiнуємо!

;тепер записати в пам`ять

mov byte ptr ds:[si],dl

mov byte ptr ds:[si+1],dh

shr edx,16

mov byte ptr ds:[si+2],dl

mov byte ptr ds:[si+3],dh

stop_tr: ;вихiд

pop cx

pop bx

pop edx

pop eax

ret

REAL_REAL endp

;------------------------------------------------------------

begin:

mov ax,@data

mov es,ax

mov ds,ax

mov di,offset f

mov si,offset f

;mov ax,-32768

;call WORD_TO_REAL

;fst dword ptr es:[di]

;call REAL_TRUNC

fst dword ptr es:[di]

;call REAL_TO_WORD

call REAL_REAL

fld dword ptr es:[di]

mov ah,4ch

int 21h

end start


Информация о работе «Реалізація функцій ABS(X), [X], {x}»
Раздел: Информатика, программирование
Количество знаков с пробелами: 8781
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
25682
0
0

... нарешті, останній крок розробки модуля означає завершення перевірки модуля (за допомогою компілятора) і перехід до процесу налагодження модуля.   3. Атестація програмних засобів Завершальним етапом розробки ПЗ є атестація, що підводить підсумок усій розробці. Атестація - це авторитетне підтвердження якості ПЗ. Звичайно для атестації ПЗ створюється атестаційна комісія з експертів, представник ...

Скачать
12671
0
2

... При цьому враховане, що при завершенні формування вектора показання лічильника перевищують на одиницю реальну розмірність. Це враховано при виводі вектора на відображення (блок№33) і при обчисленні функції (блок№37). БАЗОВА ПРОГРАМА РЕАЛІЗАЦІЇ АЛГОРИТМУ Program Generalna; {Программа формирования квадратной матрицы по выражению для A[i,j], вектора Х по транспонированной матрице и вычисления ...

Скачать
28340
2
5

... ібності для нормального розподілу  . Тоді . Звідси, Тут,. Тому статистика критерію матиме вигляд: . У наступному розділі ми більш детально розглянемо застосування критерію відношення правдоподібності для великих вибірок до перевірки статистичних гіпотез. 3. Приклади застосування критерію відношення правдоподібності для великих вибірок Розглянемо декілька прикладів на ...

Скачать
341385
4
10

... риски; - способи управління ризиком; - оцінка вартості і економії при прийнятті певних способів управління ризиком; - рекомендації по ухваленню рішень. Отже класифікаційні суспільства грають важливу роль в забезпеченні безпеки судноплавства проводячи найважливішу роботу по систематизації і аналізу аварійності з метою впровадження на практиці сучасних рішень, отриманих на основі цих досліджень. ...

0 комментариев


Наверх