- •3.0 Применяется в компьютерах at, 4.0 обеспечивает работу в
- •15, 19, 20 Или 21. Связанными являются главы с 8 по 10, 12 и 13, с 15 по
- •18, Главы с 22 по 25 cодержат справочный материал.
- •Глава 1 Введение в семейство персональных компьютеров ibm pc
- •00101010 (Это можно не запоминать). Каждый байт в памяти компьютера имеет
- •01000001 Представляют букву a. Когда на клавиатуре нажата клавиша a,
- •1024, Т.Е. 524288 байт.
- •256 Символов.
- •64, Т.Е. 65. Но 01000001 представляет также букву a! Действительно, здесь
- •8088 Использует 16-битовую архитектуру, oн автоматически оперирует с
- •00000001, Чтобы получить число 00000000? в терминах десятичного исчисления
- •1. С е г м е н т к о д о в. Сегмент кодов содержит машинные
- •2. С е г м е н т д а н н ы х. Сегмент данных содержит
- •3. С е г м е н т с т е к а. Стек содержит адреса возврата как
- •I (Прерывание) Указывает на возможность внешних прерываний.
- •8088 Похож на 8086, но с одним различием: 8088 ограничен 8-битовыми
- •64К и имеется четыре типа сегментов, то это предполагает общее количество
- •1, И выполнять арифметические операции только в двоичном формате.
- •Глава 2 Выполнение программ
- •1. Р а з м е р п а м я т и. Сначала проверим размер доступной
- •2. С е р и й н ы й н о м е р. Серийный номер компьютера "зашит"
- •3. Д а т а rom bios. Дата rom bios в формате mm/dd/yy находится
- •109, 10A и 10b. Последняя команда Enter:
- •13C6:0111 cb retf
- •0106 - Адрес cледующей команды для выполнения.
- •0148, Поскольку команда mov только копиpует данные из одного места в
- •0000, В регистр ax.
- •03060200 Прибавить содержимое слова (двух байт), начинающегося в ds
- •13C6:010a cb retf
- •04Af0), а регистр ip содержит шест. 0023:
- •4B22 для загрузки его непосредственно в регистр. Но если слово начинается
- •1. После загрузки программы в память машины и ее модификации
- •2. Необходимо с помощью debug написать небольшую по объему
- •106 (Конец) минус 100 (начало), т.Е. 6.
- •2.1. Напишите машинные команды для
- •2.2. Предположим, что была введена следующая е команда:
- •2.3. Предположим, что введена следующая е команда:
- •2.4. Имеется следующая программа в машинных кодах:
- •2.5. Используйте отладчик для ввода (e) следующей программы в
- •2.6. Для предыдущего задания (2.5) постройте команды для записи
- •2.7. Используя команду a отладчика, введите следующую про грамму:
- •Глава 3 Требования языка ассемблер
- •1. ;Эта строка полностью является комментарием
- •2. Add ax,bx ;Комментарий на одной строке с командой
- •1. В ы р а в н и в а н и е. Данный параметр определяет границу
- •2. О б ъ е д и н е н и е. Этот элемент определяет объединяется
- •3. К л а с с. Данный элемент, заключенный в апострофы,
- •1. Assume - это ассемблерная директива, которая устанавливает
- •Глава 4 Ассемблирование и выполнение программ
- •1. Завершает формирование в obj-модуле адресов, которые остались
- •2. Компонует, если необходимо, более одного отдельно
- •3. Инициализирует exe-модуль командами загрузки для выполнения.
- •00000H 00015h 0016h codesg
- •00020H 0007fh 0060h stacksg
- •0123 И 0025 в памяти представлены в виде 2301 и 2500 соответственно. В
- •250, Которое ассемблер транслирует в шест.00fa (см. На рисунке слева).
- •0004 B8 ---- r mov ax,datasg
- •10 Symbols
- •4.6. Модифицируйте программу из вопроса 4.5 для:
- •Глава 5 Определение данных
- •8000 До ffff представляют отрицательные значения. В десятичном исчислении
- •1421:0000 00 50 65 72 73 6F 6e 61-6c 20 43 6f 6d 70 75 74 .Personal Comput
- •0123H; десятичной, например, 291 (которую ассемблер конвертирует в
- •1. Tp equ totalpay
- •5.1. Какова длина в байтах для элементов данных, определенных
- •5.2. Определите символьную строку по имени title1, содержащую
- •5.3. Определите следующие числовые значения в элементах данных с
- •Глава 6 Программы в com-файлах
- •Глава 7 Логика и Организация Программы
- •1,2,3,4..., Регистра bx: 1,3,6,10..., и регистра cx: 1,2,4,8... Начало
- •08, Bx и cx увеличатся до шест.24 (дес.36) и шест.80 (дес.128),
- •0042 И 0400. Для выхода из отладчика введите команду q.
- •1) Из старшего разряда при арифметических операциях и некоторых операциях
- •If (Interrupt Flag) - флаг прерывания. При нулевом состоянии этого
- •Ip: Нуль.
- •2. При этом происходит автоматический возврат по относительному адресу
- •000B в кодовом сегменте, т.Е. В процедуру b10.
- •Inc si ;Следующий символ в name1
- •Inc di ;Следующая позиция в name2
- •Inc di ;Следующий символ в name2
- •Inc si ;Следующая позиция в name3
- •Xor и test - являются командами логических операций. Эти команды
- •Xor: Если один из сравниваемых битов равен 0, а другой равен 1, то
- •1, 0, А в три левых бита в регистре ax заносятся нули.
- •2 Бита, то использование двух команд сдвига более эффективно, чем
- •1. Четко представляйте себе задачу, которую должна решить
- •2. Сделайте эскиз задачи в общих чертах и спланируйте общую
- •Глава 8 Экранные операции I: Основные свойства
- •Int 10h ;Передача управления в bios
- •Int 10h ;Передача управления в bios
- •Int 21h ;Вызов dos
- •Inc ctr ;Увеличить счетчик
- •04 И 05). Код 07 выдает звуковой сигнал. Код 06 должен отобразиться
- •10 (Шест. 0ah), загрузить адрес списка параметров (namepar в нашем
- •Int 21h ;Вызвать dos
- •1. Разделим длину 09 на 2 получим 4, и
- •2. Вычтем это значение из 40, получим 36
- •Int 10h ;Вызов bios
- •Int 10h ;Вызов bios
- •1. Brown |14|05|42|52|4f|57|4e|0d|20|20|20| ... |20|
- •2. Hamilton |14|08|48|41|4d|49|4c|54|4f|4e|0d| ... |20|
- •3. Adams |14|05|41|44|41|4d|53|0d|4f|4e|0d| ... |20|
- •Inc si ;Следующая позиция поля
- •Inc si ;Получить адрес
- •Inc si ; следующего слова
- •Int 21h ;Вызов dos
- •100 Для ввода ассемблерных команд (не машинных команд) по адpесу 100. Не
- •105 Mov cx,хх (введите длину вашего имени)
- •10E db 'Ваше имя'
- •Int 21h ;Вызов dos
- •Глава 9 Экранные операции II: Расширенные возможности
- •Int 10h, можно управлять вертикальным размером курсора: биты 4-0 в
- •Int 10h ;Вызвать bios
- •Int 10h ;Вызвать bios
- •Int 10h ;Вызвать bios
- •Int 10h ;Вызвать bios
- •Int 10h ;Вызвать bios
- •Int 10h ;Вызвать bios
- •Int 10h ;Вызвать bios
- •Int 10h ;Вызвать bios
- •Int 10h ;Вызвать bios
- •40 Столбца в той же строке с миганием и инвертированием:
- •Inc si ;Следующий символ в имени
- •Inc col ;Следующий столбец
- •Ins si ;Следующий символ в имени
- •Ins col ;Следующий столбец на экране
- •Int 10h ;Вызов bios
- •Int 10h ;Вызов bios
- •25 Позиций в длину:
- •00. Это средство связано с функциями 01, 07 и 08, которые не ожидают ввода
- •0 При нажатии клавиши Номе (скэн-код 47):
- •Int 10h ;Вызвать bios
- •2К байт на атрибуты для каждого символа.
- •9.5. Составьте команды для определения нажатия клавиши: если нажата
- •Глава 10 Экранные операции III: Цвет и графика
- •1. Немодифицированный цветной телевизионный приемник (обычный
- •2. Комбинированный видеомонитор, принимающий цветовой сигнал без
- •640Х350 точек на экране.
- •Int 10h int 10h ; разрешения
- •16 Цветов на одном из восьми цветов фона. Бордюр экрана может иметь также
- •0 1 Зеленый голубой
- •1 0 Красный сиреневый
- •1 1 Коричневый белый
- •Int 10h ;Вызвать bios
- •Int 10h ;Вызвать bios
- •0 До 319). В регистре ah должно быть значение 0d. Функция возвращает цвет
- •80 Столбцов или восемь страниц для экранов на 40 столбцов.
- •Глава 11 Команды обработки строк
- •Inc/dec di ;Инкремент или декремент
- •Inc/dec di ;Инкремент или декремент
- •02 В регистр bl. При трассировке команд с помощью отладчика debug можно
- •Inc row ; увеличить строку,
- •11.1. В данной главе приведены эквивалентные команды для а) movsb, б)
- •11.2. Введите, ассемблируйте и выполните компоновку программы,
- •11.3. Имеются следующие определения:
- •11.4. Переделайте процедуру h10scas (рис.11.1) так, чтобы выполнялось
- •11.5. Определите поле, содержащее шест. Значения 03, 04, 05 и b4.
- •Глава 12 Арифметические операции I: Обработка двоичных данных
- •3601 В поле word3a и 9c11 в поле word3b.
- •Imul byte2 ; произведение в aх
- •Imul word2 ; произвед. В dx:ax
- •Imul word1 ; произвед. В dx:ax
- •138A 5800. Далее выполняется сложение двух произведений следующим образом:
- •00E4. Программа предполагает, что первое слово в области product имеет
- •Inc cx ;Инкремент частного
- •1. В метке c20 сравнивать ax и bx только при нулевом dx.
- •2. После команды sub вставить команду sbb dx,00.
- •80286. Каждый сопроцессор имеет собственный набор команд и средства для
- •Imul или idiv для знаковых.
- •Глава 13 Арифметические операции II:
- •31323334 Имеет распакованное десятичное представление 01020304. Кроме
- •05 В регистр al. Команда or преобpазует затем распакованное десятичное
- •20 (Шест.14) к регистру al и очищает регистр ah. Значение 001c есть шест.
- •00090204. Если сжать это значение, сохраняя только правые цифры каждого
- •Xchg ah,al
- •Xor aн,aн ;0чистить aн
- •1. Начинают с самого правого байта числа в ascii-формате и
- •2. Удаляют тройки из левых шест.Цифр каждого ascii-байта.
- •3. Умножают ascii-цифры на 1, 10, 100 (шест.1, a, 64) и т.Д. И
- •1234. На рис.13.5 в процедуре b10asbi выполняется преобразование
- •Xor dx,dx ;Очистить часть частного
- •Xlat (см. Гл.14).
- •Idiv для обработки знаковых данных. Для округления отрицательных чисел
- •Глава 14 Обработка таблиц
- •1. Преобразовать введенный номер месяца из ascii 33 в двоичное
- •4. Прибавить произведение (18) к адресу montbl; в результате
- •Xor ax,3030h ;Удалить ascii тройки
- •2, 3,... Или 106, 107, 108,... Или даже 5, 10, 15. Однако, не всегда
- •Xchg al,ah
- •Inc si ;Выделить описание
- •6000,01 И более 23 390,00
- •Xltbl db 47 dup(40h) ;Пробелы в коде ebcdic
- •Xltab db 45 dup(40h)
- •Xlat ;Перекодировка
- •30 Имен, сортировку введенных имен в алфавитном порядке и вывод на экран
- •Inc namectr ;Число имен в таблице
- •Int 21h ;Вывести на экран
- •Глава 15 Дисковая память I: Организация
- •1/4 Дюймовой дискеты содержит 40 концентрических дорожек, пронумерованных
- •512 Байтов каждый.
- •10 Мегабайт 306 17 512 10 653 696
- •20 Мегабайт 614 17 512 21.377.024
- •0 0 1 Запись начальной загрузки
- •1 0 4 ... Файлы данных
- •11 Атрибут файла, определяющий его тип:
- •119, Месяц - от 1 до 12, а день - от 1 до 31.
- •000 Свободный кластер,
- •016. Второй кластер для файла, следовательно, имеет номер 016.
- •1,5, Получим 25.5. Затем следует выбрать содержимое байтов 25 и 26 таблицы
- •Глава 16 Дисковая память II: Функции базовой версии dos
- •13H, которое позволяет выполнить произвольную адресацию в дисковой памяти
- •0 Указывает дисковод: 01 для дисковода a, 02 для b и т.Д.
- •32 Текущий номер записи. Данное поле содержит текущий номер записи
- •64, То байт 36 всегда содержит 00.
- •Int 21h ;Вызов dos
- •00 На диске есть свободное пространство
- •0 И размер записей (по умолчанию) - 128 (шест.80) байтов. Прежде, чем
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •X10err Выдает на экран сообщение об ошибке в случае не корректной
- •25 (Шест.19). Размер файла составит:
- •Int 21h ;Вызов dos
- •X10err proc near
- •Int 21h ; сообщения
- •X10err endp
- •X10err Выводит на экран сообщение об ошибке в случае некорректной
- •X10err proc near
- •Int 21h ; сообщения
- •X10err endp
- •00 Запрошен конец обработки
- •01 Введено однозначное число (в регистре al)
- •02 Введено двузначное число (в регистре ax)
- •Int 21h ;Вызов dos
- •00 Успешное завершение для всех записей
- •01 На диске недостаточно места.
- •26H. В этом случае не используются оглавление диска и преимущества
- •0, Сектора 1, следующим образом:
- •Int 21h ;Вызов dos
- •0 Соответствует дисководу a, 1 - b и т.Д.
- •Int 21h ;Вызов dos
- •11H. При использовании расширенного блока fcb можно также получить код
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Inc si ;Следующий символ
- •Int 21h ; ответ
- •Глава 17 Дисковая память III: Расширенные функции dos
- •2.0 Для обработки дисковых файлов.
- •16, Действительны для всех последующих версий dos. В данной главе показаны
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Int 10h ;Скроллинг
- •X10err proc near ;dx содержит
- •X10err endp
- •Inprec db 512 dup (' ')
- •Int 21h ;Вызов dos
- •Ioarea db 32 dup(' ')
- •X10err proc near
- •X10err endp
- •X10err proc near
- •X10err endp
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •1024 Байта от начала файла:
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Int 21h ;Функция вывода на экран
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Глава 18 Дисковая память IV: Функции bios
- •Int 13h ;Вызов bios
- •512 Байтов или кратное 512) в один или несколько определенных секторов.
- •Inc ch ;Увеличить номер дорожки
- •Xor side,01 ;Сменить сторону
- •Int 13h ;Выполнить ввод
- •Inc curadr ;Увеличить номер сектора
- •Глава 19 Печать
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Inc linectr ;Увеличить счетчик строк
- •Ianet Brown
- •X10err proc near
- •X10err endp
- •Int 21h ;Вызов dos
- •Int 21h ;Вызов dos
- •Inc si ;Следующий символ
- •Глава 20 Макросредства
- •Init1 macro ;Начало
- •Init1, он сначала просматривает таблицу мнемокодов и, не обнаружив там
- •Init2 macro csname,dsname,ssname ;Формальные параметры
- •Init2 macro csname,dsname,ssname
- •011F main endp
- •011F cseg ends
- •Init macro csname,dsname,ssname
- •Include c:macro.Lib
- •Init cseg,data,stack
- •Include c:macro.Lib
- •If1 и endif являются условными директивами. Директива if1 указывает
- •Include и endif, хотя в lst-файл ассемблер выводит только директиву endif.
- •0014 Begin endp
- •0014 Cseg ends
- •Init. Директива purge позволяет "удалить" нежелательные макросы prompt и
- •Include macro.Lib ;Включить всю библиотеку
- •Init cseg,data,stack ;Использование оставшейся макрокоманды
- •Irp: Неопределенное повторение
- •Irpc: Неопределенное повторение символа
- •Irpc dummy,string
- •Irpc n,345678
- •IFxx (условие)
- •Int 21h все запросы требуют занесения номера функции в регистр ah, в то
- •IFxx [условие]
- •If cntr
- •011F main endp
- •011F cseg ends
- •0000 Csig segment para 'Code'
- •0100 Eb 00 begin: jmp short main
- •0102 Main proc near
- •0109 Main endp
- •0109 Cseg ends
- •Глава 21 Компоновка программ
- •04Af в регистр cs. Комбинация этих адресов указывает на первую выполняемую
- •13D40 плюс 0000. Обратите внимание, что основная программа начинается по
- •Ibm Personal Computer Linker
- •Version 2.30 (c) Copyright ibm Corp. 1981, 1985
- •00000H 00011h 00012h codesg code
- •Глава 22 Программный загрузчик
- •3. Транзитная часть загружается в самые старшие адреса памяти.
- •Ibmbio.Com
- •Ibmdos.Com
- •00000H 0003ah 003bh cseg code
- •00040H 0005ah 001bh dseg data
- •00060H 0007fh 0020h stack stack
- •0004 B8 ---- r mov ax,dseg
- •0 Двухбайтовый сегментный адрес строки параметров для передачи.
- •0 Двухбайтовый адрес сегмента для загрузки файла.
- •2 Двухбайтовый фактор настройки загрузочного модуля.
- •Int 21h ;Вызвать dos
- •Int 21h ;Вызвать dos
- •Глава 23 Прерывания bios и dos
- •Ibmbio.Com и ibmdos.Com
- •Int 05h. П е ч а т ь э к р а н а. Выполняет вывод содержимого экрана
- •Int 10h. У п р а в л е н и е д и с п л е е м. Обеспечивает экранные
- •Ibmdos.Com. Так как модули dos обеспечивают большое количество разных
- •Int 20h. З а в е р ш е н и е п р о г р а м м ы. Запрос завершает
- •Int 21h. З а п р о с ф у н к ц и й dos. Основная операция dos,
- •Int 27h или функцию dos 31н. Для int 27н следует передать системе в
- •Inttab segment at 0h ;Таблица векторов прерываний:
- •Inttab ends
- •Iret ;Вернуться
- •Initze proc near ;Выполнять только один раз
- •Int 27h ;Завершить и остаться
- •Initze endp ; резидентом
- •In al,61h ;Получить и сохранить
- •Глава 24 Справочник по директивам языка Ассемблер
- •01. См. Операторы size и type в этом разделе.
- •0002Н, length - 000ан (соответственно операнду dup) и size - произведение
- •Include c:convert.Lib
- •00 Fldx db ? 01
- •01 Fldy dw ? 02
- •03 Fldz db ? 04
- •9Aad в сегмент данных. В угловых скобках может находиться значение,
- •Video_ram segment at 0b800h
- •Глава 25 Справочник по командам языка Ассемблер
- •40 Inc ax ;Увеличение ax на 1
- •50 Push ax ;Запись aх в стек
- •80286 И 80386 выходят за рамки данной книги и поэтому в данной главе также
- •Xor и test.
- •Idiv: Целое деление знаковых величин
- •Imul: Целое умножение знаковых величин
- •In: Ввод байта или слова из порта
- •Inc: Инкремент
- •Int: Прерывание
- •Into: Прерывание по переполнению
- •Iret: Возврат из обработки прерывания
- •2. См. Также команду ret.
- •Ip значение операнда (относительное смещение) и выполняет таким образом
- •Ino: Переход, если нет переполнения
- •Ip значение операнда (относительное смещение) и выполняет таким образом
- •80186, 80286 И 80386 имеют, кроме того, команду outs (Output String -
- •1; Ротация более чем на один бит требует указания регистра cl, который
- •Xchg: Перестановка
- •Xchg cx,word).
- •Xlat: Перекодировка
- •Xor: Исключающее или
- •Xor обрабатывает операнды побитово. Если проверяемые биты одинаковы, то
- •42936 / 16 2683 8 8 (Младшая цифра)
- •10 / 16 0 10 A (старшая цифра)
Ino: Переход, если нет переполнения
-------------------------------------
О п е р а ц и я: Используется для передачи управления по
определенному адресу после проверки на отсутствие переполнения. Если флаг
OF равен, нулю (нет переполнения), то команда прибавляет к регистру IP
значение операнда (относительное смещение) и выполняет таким образом
переход. См. также команду JO.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |01110001|--disp--|
JNP/JPO: Переход, если нет паритета или паритет нечетный
----------------------------------------------------------
О п е р а ц и я: Приводит к передаче управления по определенному
адресу, если в результате операции обнаружено отсутствие паритета или
паритет нечетный. Нечетный паритет в данном случае означает, что в
результате операции в . младших восьми битах получено нечетное число
битов. Если флаг PF равен нулю (нечетный паритет), то команда прибавляет к
регистру IP значение операнда (относительное смещение) и выполняет таким
образом переход. См. также команду JP/JPE.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |01111011|--disp--|
JHS: Переход, если нет знака
------------------------------
О п е р а ц и я: Приводит к передаче управления по определенному
адресу, если в результате операции получен положительный знак. Если флаг
SF равен нулю (положительное), то команда JNS прибавляет к регистру IP
значение операнда (относительное смещение) и выполняет таким образом
переход. См. также команду JS.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |01111001|--disp--|
JO: Переход по переполнению
-----------------------------
О п е р а ц и я: Приводит к передаче управления по определенному
адресу, если в результате операции получено состояние переполнения. Если
флаг OF равен единице (переполнение), то команда JO прибавляет к регистру
Ip значение операнда (относительное смещение) и выполняет таким образом
переход. См. также команду JNO.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |01110000|--disp--|
JP/JPE: Переход, если есть паритет или паритет четный
-------------------------------------------------------
О п е р а ц и я: Приводит к передаче управления по определенному
адресу, если в результате операции обнаружен четный паритет. Четный
паритет в данном случае означает, что в результате операции в младших
восьми битах получено четное число битов. Если флаг PF равен единице
(четный паритет), то команда прибавляет к регистру IP значение операнда
(относительное смещение) и выполняет таким образом переход. См. также
команду JNP/JPO.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |01111010|--disp--|
JS: Переход по знаку
----------------------
О п е р а ц и я: Передает управления по определенному адресу, если в
результате операции получен отрицательный знак. Если флаг SF равен единице
(отрицательно), то команда JS прибавляет к регистру IP значение операнда
(относительное смещение) и выполняет таким образом переход. См. также
команду JNS.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |01111000|--disp--|
LAHF: Загрузка флагов в регистр АН
------------------------------------
О п е р а ц и я: Загружает значение флагового регистра в регистр АН.
Данная команда обеспечивает совместимость с процессором 8080. См. также
команду SAHF. Команда LAHF заносит правый байт флагового регистра в
регистр АН в следующем виде:
SZ * A * P * C (* обозначает неиспользуемые биты)
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 10011111 (без операндов)
LDS: Загрузка регистра сегмента данных
----------------------------------------
О п е р а ц и я: Инициализирует начальный адрес сегмента данных и
адрес смещения к переменной для обеспечения доступа к данной переменной.
Команда LDS загружает в необходимые регистры четыре байта из области
памяти, содержащей относительный адрес и сегментный адрес. Сегментный
адрес помещается в регистр DS, а относительный адрес - в любой из общих
или индексных регистров или в регистровый указатель. Следующая команда
загружает относительный адрес в регистр DI:
LDS DI,адрес_памяти
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |11000101|modregr/m|
LES: Загрузка регистра дополнительного сегмента
-------------------------------------------------
О п е р а ц и я: Инициализирует начальный адрес дополнительного
сегмента и адрес смещения к переменной для .обеспечения доступа к данной
переменной. См. также команду LDS.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |11000100|modregr/m|
LOCK: Блокировка шины доступа к данным
----------------------------------------
О п е р а ц и я: Запрещает другим (сопроцессорам одновременно
изменять элементы данных. Команда LOCK представляет собой однобайтовый
префикс, который можно кодировать непосредственно перед любой командой.
Данная операция посылает сигнал в другой процессор, запрещая использование
данных, пока не будет завершена следующая команда.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 11110000
LODS/LODSB/LODSW: Загрузка однобайтовой или двухбайтовой строки
-----------------------------------------------------------------
О п е р а ц и я: Загружает из памяти один байт в регистр AL или одно
слово в регистр AХ. Несмотря на то, что команда LODS выполняет строковую
операцию, нет смысла использовать ее с префиксом REP. Регистровая пара
DS:SI адресует в памяти байт (для LODSB) или слово (для LODSW), которые
загружаются в регистр AL или AХ соответственно. Если флаг DF равен нулю,
то операция прибавляет 1 (для байта) или 2 (для слова) к регистру SI. Если
флаг DF равен единице, то операция вычитает 1 (для байта) или 2 (для
слова) из регистра SI.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 1010110w (без операндов).
LOOP: Цикл
------------
О п е р а ц и я: Управляет выполнением группы команд определенное
число раз. До начала цикла в регистр CX должно быть -загружено число
выполняемых циклов. Команда LOOP находится в конце цикла, где она
уменьшает значение в регистре СХ. на единицу. Если значение в регистре CX
не равно нулю, то команда передает управление по адресу, указанному в
операнде (прибавляет к регистру IP значение операнда); в противном случае
управление передается на следующую после LOOP команду (происходит выход из
цикла).
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: у11100010у--disp--у
LOOPE/LOOPZ: Цикл, если равно или нуль
-----------------------------------------
О п е р а ц и я: Управляет выполнением группы команд определенное
число раз или пока установлен флаг ZF (в единичное состояние). Команды
LOOPE/LOOPZ аналогичны команде LOOP, за исключением того, что по этим
командам цикл прекращается либо по нулевому значению в регистре CX, либо
по нулевому значению флага ZF (ненулевое состояние). См. также команды
LOOPNE/LOOPNZ.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |11100001|--disp--|
LOOPNE/LOOPNZ: Цикл, если не равно или не нуль
------------------------------------------------
О п е р а ц и я: Управляет выполнением группы команд определенное
число раз или пока сброшен флаг ZF (в нулевое состояние)., Команды
LOOPNE/LOOPNZ аналогичны команде LOOP за исключением того, что по этим
командам цикл прекращается либо по нулевому значению в регистре CX, либо
по единичному значению флага ZF (нулевое состояние). См. также команды
LOOPE/LOOPZ.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |11100000|--disp--|
MOV: Пересылка данных
-----------------------
О п е р а ц и я: Пересылает один байт или одно слово между регистрами
или между регистром и памятью, а также передает непосредственное значение
в регистр или в память. Команда MOV не может передавать данные между двумя
адресами памяти (для этой цели служит команда MOVS). Существует семь типов
команды MOV.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д (семь форматов):
Регистр/память в/из регистр:
|100010dw|modregr/m|
Непосредственное значение в регистр/память:
|1100011w|mod000r/m|--data--|data если w=1|
Непосредственное значение в регистр:
|1011wreg|--data--|data если w=1|
Память в регистр AX (AL):
|1010000w|addr-low|addr-high|
Регистр AX (AL) в память:
|1010001w|addr-low|addr-high|
Регистр/память в сегментный регистр:
|10001110|mod0sgr/m| (sg - сегментный регистр)
Сегментный регистр в регистр/память:
|10001100|mod0sgr/m| (sg - сегментный регистр)
MOVS/MOVSB/MOVSW: Пересылка строки байт или строки слов
---------------------------------------------------------
О п е р а ц и я: Пересылает данные между областями памяти. Команды
MOVS(B/W) обычно используются с префиксом REP. Команда MOVSB пересылает
любое число байтов, а команда MOVSW - любое число слов. Перед выполнением
команды регистровая пара DS:SI должна адресовать источник пересылки
("откуда") а регистровая пара ES:DI - получатель пересылки ("куда"). Если
флаг DF равен нулю, то операция пересылает данные слева направо и
увеличивает регистры SI и DI. Если флаг DF равен единице то операция
пересылает данные справа налево и уменьшает регистры SI и DI.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 1010010w (без операндов).
MUL: Беззнаковое умножение
----------------------------
О п е р а ц и я: Умножает беззнаковое множимое (8 или 16 бит) на
беззнаковый множитель (8 или 16 бит). Левый единичный бит рассматривается
как бит данных, но не как знак минус для отрицательных чисел. Для
8-битового умножения множимое должно находиться в регистре AL, а множитель
возможен в регистре или в памяти, например MUL CL. Произведение получается
в регистре АХ. Для 16-битового умножения множимое должно находиться в
регистре АХ, а множитель возможен в регистре или в памяти, например MUL
ВХ. Произведение получается в регистровой паре DX:AX. См. также команду
IMUL.
Ф л а г и: Команда воздействует на флаги CF и OF (флаги AF, PF, SF и
ZF не определены).
О б ъ е к т н ы й к о д: |1111011w|mod100r/m|
NEG: Изменение знака числа
----------------------------
О п е р а ц и я: Меняет двоичное значение из положительного в
отрицательное и из отрицательного в положительное. Команда NEG вычисляет
двоичное дополнение от указанного операнда: вычитает операнд из нуля и
прибавляет единицу. Операндом может быть байт или слово в регистре или в
памяти. См. также команду NOT. Флаги: Команда воздействует на флаги AF,
CF, OF, PF, SF и ZF.
О б ъ е к т н ы й к о д: |1111011w|mod011r/m|
NOP: Нет операции
-------------------
О п е р а ц и я: Применяется для удаления или вставки машинных кодов
или для задержки выполнения программы. Команда NOP выполняет операцию XCHG
АХ,АХ, которая ничего не меняет.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 10010000 (без операндов)
NOT: Логическое НЕТ
---------------------
О п е р а ц и я: Меняет нулевые биты на единичные и наоборот.
Операндом может быть байт или слово в регистре или в памяти. См. также
команду NEG.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |1111011w|mod010r/m|
OR: Логическое ИЛИ
--------------------
О п е р а ц и я: Выполняет поразрядную дизъюнкцию (ИЛИ) над битами
двух операндов. Операндами являются байты или слова в регистрах или в
памяти, второй операнд может иметь непосредственное значение. Команда OR
обрабатывает операнды побитово. Если любой из проверяемых бит равен
единице, то бит в операнде 1 становится равным единице, в противном случае
бит в операнде 1 не изменяется. См. также команды AND и XOR.
Ф л а г и: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF
неопределен).
О б ъ е к т н ы й к о д (три формата):
Регистр/память с регистром:
|000010dw|modregr/m|
Непосредственное с аккумулятором:
|0000110w|--data--|data если w=1|
Непосредственное с регистром/памятью:
|1000000w|mod001r/m|--data--|data если w=1|
OUT: Вывод байта или слова в порт
-----------------------------------
О п е р а ц и я: Передает в выводной порт байт из регистра AL или
слово из регистра AХ. Порт кодируется как фиксированный числовой операнд
(OUT порт#,АХ) или как переменная в регистре DX (OUT DX.AX). Процессоры