---------------------------------
О п е р а ц и я: Разрешает маскируемые внешние прерывания после
выполнения следующей команды и устанавливает значения флага прерывания IF
в 1. См. также команду CLI.
Ф л а г и: Команда воздействует на флаг IF (устанавливается в 1).
О б ъ е к т н ы й к о д: 11111011 (без операндов).
STOS/STOSB/STOSW: Запись однобайтовой или двухбайтовой строки
---------------------------------------------------------------
О п е р а ц и я: Сохраняет байт или слово в памяти. При использовании
префикса REP операция дублирует значение байта или слова определенное
число раз, что делает ее удобной для очистки областей памяти. Для команды
STOSB необходимый байт загружается в регистр AL, а для команды STOSW
необходимое слово загружается в регистр АХ. Регистровая пара ES:DI
указывает область памяти, куда должен быть записан байт или слово. Если
флаг DF равен нулю, то операция записывает в память слева направо и
увеличивает регистр DI. Если флаг DF равен единице, то операция записывает
в память справа налево и уменьшает значение в регистре DI.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 1010101w (без операндов).
SUB: Вычитание двоичных чисел
-------------------------------
О п е р а ц и я: Вычитает байт или слово в регистре, памяти или
непосредственное значение из регистра; или вычитает байт или слово в
регистре или непосредственное значение из памяти. См. также команду SBB.
Ф л а г и: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
О б ъ е к т н ы й к о д (три формата):
Регистр из регистра или памяти:
|001010dw|modregr/m|
Непосредственное значение из регистра АХ (AL):
|0010110w|--data--|data, если w=1|
Непосредственное значение из регистра или памяти:
|100000sw|mod101r/m|--data--|data, если sw=01|
TEST: Проверка битов
----------------------
О п е р а ц и я: Команда выполняет проверку байта или слова на
определенную битовую комбинацию. Команда TEST действует аналогично команде
AND, но не изменяет результирующий операнд. Операнды могут иметь
однобайтовые или двухбайтовые значения. Второй операнд может иметь
непосредственное значение. Команда выставляет флаги в соответствии с
логической функцией И.
Ф л а г и: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF
не определен).
О б ъ е к т н ы й к о д (три формата):
Регистр или память И регистр:
|1000010w|modregr/m|
Непосредственное значение И регистр АХ (AL):
|1010100w|--data--|data, если w=1|
Непосредственное значение И регистр или память:
y1111011w|mod000r/m|--data--|data, если w=1|
WAIT: Установка процессора в состояние ожидания
-------------------------------------------------
О п е р а ц и я: Позволяет процессору оставаться в состоянии
ожидания, пока не произойдет внешнее прерывание. Данная операция
необходима для обеспечения синхронизации процессора с внешним устройством
или с сопроцессором. Процессор ожидает, пока внешнее устройство (или
сопроцессор) не закончит выполнение операции и на входной линии TEST не
появится сигнал (активный уровень).
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 10011011
XCHG: Перестановка
--------------------
О п е р а ц и я: Переставляет два байта или два слова между двумя
регистрами (например, XCHG AH,BL) или между регистром и памятью (например,
XCHG CX,word).
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д (два формата):
Регистр и аккумулятор: |10010reg|
Регистр/память и регистр: |1000011w|modregr/m|
XLAT: Перекодировка
---------------------
О п е р а ц и я: Транслирует байты в другой формат, например при
переводе нижнего регистра в верхний или при перекодировке ASCII-кода в
EBCDIC-код. Для выполнения данной команды необходимо определить таблицу
преобразования байт и загрузить ее адрес в регистр ВХ. Регистр AL должен
содержать байт, который будет преобразован с помощью команды XLAT.
Операция использует значение в регистре AL как смещение в таблице,
выбирает байт по этому смещению и помещает его в регистр AL.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 11010111 (без операндов).
XOR: Исключающее ИЛИ
----------------------
О п е р а ц и я: Выполняет логическую операцию исключающего ИЛИ над
битами двух операндов. Операндами являются байты или слова в регистрах или
в памяти, второй операнд может иметь непосредственное значение. Команда
XOR обрабатывает операнды побитово. Если проверяемые биты одинаковы, то
команда XOR устанавливает бит в операнде 1 равным нулю, если биты
различны, то бит в операнде 1 устанавливается равным единице. См. также
команды AND и OR.
Ф л а г и: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF
неопределен).
О б ъ е к т н ы й к о д (три формата):
Регистр/память с регистром:
|001100dw|modregr/m|
Непосредственное с регистром AX (AL):
|0011010w|--data--|data если w=1|
Непосредственное с регистром/памятью:
|1000000w|mod110r/m|--data--|data если w=1|
ПРИЛОЖЕНИЯ
__________________________________________________________________________
ПРИЛОЖЕНИЕ 1: Коды ASCII-символов
________________________________________________________________
Ниже представлены первые 128 символов ASCII-кода. В руководстве по
языку BASIC приведены остальные 128 символов. На помним, что шест.20
представляет стандартный символ пробела.
Таблица A-1. Набор ASCII символов
__________________________________________________________________________
Дес Шест Симв Дес Шест Симв Дес Шест Симв Дес Шест Симв
000 00h Нуль 032 20h sp 064 40h @ 096 60h `
001 01h Начало заголовка 033 21h ! 065 41h A 097 61h a
002 02h Начало текста 034 22h " 066 42h B 098 62h b
003 03h Конец текста 035 23h # 067 43h C 099 63h c
004 04h Конец передачи 036 24h $ 068 44h D 100 64h d
005 05h КТМ 037 25h % 069 45h E 101 65h e
006 06h Да 038 26h & 070 46h F 102 66h f
007 07h Звонок 039 27h ' 071 47h G 103 67h g
008 08h Возврат на шаг 040 28h ( 072 48h H 104 68h h
009 09h Гориз.табуляция 041 29h ) 073 49h I 105 69h i
010 0Ah Перевод строки 042 2Ah * 074 4Ah J 106 6Ah j
011 0Bh Верт.табуляция 043 2Bh + 075 4Bh K 107 6Bh k
012 0Ch Перевод страницы 044 2Ch , 076 4Ch L 108 6Ch l
013 0Dh Возврат каретки 045 2Dh - 077 4Dh M 109 6Dh m
014 0Eh Shift out 046 2Eh . 078 4Eh N 110 6Eh n
015 0Fh Shift in 047 2Fh / 079 4Fh O 111 6Fh o
016 10h Data line esc 048 30h 0 080 50h P 112 70h p
017 11h Управление 1 049 31h 1 081 51h Q 113 71h q
018 12h Управление 2 050 32h 2 082 52h R 114 72h r
019 13h Управление 3 051 33h 3 083 53h S 115 73h s
020 14h Управление 4 052 34h 4 084 54h T 116 74h t
021 15h Нет 053 35h 5 085 55h U 117 75h u
022 16h Синхронизация 054 36h 6 086 56h V 118 76h v
023 17h Конец блока 055 37h 7 087 57h W 119 77h w
024 18h Анулирование 056 38h 8 088 58h X 120 78h x
025 19h End of medium 057 39h 9 089 59h Y 121 79h y
026 1Ah Замена 058 3Ah : 090 5Ah Z 122 7Ah z
027 1Bh Escape 059 3Bh ; 091 5Bh [ 123 7Bh {
028 1Ch Раздел.файла 060 3Ch < 092 5Ch \ 124 7Ch |
029 1Dh Раздел.группы 061 3Dh = 093 5Dh 125 7Dh }
030 1Eh Раздел.записи 062 3Eh > 094 5Eh ^ 126 7Eh ~
031 1Fh Раздел.единицы 063 3Fh ? 095 5Fh _ 127 7Fh Забой
ПРИЛОЖЕНИЕ 2: Шестнадцатерично-десятичные преобразования
________________________________________________________________
В данном приложении представлены приемы преобразования между
шестнадцатеричным и десятичным форматами. В первом разделе показан пример
преобразования шест. A7B8 в десятичное 42936, а во втором - 42936 обратно
в шест. A7B8.
Преобразование шестнадцатеричного формата в десятичный
--------------------------------------------------------
Для перевода шест. A7B8 в десятичное число необходимо
последовательно, начиная с самой левой шест. цифры (A), умножать на 16 и
складывать со следующей цифрой. Так как операции выполняются в десятичном
формате, то шест. числа от A до F необходимо преобразовать в десятичные от
10 до 15.
Первая цифра: A (10) 10
Умножить на 16 х16
---
160
Прибавить следующую цифру, 7 +7
---
167
Умножить на 16 х16
----
2672
Прибавить следующую цифру, B (11) +11
----
2683
Умножить на 16 х16
-----
42928
Прибавить следующую цифру, 8 +8
-----
Десятичное значение 42936
Можно использовать также таблицу преобразования. Для шест. числа A7B8
представим правую цифру (8) как позицию 1, следующую влево цифру (B) как
позицию 2, следующую цифру (7) как позицию 3 и самую левую цифру (A) как
позицию 4. Из таблицы B-1 выберем значения для каждой шест. цифры:
Для позиции 1 (8), столбец 1 8
Для позиции 1 (8), столбец 1 176
Для позиции 1 (8), столбец 1 1792
Для позиции 1 (8), столбец 1 40960
-----
Десятичное значение 42936
Преобразование десятичного формата в шестнадцатеричный
---------------------------------------------------------
Для преобразования десятичного числа 42936 в шестнадцатеричный формат
необходимо сначала исходное число 42936 разделить на 16; число,
получившееся в остатке, (6) является младшей шестнадцатеричной цифрой.
Затем полученное частное необходимо снова разделить на 16 и полученный
остаток (11 или B) дает следующую влево шестнадцатеричную цифру. Продолжая
таким образом деления до тех пор, пока в частном не получится 0, получим
из остатков все необходимые шестнадцатеричные цифры.