Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр.docx
Скачиваний:
30
Добавлен:
21.12.2018
Размер:
2.58 Mб
Скачать

Блок-схема вывода на экран вещественного числа, которое хранится в регистре st(0) сопроцессора.

 Команда:

FRNDINT

 Назначение:

Округлить до целого

Округляет значение ST(0) до целого числа в соответствии с режимом округления, заданным битами RC.

Команда FRNDINT округляет значение в ST к целому согласно установки поля режима округления RC в управляющем слове FPU.

Если входное значение в ST равно ±∞, то оно не изменяется. Если входное значение в ST не целое, то при преобразовании возникает ошибка #P.

Флаги C0, C2, C3 регистра SW после выполнения команды неопределены, флаг C1 устанавливается равным 0 в случае возникновения стековой ошибки #IS, а также указывает направление округления в случае возникновения исключения #P (неточный результат): 0 – округление к меньшему, 1 – округление к большему.

Исключение #IA возникает, если входной операнд SNaN или представлен в неподдерживаемом формате.

  После установки способа округления команда FRNDINT округляет

    показатель степени E до целого значения

7. Трансцендентні операції FPU. Алгоритм обчислення виразу sin(cos(x)), де х- дійсне число. Команда FYL2XP1, призначення.

Трансцендентные операции fpu

 Команда:

FSIN

 Назначение:

Синус

 Процессор:

80387

Вычисляет синус числа, находящегося в ST(0), и сохраняет результат в этом же регистре. Операнд считается заданным в радианах и не может быть больше 263 или меньше -263 (можно воспользоваться FPREM с делителем 2, если операнд слишком велик). Если операнд выходит за эти пределы, флаг С2 устанавливается в 1 и значение ST(0) не изменяется.

 Команда:

FCOS

 Назначение:

Косинус

 Процессор:

80387

Вычисляет косинус числа, находящегося в ST(0), и сохраняет результат в этом же регистре. Операнд считается заданным в радианах и не может быть больше 263 или меньше -263 (так же, как и в случае синуса, можно воспользоваться FPREM с делителем 2, если операнд слишком велик). Если операнд выходит за эти пределы, флаг С2 устанавливается в 1 и значение ST(0) не изменяется.

 Команда:

FSINCOS

 Назначение:

Синус и косинус

 Процессор:

80387

Вычисляет синус и косинус числа, находящегося в ST(0), помещает синус в ST(0) и затем помещает косинус в стек (так что синус оказывается в ST(1), косинус — в ST(0), и ТОР уменьшается на 1). Операнд считается заданным в радианах и не может быть больше 263 или меньше -263. Если операнд выходит за эти пределы, флаг С2 устанавливается в 1 и значение ST(0) и стек не изменяются.

 Команда:

FPTAN

 Назначение:

Тангенс

 Процессор:

8087

Вычисляет тангенс числа, находящегося в регистре ST(0), заменяет его на вычисленное значение и затем помещает 1 в стек, так что результат оказывается в ST(1), ST(0) содержит 1, а ТОР уменьшается на единицу. Как и для остальных тригонометрических команд, операнд считается заданным в радианах и не может быть больше 263 или меньше -263. Если операнд выходит за эти пределы, флаг С2 устанавливается в 1 и значение ST(0) и стек не изменяются. Единица помещается в стек для того, чтобы можно было получить котангенс вызовом команды FDIVR сразу после FPTAN.

 Команда:

FPATAN

 Назначение:

Арктангенс

 Процессор:

8087

Вычисляет арктангенс числа, получаемого при делении ST(1) на ST(0), сохраняет результат в ST(1) и выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает TOP на 1). Рeзyльтaт всегда имеет тот же знак, что и ST(1), и меньше  по абсолютной величине. Смысл этой операции в том, что FPATAN вычисляет угол между осью абсцисс и линией, проведенной из центра координат в точку ST(1),ST(0).

FPATAN может выполняться над любыми операндами (кроме не-чисел), давая результаты для различных нулей и бесконечностей, определенные в соответствии со стандартом IEEE (как показано в табл. 17).

FYL2XP1

од

Команда

Описание

Проц.

Пример

D9 F9

FYL2XP1

ST(1) = ST(1) * log2(ST(0)+1.0), верхний элемент выталкивается из регистрового стека

8087

fyl2xp1

Операция :

ST(1) = ST(1) * log2(ST + 1.0);

Pop(ST);

Описание :

Команда FYL2XP1 вычисляет ST(1) * log2(ST + 1), помещает результирующее значение в ST(1) и выталкивает из регистрового стека верхний элемент ST.

Исходный операнд в ST должен иметь значение в диапазоне: (sqrt(2)/2) ‑ 1  ST  1 ‑ sqrt(2)/2. Исходный операнд в ST(1) может принимать значения от -∞ до +∞.

Если операнд в ST находится вне приемлемого диапазона, то результат FYL2XP1 неопределен. Это касается и различных исключений, которые могут возникать, а могут и не возникать, когда операнд в ST не находится в диапазоне разрешенных значений.

