мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
asm:lesson6 [20/10/2010 21:08] – arabusov | asm:lesson6 [21/10/2010 21:30] (текущий) – arabusov | ||
---|---|---|---|
Строка 7: | Строка 7: | ||
байт, | байт, | ||
содержать непосредственное значение или константу, | содержать непосредственное значение или константу, | ||
- | Другим | + | Другим |
- | ственное | + | |
команде, | команде, | ||
Строка 81: | Строка 80: | ||
формате ASCII. | формате ASCII. | ||
Символьная | Символьная | ||
- | котоpой указывается более двух символов в нормальной последо | + | котоpой указывается более двух символов в нормальной последовательности |
- | вательности | + | |
представляет единственно | представляет единственно | ||
символьных данных. | символьных данных. | ||
Строка 126: | Строка 124: | ||
помнить, | помнить, | ||
как DB ' | как DB ' | ||
- | 3132, а числовая константа, | + | 3132, а числовая константа, |
- | ляет двоичное число и генерирует шест. 0C. | + | |
==== Директива опеделения байта ==== | ==== Директива опеделения байта ==== | ||
Из различных | Из различных | ||
Строка 138: | Строка 135: | ||
байте это 7F, если подразумевается, | байте это 7F, если подразумевается, | ||
- | + | ==== Директива определения слова | |
- | ДИРЕКТИВА ОПРЕДЕЛЕНИЯ СЛОВА | + | |
Директива DW определяет | Директива DW определяет | ||
одно слово (два байта). Символьное выражение в DW ограничено | одно слово (два байта). Символьное выражение в DW ограничено | ||
Строка 146: | Строка 142: | ||
определения символьных строк директива DW имеет ограниченное | определения символьных строк директива DW имеет ограниченное | ||
применение. | применение. | ||
- | Числовое выражение в DW может содержать | + | Числовое выражение в DW может содержать |
двухбайтовых | двухбайтовых | ||
шест. | шест. | ||
Строка 152: | Строка 148: | ||
представляют отрицательные значения. В десятичном исчислении | представляют отрицательные значения. В десятичном исчислении | ||
эти пределы выражаются числами +32767 и -32768. | эти пределы выражаются числами +32767 и -32768. | ||
- | В примере на рис. | + | Для форматов директив DW, DD и DQ ассемблер преобразует |
- | числовые константы. | + | |
- | случае смещение | + | |
- | объектный код 0021 (R обозначает перемещаемость). Проверяя | + | |
- | выше по рисунку, | + | |
- | действительно 0021. | + | |
- | | + | |
- | Заметим, | + | |
- | в oдно слово (два байта). | + | |
- | Для форматов директив DW, DD и DQ ассемблер преобразует | + | |
константы | константы | ||
обратной | обратной | ||
Строка 167: | Строка 154: | ||
объектном коде как 3930. | объектном коде как 3930. | ||
- | ДИРЕКТИВА ОПРЕДЕЛЕНИЯ ДВОЙНОГО СЛОВА (DD) | + | ==== Директива определения двойного слова (DD) ==== |
- | ------------------------------------------------------------ | + | Директива DD определяет |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | Ассемблер для | + | |
- | + | ||
- | + | ||
- | | + | |
два | два | ||
содержать одну или | содержать одну или | ||
Строка 185: | Строка 163: | ||
отрицательные значения. | отрицательные значения. | ||
выражаются числами +2147483647 и -2147483648. | выражаются числами +2147483647 и -2147483648. | ||
- | В примере на рис. | + | Ассемблер преобразует все числовые |
- | константу. | + | |
- | адресами, | + | |
- | FLD2DB. Поле FLD5DD определяет две числовые константы. | + | |
- | Ассемблер преобразует все числовые | + | |
DD в шест. | DD в шест. | ||
обратной | обратной | ||
значение | значение | ||
записывается в oбъектном коде как 39300000. | записывается в oбъектном коде как 39300000. | ||
- | | ||
- | символами. | ||
- | слева в четырехбайтовом | ||
- | FLD2DD в объектном коде. | ||
- | ДИРЕКТИВА ОПРЕДЕЛЕНИЯ УЧЕТВЕРЕННОГО СЛОВА (DQ) | ||
- | ------------------------------------------------------------ | ||
- | Директива DQ определяет | + | ==== Директива определения учетверённого слова (DQ) ==== |
+ | Директива DQ определяет | ||
слова (восемь байт). Числовое выражение может содержать одну | слова (восемь байт). Числовое выражение может содержать одну | ||
или | или | ||
Строка 211: | Строка 180: | ||
1152921504606846976 | 1152921504606846976 | ||
- | + | Ассемблер преобразует | |
- | В примере на рис. | + | |
- | числовые | + | |
- | станты в директиве | + | |
объектный код в обратной последовательности, | объектный код в обратной последовательности, | ||
тивах DD и DW. | тивах DD и DW. | ||
- | Обработка ассемблером | + | Обработка ассемблером |
aналогично директивам DD и DW. | aналогично директивам DD и DW. | ||
- | ДИРЕКТИВА ОПРЕДЕЛЕНИЯ ДЕСЯТИ БАЙТ | + | ==== Директива определения десяти байт |
- | ------------------------------------------------------------ | + | Директива DT определяет элементы данных, |
- | + | ||
- | Директива DT определяет элементы данных, | + | |
десять | десять | ||
- | " | + | " |
По директиве | По директиве | ||
- | зависимости | + | зависимости |
- | применения ознакомьтесь с руководством по вашему aссемблера. | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | Ассемблер для IBM PC. Глава 5 109 | + | |
- | + | ||
- | + | ||
- | | + | |
- | неопределенного элемента и для двухсимвольной константы. | + | |
- | | + | |
- | асcемблер не выдает сообщений об ошибках, | + | |
- | появится | + | |
- | компановщик | + | |
- | (Обнаружена | + | |
- | можно | + | |
- | кода, как показано на рис. 5.2. | + | |
- | | + | |
- | данные, | + | |
- | + | ||
- | НЕПОСРЕДСТВЕННЫЕ ОПЕРАНДЫ | + | |
- | ------------------------------------------------------------ | + | |
- | На рис. | + | ==== Непосредственные операнды ==== |
- | непосредственных операндов. Команда | + | Команда |
MOV | MOV | ||
Строка 262: | Строка 204: | ||
Многие команды имеют два операнда: | Многие команды имеют два операнда: | ||
или адрес памяти, | или адрес памяти, | ||
- | + | Использование | |
- | ------------------------------------------------------------ | + | |
- | ------------------------------------------------------------ | + | |
- | | + | |
- | + | ||
- | Использование | + | |
но, чем oпределение числовой константы в сегменте | но, чем oпределение числовой константы в сегменте | ||
организация cсылки на нее в операнде команды MOV, например, | организация cсылки на нее в операнде команды MOV, например, | ||
Строка 274: | Строка 211: | ||
Сегмент кодов: | Сегмент кодов: | ||
- | Длина непосредственных операндов | + | ==== Длина непосредственных операндов |
- | Длина непосредственной константы зависит от длины первого | + | Длина непосредственной константы зависит от длины первого |
операнда. | операнда. | ||
является двухбайтовым, | является двухбайтовым, | ||
Строка 290: | Строка 227: | ||
байт, 0025 и записывает объектный код в виде 2500. | байт, 0025 и записывает объектный код в виде 2500. | ||
+ | ==== Непосредственные форматы ==== | ||
- | + | Непосредственная константа | |
- | Ассемблер для IBM PC. Глава 5 110 | + | |
- | + | ||
- | + | ||
- | + | ||
- | | + | |
- | + | ||
- | Непосредственная константа | + | |
напpимер, | напpимер, | ||
ассемблер | ассемблер | ||
например, | например, | ||
- | Ниже | + | Ниже |
непосредственные операнды: | непосредственные операнды: | ||
| | ||
| | ||
- | | + | |
- | | + | |
- | | + | ==== Директива EQU ==== |
- | непосредственными | + | Директива EQU не определяет элемент данных, |
- | объяснены | + | |
- | логические | + | |
- | предназначены | + | |
- | стека и инициализация сегментных регистров. | + | |
- | | + | |
- | использовать цикл | + | |
- | гл.11). | + | |
- | + | ||
- | ------------------------------------------------------------ | + | |
- | ------------------------------------------------------------ | + | |
- | | + | |
- | + | ||
- | ДИРЕКТИВА | + | |
- | ------------------------------------------------------------ | + | |
- | + | ||
- | Директива EQU не определяет элемент данных, | + | |
значение, | значение, | ||
других | других | ||
Строка 344: | Строка 259: | ||
FIELDA | FIELDA | ||
- | Имя, связанное с некоторым значением с помощью директивы | + | Имя, связанное с некоторым значением с помощью директивы |
EQU, может использоваться в командах, | EQU, может использоваться в командах, | ||
- | | + | |
+ | ... | ||
+ | MOV CX,COUNTR | ||
- | Ассемблер для IBM PC. Глава 5 111 | + | Ассемблер заменяет имя COUNTR |
- | + | ||
- | + | ||
- | ... | + | |
- | MOV CX,COUNTR | + | |
- | + | ||
- | Ассемблер заменяет имя COUNTR | + | |
05, cоздавая операнд с непосредственным значением, | 05, cоздавая операнд с непосредственным значением, | ||
бы было закодировано | бы было закодировано | ||
Строка 363: | Строка 274: | ||
MOV CX,05 ; | MOV CX,05 ; | ||
- | Здесь приемущество директивы EQU заключается | + | Здесь приемущество директивы EQU заключается |
многие команды могут использовать | многие команды могут использовать | ||
имени | имени | ||
Строка 379: | Строка 290: | ||
пример | пример | ||
слова MPY вместо обычного мнемокода MUL. | слова MPY вместо обычного мнемокода MUL. | ||
+ | |||
+ | ===== Работа с файлами в MS-DOS ===== | ||
+ | |||
+ | ==== Функции типа дескриптора ==== | ||
+ | |||
+ | В MS-DOS начиная со второй версии файловая система стала иерархической, | ||
+ | C: | ||
+ | Специфика MS-DOS такова, | ||
+ | | ||
+ | преобразуется в | ||
+ | 43 3a 5c 53 59 53 54 45 4d 5c 43 4f 4d 4d 41 4e 44 2e 43 4f 4d 00 | ||
+ | Для работы с файлом с помощью функции типа дескриптора, | ||
+ | jc error | ||
+ | где error - указатель на начало обработчика. | ||
+ | Теперь рассмотрим некоторые функции типа дескриптора, | ||
+ | === Создание файла === | ||
+ | По заданному в коде ASCIIZ пути создаёт новый файл на указанном или текущем диске или на указанном или текущем каталоге. Если указанный файл существует, | ||
+ | При вызове: | ||
+ | * AH = 3cH | ||
+ | * CX = атрибут (в нашем случае всегда 0) | ||
+ | * DS:DX - адрес строки, | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | * AX = дескриптор | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки | ||
+ | === Открытие файла === | ||
+ | По заданному в коде ASCIIZ пути открывает файл на указанном или текущем диске или на указанном или текущем каталоге. Возвращается дескриптор. | ||
+ | При вызове: | ||
+ | * AH = 3dH | ||
+ | * AL = режим доступа | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | * DS:DX - адрес строки, | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | * AX = дескриптор | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки | ||
+ | === Закрытие файла === | ||
+ | При вызове: | ||
+ | * AH = 3Eh | ||
+ | * BX = дескриптор | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки | ||
+ | === Чтение файла === | ||
+ | При вызове: | ||
+ | * AH = 3Fh | ||
+ | * BX = дескриптор | ||
+ | * CX = число байт для чтения | ||
+ | * DS:DX = адрес буфера | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | * AX = число переданных байтов (может быть меньше CX!) | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки | ||
+ | === Запись в файл === | ||
+ | При вызове: | ||
+ | * AH = 40h | ||
+ | * BX = дескриптор | ||
+ | * CX = число байт для вывода записи | ||
+ | * DS:DX = адрес буфера | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | * AX = число переданных байтов (может быть меньше CX!) | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки |