Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
palivo_finalv0_2.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

86. Конвенція stdcall. Приклад програмування.

stdcall - є стандартним типом виклику для Microsoft Win32 API і Open Watcom C++. Викликана підпрограма залишається відповідальною за очищення стека, але параметри поміщаються в стек у зворотному (справа-наліво, як і в cdecl). Регістри EAX, ECX, EDX призначені для використання в межах функції. Значення, що повертається, зберігається в регістрі ЕАХ.

Приклад. Програма виводить повідомлення в невеликому windows-вікні.

.386

.model flat, stdcall

option casemap:none

include \masm32\include\kernel32.inc

include \masm32\include\user32.inc

include \masm32\include\windows.inc

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\user32.lib

.data

Caption db "Лаб1", 0

Text db "Здоровенькі були", 0

.code

start:

invoke MessageBoxA, 0, ADDR Text, ADDR Caption, MB_ICONINFORMATION

invoke ExitProcess, 0

end start

Джерело:

http://uk.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F_%D0%B2%D0%B8%D0%BA%D0%BB%D0%B8%D0%BA%D1%96%D0%B2

87. Асемблерні вставки у мовах високого рівня.

Фундаментальною перевагою асемблера перед мовами високого рівня є швидкість. Більшість програм, які працюють у режимі реального часу, або написані на мовою асемблер, або використовують у критичних ділянках програмного коду асемблерні модулі. Асемблер, вбудований у мови високого рівня, використовують для досягнення високої продуктивності роботи програм.

Зручність, вигідність та легкість використовування вбудованого асемблера важко переоцінити, оскільки він не потребує окремого компілювання, компунуванян блоків асемблерного коду. Це є надто важливо для швидкого розробляння та налогоджування програм.

Схематично блок команд на асемблері для програми розробленій на C++ виглядає так:

asm

{ асемблерні команди

}

88. Середовище x87 fpu

Джерело: http://frogs.digdes.ru/netcat_files/1162_49.pdf

89. Команди x87 fpu. Приклад програми.

Команды пересылки данных

Некоторые управляющие команды

Сложение и вычитание

А рифметические команды

Приклад обчислення суми двох пар добутків Res = A×B + C×D

90. Стек даних x87 fpu. Приклад програми.

91. Команди simd

Расширения потоковой обработки (Streaming SIMD Extensions) были введены в архитектуру процессоров Intel, начиная с процессора Pentium III. Эти расширения предназначены для использования в программах обработки мультимедийной информации наряду с более ранними мультимедиа-расширениями MMX.

Набор команд SIMD первоначально включает около 70 команд, которые могут оперировать данными как в MMX-регистрах, так и в новых SIMD-регистрах процессора. Специальные форматы данных введены для обеспечения обработки информации, представленной в форме вещественных значений (это необходимо, например, при 3D-моделировании).

При разработке SIMD-команд фирма Intel учла все нововведения, появившиеся в наборе команд 3DNow! компании AMD и практически включила этот набор команд в свое SIMD-расширение.

ADDPS cложить упакованные короткие вещественные значения

ADDSS Сложить одиночные короткие вещественные значения

ANDNPS Логическое НЕ-И над 128-битными операндами

ANDPS Логическое И над 128-битными операндами

CMPPS Сравнить упакованные короткие вещественные значения

CMPSS Сравнить одиночные короткие вещественные значения

COMISS Сравнить упорядоченно одиночные короткие вещественные значения и установить EFLAGS по результатам сравнения

CVTPI2PS Преобразовать упакованные знаковые целые двойные слова в упакованные короткие вещественные значения

CVTPS2PI Преобразовать упакованные короткие вещественные значения в упакованные знаковые целые двойные слова

CVTSI2SS Преобразовать одиночное знаковое двойное целое слово в одиночное короткое вещественное значение

CVTSS2SI Преобразовать одиночное короткое вещественное значение в одиночное знаковое целое двойное слово

CVTTPS2PI Преобразовать упакованные короткие вещественные значения в упакованные знаковые целые двойные слова без точного округления

CVTTSS2SI Преобразовать одиночное короткое вещественное значение в одиночное знаковое целое двойное слово без точного округления

DIVPS Делить упакованные короткие вещественные значения

DIVSS Делить одиночные короткие вещественные значения

LDMXCSR Загрузить регистр управления/статуса SIMD

MASKMOVQ Переслать 64-битные данные из MMX-регистра с маскированием

MAXPS Найти наибольшее для упакованных вещественных значений

MAXSS Найти наибольшее для одиночных вещественных значений

MINPS Найти наименьшее для упакованных вещественных значений

MINSS Найти наименьшее для одиночных коротких вещественных значений

MOVAPS Переслать выровненные упакованные короткие вещественные значения

MOVHLPS Переслать два старших упакованных коротких вещественных значения в младшие

MOVHPS Переслать два старших упакованных коротких вещественных значения в/из памяти

MOVLHPS Пересылать два младших упакованных коротких вещественных значения в старшие

MOVLPS Переслать два младших упакованных коротких вещественных значения в/из памяти

MOVMSKPS Переслать маску состояния упакованных коротких вещественных значений в целочисленный регистр

MOVNTPS Переслать выровненные упакованные короткие вещественные значения без использования КЭШ

MOVNTQ Переслать 64-битные данные из MMX-регистра в память без использования КЭШ

MOVSS Переслать одиночное короткое вещественное значение

MOVUPS Переслать невыровненные упакованные короткие вещественные значения

MULPS Перемножить упакованные короткие вещественные значения

MULSS Перемножить одиночные короткие вещественные значения

ORPS Логическое ИЛИ над 128-битными операндами

PAVGB Усреднить беззнаковые упакованные байты

PAVGW Усреднить беззнаковые упакованные слова

PEXTRW Развернуть слово

PINSRW Вставить слово

PMAXSW Найти наибольшее для упакованных знаковых целых слов

PMAXUB Найти наибольшее для упакованных беззнаковых целых байтов

PMINSW Найти наименьшее для упакованных знаковых целых слов

PMINUB Найти наименьшее для упакованных беззнаковых целых байтов

PMOVMSKB Переслать маску состояния упакованных байтов в целочисленный регистр

PMULHUW Перемножить упакованные беззнаковые слова

PREFETCH Упреждающая выборка данных

PSADBW Вычислить абсолютное отклонение упакованных беззнаковых байтов

PSHUFW Перестановка упакованных слов

RCPPS Найти обратные величины для упакованных коротких вещественных значений

RCPSS Найти обратную величину для одиночного короткого вещественного значения

RSQRTPS Найти обратные величины квадратных корней упакованных коротких вещественных значений

RSQRTSS Найти обратную величину квадратного корня одиночного короткого вещественнго значения

SFENCE Защита операций записи

SHUFPS Перестановка коротких вещественных значений

SQRTPS Найти квадратные корни от упакованных коротких вещественных значений

SQRTSS Найти квадратный корень от одиночного короткого вещественного значений

STMXCSR Сохранить регистр управления/статуса SIMD

SUBPS Вычитание упакованных коротких вещественных значений

SUBSS Вычитание одиночных коротких вещественных значений

UCOMISS Сравнить неупорядоченно одиночные короткие вещественные значения и установить EFLAGS по результатам сравнения

UNPCKHPS Распаковать старшие упакованные короткие вещественные значения

UNPCKLPS Распаковать младшие упакованные короткие вещественные значения

XORPS Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ над 128-битными операндами

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]