В таблице 6.200. приведены возвращаемые командой FYL2XP1  значения для различных классов операндов, а также случаи, когда возникает исключение #IA.

Таблица 6.200. Значения, возвращаемые командой FYL2XP1 для различных классов операндов

ST(1)\ST(0)

от -(1-sqrt(2)/2) до -0

-0

+0

от +0 до +(1-sqrt(2)/2)

NaN

-INF

+INF

#IA

#IA

-INF

NaN

-F

+F

+0

-0

-F

NaN

-0

+0

+0

-0

-0

NaN

+0

-0

-0

+0

+0

NaN

+F

-F

-0

+0

+F

NaN

+INF

-INF

#IA

#IA

+INF

NaN

NaN

NaN

NaN

NaN

NaN

NaN

 

 

 

 

 

 

F - Конечное вещественное значение

 

 

 

 

Исключение #IA возникает также, если любой из операндов SNaN или представлен в неподдерживаемом формате.

Флаги C0, C2, C3 регистра SW после выполнения команды неопределены, флаг C1 устанавливается равным 0 в случае возникновения стековой ошибки #IS, а также указывает направление округления в случае возникновения исключения #P (неточный результат): 0 – округление к меньшему, 1 – округление к большему.

Команда FYL2XP1 обеспечивает более высокую точность, чем FYL2X при вычислении логарифмов велчин близких к 1. Когда  мало ( — величина, логарифм которой необходимо найти, минус единица), большее количество значащих цифр может быть вычислено при применении  в качестве аргумента FYL2XP1, нежели чем при применении 1 +  в качестве аргумента FYL2X.

8. Білет № 8

1. Алгоритм виводу ВСD чисел на екран в двійковій системі числення. Приклад виведення 32-ух бітного ВСD-числа на екран. Команда FYL2X. Приклади використання команди FYL2X.

 Команда:

FYL2X

 Назначение:

Вычисление y*log2(x);

ST(1) = ST(1)*log2(ST(0)), верхний элемент выталкивается из стека

FYL2X формирует число Z = Ylog2X. Исходное значение аргумента X должно храниться в текущем регистре стека, а аргумента Y - в первом. После выполнения команды FYL2X число Z записывается в первый регистр стека, а содержимое текущего регистра выталкивается из стека. Область существования функции 0 < X < и -оо <Y<oo . Исходные значения аргументов команды не проверяются на принадлежность к этой области. Команда FYL2X проверяет наличие особого случая - "точность

9.

Схема трансляції асемблерного модулю. Існуючі асемблери та супутні програми. Робота з командою MessageBoxA. Аргументи команди MessageBoxA

Трансляция — преобразование программы, представленной на одном языке программирования, в программу на другом языке программирования, в определенном смысле равносильную первой.

Как правило, выходным языком транслятора является машинный язык целевой вычислительной системы. (Целевая ВС — та ВС, на которой программа будет выполняться.)

Рис. 1.1. Схема трансляции ассемблерного модуля

Ассемблер — это программа, которая переводит текст с языка, понятного человеку, в язык, понятный процессору, то есть говорят, что она переводит язык ассемблера в машинный код. Однако сначала в повседневной речи, а затем и в литературе слово «ассемблер» стало также и названием самого языка программирования. Понятно, что, когда говорят «программа на ассемблере», имеют в виду язык, а когда говорят «макроассемблер версии 6.13», имеют в виду программу. Вместе с ассемблером обязательно должна быть еще одна программа — компоновщик (linker), которая и создает исполнимые файлы из одного или нескольких объектных модулей, полученных после запуска ассемблера. Помимо этого для разных целей могут потребоваться дополнительные вспомогательные программы — компиляторы ресурсов, расширители DOS и тому подобное (см. табл. 1).

Microsoft

Borland

Watcom

DOS, 16 бит

masm или ml, link (16 бит)

tasm tlink

wasm wlink

DOS, 32 бита

masm или ml, link (32 бита) и dosx link (16 бит) и dos32

tasm tlink wdosx или dos32

wasm wlink dos4gw, pmodew, zrdx или wdosx

Windows EXE

masm386 или ml, link (32 бита) rc

tasm tlink32 brcc32

wasm wlink wrc

Windows DLL

masm386 или ml, link (32 бита)

tasm tlink32 implib

wasm wlink wlib

Таблица 1. Ассемблеры и сопутствующие программы

Трудно говорить о том, продукция какой из этих трех компаний однозначно лучше. С точки зрения удобства компиляции TASM лучше подходит для создания 16-битных программ для DOS, WASM — для 32-битных программ для DOS, MASM — для Windows. С точки зрения удобства программирования развитость языковых средств растет в ряду WASM—MASM—TASM. Все примеры программ в этой книге построены так, что можно использовать любой из этих компиляторов.

Разумеется, существуют и другие компиляторы, например бесплатно распространяемый в сети Internet NASM или условно бесплатный А86, но пользоваться ими проще, если вы уже знаете турбо- или макроассемблер. Бесплатно распространяемый GNU ассемблер, gas, вообще использует совершенно непохожий синтаксис, который будет рассмотрен в главе 11, рассказывающей о программировании для UNIX.