мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| 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 = код ошибки | ||