Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





После инициализации сопроцессора командой finit в вершину стека помещается переменная х. Команда fcomp сравнивает число в вершине стека с переменной в памяти и в зависимости от результата устанавливает биты в слове состояния сопроцессора.

Листинг 2.23. Фрагмент программы сравнения двух целых чисел
.data
conTitle DB "Comparison of two ints", 0
mes DB "The result of comparison IX = -65 and IY = -13 : ", 0
len_mes EQU $-mes
xgy DB "X > Y", 0
len_xgy EQU $-xgy
xly DB "X < Y", 0
len_xly EQU $-xly
xey DB "X = Y", 0
len_xey EQU $-xey
IX DD -65
IY DD 13
STATUS LABEL WORD
STATUS_WORD DW 7
readBuf DB •?
lenReadBuf DD 1
hStdln DD 0
hStdOut DD 0
chrsRead DD 0
chrsWritten DD 0
STD_INP_HNDL DD - 1 0
STD OUTP HNDL DD - 1 1
. code
start:
call AiiocConsoie
test EAX, EAX
j z ex
push offset conTitle
call SetConsoleTitleA
test EAX, EAX
j z ex
call getout_hndl
call getinp_hndl
push EBX
mov EBX, offset mes
mov ECX, len_mes
call write_con
pop EBX
f init
fild DWORD PTR IX
ficomp DWORD PTR IY
fstsw STATUS_WORD
mov AH, BYTE PTR STATUS+1
sahf
jb x_less\_y
jne x_great_y
jmp WriteXEY
x_less_y:
jmp WriteXLY
x_great_y:
jmp WriteXGY
; вьшод сообщения "X = Y"
WriteXEY:
push EBX
mov EBX, offset xey
mov ECX, len_xey
call write_con
pop EBX
jmp rcon
; вьшод сообщения "X < Y"
WriteXLY:
push EBX
mov EBX, offset xly
mov ECX, len_xly
call write_con
pop EBX
jmp rcon
; вывод сообщения "X > Y"
WriteXGY:
push EBX
mov EBX, offset xgy
mov ECX, len_xgy
call write_con
pop EBX
; ожидание ввода с консоли и выход
rcon:
call read con
ex:
push О
call ExitProcess

В этом фрагменте особенно интересны следующие строки:
f init
fild DWORD PTR IX
ficomp DWORD PTR IY
fstsw STATUS_WORD
mov AH, BYTE PTR STATUS+1
sahf
jb x__less_y
jne x_great_y
jmp WriteXEY

После инициализации сопроцессора с помощью команды fild в его стек загружается первое число ix. После сравнения чисел ix и IY результат сравнения записывается в переменную STATUSWORD командой fstsw. После перемещения в регистр АН старшего байта STATUSWORD МОЖНО проанализировать флаги C F ( C O ) , P F ( C 2 ) , Z F ( C 3 ) . Далее, следуя соотношениям в табл. 2.1, используем команды условных переходов для вывода в окно приложения соответствующих сообщений.


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru