Жанр: Учеба
Ассемблер и программирование для IBM PC
...ду ADC.
Ф л а г и: Команда воздействует на флаги AF, CF, OF, PF. SF и ZF.
О б ъ е к т н ы й к о д (три формата):
Регистр из регистра или памяти: |000110dw|modregr/m|
Непосредственное значение из регистра AX (AL):
|0001110w|--data--|data, если w=1|
Непосредственное значение из регистра или памяти:
|100000sw|mod011r/m|--data--|data, если sw=01|
SCAS/SCASB/SCASW: Поиск байта или слова в строке
--------------------------------------------------
О п е р а ц и я: Выполняет поиск определенного байта или слова в
строке. Для команды SCASB необходимое значение загружается в регистр AL, а
для команды SCASW - в регистр AX. Регистровая пара ES:DI указывает на
строку в памяти, которая должна быть сканирована. Данные команды обычно
используются с префиксом REPE или REPNE. Если флаг DF равен нулю, то
операция сканирует память слева направо и увеличивает регистр DI. Если
флаг DF равен единице, то операция сканирует память справа налево и
уменьшает регистр DI.
Ф л а г и: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
О б ъ е к т н ы й к о д: 1010111w (без операндов).
STC: Установка флага переноса
-------------------------------
О п е р а ц и я: Устанавливает значение флага CF в 1. См. также
команду STD.
Ф л а г и: Команда воздействует на флаг CF (устанавливается в 1).
О б ъ е к т н ы й к о д: 11111001 (без операндов).
STD: Установка флага направления
----------------------------------
О п е р а ц и я: Устанавливает значение флага направления в 1. В
результате строковые операции, такие, как MOVS или CMPS, обрабатывают
данные справа налево. См. также CLD.
Ф л а г и: Команда воздействует на флаг DF (устанавливается в 1).
О б ъ е к т н ы й к о д: 11111101 (без операндов).
STI: Установка флага прерывания
---------------------------------
О п е р а ц и я: Разрешает маскируемые внешние прерывания после
выполнения следующей команды и устанавливает значения флага прерывания 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
---
Умножить на 16 х16
----
Прибавить следующую цифру, B (11) +11
----
Умножить на 16 х16
-----
Прибавить следующую цифру, 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, получим
из остатков все необходимые шестнадцатеричные цифры.
Частное Остаток Шест.
42936 / 16 2683 8 8 (младшая цифра)
2683 / 16 167 11 B
167 / 16 10 7 7
10 / 16 0 10 A (старшая цифра)
Для преобразования чисел из десятичного формата в шестнадцатеричный
можно также воспользоваться таблицей B-1. Для десятичного числа 42936
необходимо найти в таблице число равное или ближайшее меньшее исходному, и
записать соответствующую шестнадцатеричную цифру и ее позицию. Затем
следует вычесть найденное десятичное число из 42936 и с полученной
разностью проделать проделать ту же операцию:
Дес. Шест.
Исходное десятичное число 42936
Вычесть ближайшее меньшее 40960 A000
-----
Разность 1976
Вычесть ближайшее меньшее 1792 700
----
Разность 184
Вычесть ближайшее меньшее 176 B0
---
Разность 8 8
----
Результирующее шест. число A7B8
Таблица B-1. Шестнадцатерично-десятичные преобразования
-------------T-----------T----------T--------T-------T------T-----T-----¬
¦Ш ¦Ш ¦Ш ¦Ш ¦Ш ¦Ш ¦Ш ¦Ш ¦
¦Е ¦Е ¦Е ¦Е ¦Е ¦Е ¦Е ¦Е ¦
¦С ¦С ¦С ¦С ¦С ¦С ¦С ¦С ¦
¦Т ДЕС ¦Т ДЕС ¦Т ДЕС ¦Т ДЕС ¦Т ДЕС¦Т ДЕС¦Т ДЕС¦Т ДЕС¦
+------------+-----------+----------+--------+-------+------+-----+-----+
¦0 0¦0 0¦0 0¦0 0¦0 0¦0 0¦0 0¦0 0¦
¦1 268435456¦1 16777216¦1 1048576¦1 65536¦1 4096¦1 256¦1 16¦1 1¦
¦2 536870912¦2 33554432¦2 2097152¦2 131072¦2 8192¦2 512¦2 32¦2 2¦
¦3 805306368¦3 50331648¦3 3145728¦3 196608¦3 12288¦3 768¦3 48¦3 3¦
¦4 1073741824¦4 67108864¦4 4194304¦4 262144¦4 16384¦4 1024¦4 64¦4 4¦
¦5 1342177280¦5 83886080¦5 5242880¦5 327680¦5 20480¦5 1280¦5 80¦5 5¦
¦6 1610612736¦6 100663296¦6 6291456¦6 393216¦6 24576¦6 1536¦6 96¦6 6¦
¦7 1879048192¦7 117440512¦7 7340032¦7 458752¦7 28672¦7 1792¦7 112¦7 7¦
¦8 2147483648¦8 134217728¦8 8388608¦8 524288¦8 32768¦8 2048¦8 128¦8 8¦
¦9 2415919104¦9 150994944¦9 9437184¦9 589824¦9 36864¦9 2304¦9 144¦9 9¦
¦A 2684354560¦A 167772160¦A 10485760¦A 655360¦A 40960¦A 2560¦A 160¦A 10¦
¦B 2952790016¦B 184549376¦B 11534336¦B 720896¦B 45056¦B 2816¦B 176¦B 11¦
¦C 3221225472¦C 201326592¦C 12582912¦C 786432¦C 49152¦C 3072¦C 192¦C 12¦
¦D 3489660928¦D 218103808¦D 13631488¦D 851968¦D 53248¦D 3328¦D 208¦D 13¦
¦E 3758096384¦E 234881024¦E 14680064¦E 917504¦E 57344¦E 3584¦E 224¦E 14¦
¦F 4026531840¦F 251658240¦F 15728640¦F 983040¦F 61440¦F 3840¦F 240¦F 15¦
+------------+-----------+----------+--------+-------+------+-----+-----+
¦ 8 ¦ 7 ¦ 6 ¦ 5 ¦ 4 ¦ 3 ¦ 2 ¦ 1 ¦
L------------+-----------+----------+--------+-------+------+-----+------
Шестнадцатиричные позиции
ПРИЛОЖЕНИЕ 3: Зарезервированные слова
________________________________________________________________
Большинство из следующих зарезервированных слов при использовании их
для определении элементов данных могут привести к ошибкам ассемблирования
(в ряде случаев - к весьма грубым):
Имена регистров
-----------------
AH BH CH DH CS SS BP
AL BL CL DL DS SI SP
AX BX CX DX ES DI
Мнемокоды
-----------
AAA DIV JLE JS OR SBB
AAD ESC JMP JZ OUT SCAS
AAM HLT JNA LAHF POP SHL
AAS IDIV JNAE LDS POPF SHR
ADC IMUL JNB LEA PUSH STC
ADD IN JNBE LES PUSHF STD
AND INC JNE LOCK RCL STI
CALL INT JNG LODS RCR STOS
CBW INTO JNGE LOOP REP SUB
CLC IRET JNL LOOPE REPE TEST
CLD JA JNLE LOOPNE REPNE WAIT
CLI JAE JNO LOOPNZ REPNZ XCHG
CMC JB JNP LOOPZ REPZ XLAT
CMP JBE JNS MOV RET XOR
CMPS JCXZ JNZ MOVS ROL
CWD JE JO MUL ROR
DAA JG JP NEG SAHF
DAS JGE JPE NOP SAL
DEC JL JPO NOT SAR
Директивы ассемблера
----------------------
ASSUME END EXTRN IFNB LOCAL PURGE
COMMENT ENDIF GROUP IFNDEF MACRO RECORD
DB ENDM IF IF1 NAME REPT
DD ENDP IFB IF2 ORG SEGMENT
DQ ENDS IFDEF INCLUDE OUT STRUC
DT EQU IFDIF IRP PAGE SUBTTL
DW EVEN IFE IRPC PROC TITLE
ELSE EXITM IFIDN LABEL PUBLIC
Прочие элементы языка
-----------------------
BYTE FAR LENGTH MOD PRT THIS
COMMENT GE LINE NE SEG TYPE
CON GT LT NEAR SHORT WIDTH
DUP HIGH LOW NOTHING SIZE WORD
EQ LE MASK OFFSET STACK
ПРИЛОЖЕНИЕ 4: РЕЖИМЫ АССЕМБЛИРОВАНИЯ И КОМПОНОВКИ
________________________________________________________________
Ассемблирование программы
---------------------------
На дискете с ассемблерным пакетом имеются две версии ассемблера:
ASM.EXE - сокращенная версия, в которой отсутствуют некоторые возможности,
и MASM.EXE - полная версия, имеющая все возможности и являющаяся
предпочтительной. Для ассемблирования вставьте ассемблерную дискету в
дисковод А, а дискету с исходной программой - в дисковод В. Кто имеет
винчестер или RAM-диск (виртуальный диск в памяти), могут в следующих
примерах заменить соответствующие номера дисководов. Введите команды MASM
(или ASM), что приведет к загрузке программы ассемблера с диска в память.
На экране появится:
source filename [.ASM]:
object filename [filename.OBJ]:
source listing [NUL.LST]:
cross-reference [NUL.CRF]:
Курсор при этом расположится в конце первой строки, где необходимо
указать имя файла. Введите номер дисковода (если он не определен по
умолчанию) и имя файла. Не следует набирать тип файла ASM - ассемблер
подразумевает это. Во втором запросе предполагается аналогичное имя файла
(но можно его заменить). Если необходимо, введите номер дисковода. Третий
запрос предполагает, что листинг ассемблирования программы не требуется.
Последний запрос предполагает, что листинг перекрестных ссылок не
требуется. Для получения листинга на дисководе В введите В:.
Если вы хотите оставить значения по умолчанию, то в трех последних
запросах просто нажмите Return. Ниже приведен пример запросов и ответов, в
результате которых ассемблер должен создать OBJ-, LST- и CRF-файлы на
дисководе В:
source filename [.ASM]:B:ASMPROG [Return]
object filename [filename.OBJ]:B: [Return]
source listing [NUL.LST]:B: [Return]
cross-reference [NUL.CRF]:B: [Return]
Альтернативный вариант вызова ассемблера:
MASM B:name.ASM,B:name.OBJ,B:name.LST,B:name.CRF
В следующей команде используются значения по умолчанию:
MASM B:filename,B:,B:,В:;
- первый параметр B:filename идентифицирует исходную программу,
которая должна быть ассемблирована;
- второй параметр В: указывает ассемблеру на необходимость
записать объектный модуль на дисковод В под именем filename.OBJ;
- третий параметр В: указывает ассемблеру на необходимость
записать листинг ассемблирования на дисковод В под именем
filename.LST;
- четвертый параметр В: приводит к генерации файла перекрестных
ссылок под именем filename.CRF;
- Точка с запятой в конце команды указывает ассемблеру на
необходимость игнорировать любые последующие параметры. Хотя в
приведенном примере таких параметров нет, кодирование точки с запятой
является хорошим правилом для других вариантов команды.
При наличии ошибок ассемблирования программа ASM выдает только коды
ошибок, которые объяснены в руководстве по Ассемблеру, в то время как
программа MASM выдает и коды ошибок, и пояснения к ним. Всего имеется
около 100 сообщений об ошибках.
Режимы ассемблирования включают следующие:
MASM /A организовать исходные сегменты в алфавитном порядке;
MASM /D генерировать LST-файл в обоих проходах ассемблирования;
MASM /E ассемблировать команды для сопроцессора 8087 и генерировать
связи для языка ФОРТРАН и пакета эмуляции языка ПАСКАЛЬ;
MASM /N отменить генерацию таблицы идентификаторов;
MASM /R ассемблировать команды для сопроцессора 8087 (аналогично /E);
MASM /S сохранить исходные сегменты в оригинальной последовательности.
Файл перекрестных ссылок
--------------------------
Генерируемый в ходе ассемблирования CRF-файл может использоваться для
создания листинга перекрестных ссылок на метки, идентификаторы и
переменные в программе. Для получения CRF-фала необходимо на четвертый
запрос ассемблера ответить, например. В:, полагая, что файл должен быть
создан на диске В:
cross-reference [NUL.CRF]:B: [Return]
Для преобразования полученного CRF-файла в удобно отсортированную
таблицу перекрестных ссылок используется программа CREF, имеющаяся на
ассемблерном диске. Введите команду CREF; на экране появится два запроса:
Cref filename [.CRF]:
List filename [cross-ref.REF]:
На первый запрос введите имя CRF-файла, например B:ASMPROG. На второй
запрос можно ввести только номер дисковода и получить имя по умолчанию.
Такой выбор приведет к преобразованию CRF-файла в файл перекрестных ссылок
по имени filename.REF на дисководе В. Можно также кодировать всю команду в
одной строке, например:
CREF В: filename. CRF, CON иди CREF B:filename.CRF,B:
В первом примере файл перекрестных ссылок выводится на экран. Второй
пример записывает файл по имени filename.REF на диск В.
Компоновка программ
---------------------
Для компоновки ЕХЕ-программы вставьте дискету DOS в дисковод А, а
дискету с программой - в дисковод В. Те, кто имеют винчестер или RAM-диск
(виртуальный диск в памяти), могут в следующих примерах заменить
соответствующие номера дисководов. Простейший способ запуска компоновщика
представляет ввод команды LINK, что приводит к загрузке компоновщика с
диска в память. На экране появятся следующие запросы:
Object Modules [.OBJ]:
Run File [d:filename.ЕХЕ]:
List File [NUL.MAP]:
Libraries [.LIB]:
Курсор при этом расположится в конце первой строки, где необходимо
указать имя файла. Введите номер дисковода (если он не определен по
умолчанию) и имя файла. Не следует набирать тип файла OBJ - компоновщик
подразумевает это. Во втором запросе предполагается аналогичное имя файла
(но можно его заменить). Если необходимо, введите номер дисковода. Третий
запрос предполагает, что листинг компоновки программы не требуется.
Последний запрос имеет отношение к библиотечным средствам DOS.
Если вы хотите оставить значения по умолчанию, то в трех последних
запросах просто нажмите Return. Ниже приведен пример запросов и ответов, в
результате которых компоновщик должен создать файлы ЕХЕ и CON:
Object Modules [.OBJ]:B:ASMPROG [return]
Run File [d:filename.ЕХЕ]:В: [return]
List File [NUL.MAP]:CON [return]
Libraries [.LIB]: [return]
Ответ CON приводит к выводу карты компоновки на экран для проверки на
наличие сообщений об ошибках. Команду LINK можно сформировать также
следующим образом:
LINK B:ASMPROG,В:,CON
Описание остальных режимов компоновщика LINK можно найти в
руководстве no DOS.
Программа ЕХЕ2ВIN
-------------------
Программа EXE2BIN.COM в операционной системе DOS используется
...Поділитися у соцмережах