| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
двух частей операнда.
Занесение в стек константа (процессор 8086)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Хотя процессоры 80186б 80286 и 80386 среди основного набора
инструкций содержат инструкцию PUSH, которая заносит в стек не-
посредственное значение, в процессоре 8086 такой инструкции нет.
Однако Турбо Ассемблер позволяет использовать в инструкции
PUSH константы и в процессоре 8086. При этом генерируется после-
Турбо Ассемблер 3.0/tasm/#2-2 = 14 =
довательность инструкций, имеющая тот же результат, что и инс-
трукция PUSH c операндом-константой для процессора 80186 и выше.
Примечание: Это средство вы можете использовать толь-
ко при разрешении генерации эффективного кода.
Последовательность инструкций, которую Турбо Ассемблер ис-
пользуется для выполнения операции PUSH с константой, имеет длину
около 10 байт. Они короче и выполняются быстрее, чем выполнение
той же функции, но их выполнение связано с потерей содержимого
регистра, например:
MOV ax, constant
PUSH ax
Данная последовательность имеет длину только 6 байт, но в
процессе этого теряется содержимое регистра AX.
Турбо Ассемблер 3.0/tasm/#2-2 = 15 =
Расширенные инструкции сдвига
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
При использовании процессор 8086 инструкции сдвига RCL, RCR,
ROL, ROR, SHL, SHR, SAL и SAR не могут воспринимать константу
циклического сдвига, отличную от 1. При работе на процессорах
80186, 80286 и 80386 можно использовать константу циклического
сдвига со значением до 255.
Когда Турбо Ассемблер обнаруживает инструкцию сдвига со зна-
чением константы, большим 1 (при выборе процессора 8086),он гене-
рирует соответствующее число инструкций сдвига со значением конс-
танты циклического сдвига 1. Например, инструкции:
.8086
SHL ax,4
генерируют последовательность:
SHL ax,1
SHL ax,1
SHL ax,1
SHL ax,1
Принудительное переопределение сегментов: инструкции SEGxx
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В Турбо Ассемблере предусмотрены 6 инструкций, которые
приводят к генерации переопределений сегмента. Эти инструкции пе-
речислены в следующей таблице:
Инструкции переопределения сегмента Таблица 13.3
ЪДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Инструкция і Значение і
ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і SEGCS і Генерирует префиксный байт переопределения CS.і
і і і
і SEGSS і Генерирует префиксный байт переопределения SS.і
і і і
і SEGDS і Генерирует префиксный байт переопределения DS.і
і і і
і SEGES і Генерирует префиксный байт переопределения ES.і
і і і
і SEGFS і Генерирует префиксный байт переопределения FS.і
і і і
і SEGGS і Генерирует префиксный байт переопределения GS.і
АДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Вы можете использовать эти инструкции в сочетании с такими
инструкциями, как XLATB, которые не требуют аргументов, но могут
использовать переопределение сегментов, например:
SEGCS XLATB
Турбо Ассемблер 3.0/tasm/#2-2 = 16 =
Заметим, что в большинстве инструкций имеется альтернативная
форма, при которой, чтобы указать на необходимость переопределе-
ния, вы можете задать пустой аргумент:
XLAT BYTE cs:[bx]
Приведенные два примера генерируют один и тот же код.
Дополнительные инструкции работы с флагами
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Часто, чтобы улучшить эффективность и уменьшить размер кода,
можно упростить инструкции работы с флагами. Например, если
единственным желаемым результатом является установка конкретного
бита в AX, а флаги процессора, на которые влияет данная инструк-
ция, значение не имеют, инструкцию:
OR ax,1000h
можно упростить до инструкции:
OR, ah,10h
Турбо Ассемблер обеспечивает 4 дополнительных инструкции,
которые обеспечивают эти функциональные возможности. Они показаны
в следующей таблице:
Эффективные инструкции работы с флагами Таблица 13.4
ЪДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Инструкция і Функция іСоответствует инструкции і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і SETFLAG і Установка бит і OR і
і і (бита) флага. і і
і і і і
і MASKFLAG і Размаскированиеі AND і
і і бит (бита) і і
і і флага. і і
і і і і
і TESTFLAG і Проверка бит і TEST і
і і (бита) флага. і і
і і і і
і FLIPFLAG і Дополнение бит і XOR і
і і (бита) флага. і і
АДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Эти инструкции можно использовать для улучшения модульности
записей, например:
FOO RECORD R0:1,R1:4,R2:3,R3:1
.
.
.
Турбо Ассемблер 3.0/tasm/#2-2 = 17 =
TESTFLAG AX,R0
В данном примере TESTFLAG будет генерировать наиболее эффек-
тивные инструкции, независимо от того, где в записи находится R0.
Дополнительные инструкции работы с битами полей
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Турбо Ассемблер может генерировать специальные последова-
тельности инструкций для задания значений и извлечения значений
из битовых полей, заданных с помощью оператора RECORD. Это позво-
ляет вам писать код, независимый от фактического расположения по-
ля в записи. При использовании их в сочетании с оператором ENUM,
записи на языке ассемблера могут получить очень высокий уровень
модульности. Список данных инструкций приведен в следующей табли-
це:
Инструкции для установки и извлечения значения Таблица 13.5
ЪДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Инструкция і Функция і
ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і SETFIELD і Устанавливает значение поля записи. і
і і і
і GETFIELD і Извлекает значение из поля записи. і
АДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Инструкция SETFIELD
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Инструкция SETFIELD генерирует код, устанавливающий значение
поля записи. Она имеет синтаксис:
SETFIELD имя_поля регистр/память_приемник, регистр_источник
где "имя_поля" - имя поля записи, "регистр/память_приемник" для
SETFIELD представляет собой регистр или адрес в памяти типа BYTE
или WORD (DWORD для процессора 80386). "Регистр_источник" должен
быть регистром того же или меньшего размера. Если источник мень-
ше, чем приемник, то регистр-источник должен быть младшей частью
другого регистра, имеющего тот же размер, что и приемник. Этот
полный регистр называется рабочим регистром. Используйте данный
регистр для сдвига значения в регистре-источнике, благодаря чему
оно выравнивается по приемнику. Например:
FOO RECORD R0:1,R1:4,R2:3,R3:1
.
.
.
SETFIELD F1 AX,BL ; рабочим регистром является BX
SETFIELD F1 AX,BH ; недопустимо!
SETFIELD сдвигает регистр-источник, чтобы эффективно выров-
|
adfun.ru
|
|
|
|