TASM MyProg. TASM MyProg, Prog. TASM /l /w0 MyProg, Prog, Prog. Использование компоновщика Turbo Linker. II. Лабораторный практикум
TASM MyProg - ассемблирование файла MyProg. ASM и генерация OBJ-модуля MyProg. OBJ. TASM MyProg, Prog - ассемблирование файла MyProg. ASM и генерация OBJ-модуля Prog. OBJ. TASM /l /w0 MyProg, Prog, Prog - ассемблирование файла MyProg. ASM c отключенными предупреждениями, генерация OBJ-модуля Prog. OBJ и файла листинга Prog. LST.
Использование компоновщика Turbo Linker Формат вызова компоновщика Turbo Linker следующий: TLINK [ключи] < имя_OBJ_модуля> [, < имя_исполнительного_модуля> ] Для компоновки программы типа COM нужно использовать ключ /t. Для компоновки программы типа EXE дополнительных ключей использовать не нужно. В случае успешной компоновки генерируется исполнительный файл с именем, совпадающим с именем OBJ-модуля и расширением COM или EXE – в зависимости от используемых ключей. В случае ошибки выдается текстовое сообщение, и исполнительный файл не генерируется. Причинами ошибки может являться попытка скомпоновать EXE программу, как COM. Компоновка COM программы как EXE ошибок и предупреждений не вызывает, но программа может работать неверно из-за отсутствия инициализации сегментных регистров. Наиболее часто выдаваемым предупреждением является сообщение “Warning: No Stack”, которое свидетельствует об отсутствии отдельного стекового сегмента. В таблице 2 приведены часто используемые ключи компоновщика Turbo Linker и их назначение. Таблица 2 Ключи компоновщика Turbo Linker
Примеры использования компоновщика Turbo Linker: TLINK /t MyProg - компоновка OBJ-модуля MyProg. OBJ как COM программы. TLINK MyProg, Prog - компоновка OBJ-модуля MyProg. OBJ как EXE программы и генерация исполнительного файла Prog. EXE.
II. Лабораторный практикум Лабораторная работа № 1 Арифметические команды языка ассемблер Цель работы: Изучить команду пересылки данных MOV МП 8086. Изучить арифметические команды МП 8086. Научиться использовать транслятор Turbo Assembler и компоновщик Turbo Linker. Ознакомиться с отладчиком Turbo Debugger. Команды пересылки данных Команды пересылки данных выполняют операции обмена данными между регистрами и ячейками памяти. Эти команды являются одноадресными, т. е. в этих командах указывается адрес максимум одной ячейки памяти. Выполнять пересылки типа память-память с помощью этих команд нельзя. Команда MOV пересылает байт или слово из ячеек памяти или регистров. Формат команды: MOV < приемник>, < источник> Байт или слово считывается из операнда-источника и записывается в операнд-приемник. Операндами команды могут быть регистры или адресные выражения с прямой и косвенной способами адресации. Операндами команды не могут быть два адресных выражения, но могут быть два регистра. Сегментный регистр CS не может быть операндом-приемником. При использовании в качестве операнда-приемника сегментных регистров DS, SS или ES, операнд-источник не может быть непосредственным значением. Оба операнда должны иметь одинаковый размер, например байт или слово. В качестве операнда-источника может использоваться непосредственное значение. В этом случае при использовании непосредственных значений меньших 256 и в качестве операнда-приемника адресных выражений с косвенной адресацией необходимо указать тип операнда (байт или слово). Для этого используются следующие синтаксические конструкции: MOV BYTE PTR < адресное_выражение>, < значение> - пересылка байта MOV WORD PTR < адресное_выражение>, < значение> - пересылка слова
Пересылка двойных слов не входит в систему команд МП 8086. При использовании адресного выражения в качестве одного операнда и регистра в качестве другого указывать тип адресного выражения не нужно, так как тип определяет используемый регистр. В таблице 3 приведены примеры правильного и неправильного использования команды MOV. Примеры неправильного использования при трансляции вызовут сообщения об ошибках. Таблица 3 Примеры использования команды MOV
В таблице 4 показаны все возможные сочетания типов операндов для команды MOV. Строки соответствуют операнду-приемнику, а столбцы – операнду-источнику. Знаком ‘+’ обозначены сочетания операндов, для которых команда будет являться корректной. Таблица 4 Сочетания типов операндов для команды MOV
Команда XCHG аналогична команде MOV, но обменивает значениями свои операнды. Формат команды XCHG < операнд_1>, < операнд_2> Правила выбора операндов команды XLAT такие же, как и для команды MOV. Нельзя только в качестве одного из операндов указывать сегментный регистр или непосредственный операнд (число). Пример команды XCHG: XCHG AX, [BX] В этом примере обмениваются значениями регистр AX и ячейка памяти по адресу, задаваемому значением регистра BX. Команда XLAT записывает в регистр AL значение, взятое из таблицы, адресуемой регистровой парой DS: BX. При этом начальное значение регистра AL служит индексом в таблице. Регистр DS определяет сегмент, в котором располагается таблица, а регистр BX – смещение таблицы от начала сегмента. Таблица в данном случае представляет собой последовательность некоторого количества байт. Действие команды XLAT можно записать следующим образом: AL: = DS: [BX + AL], при этом выражение присваивания следует рассматривать как косвенную форму адресации, но в явном виде такой способ адресации использовать нельзя. Команда XLAT не имеет операндов.
Команду удобно использовать, когда нужно выполнить преобразование одного символа в другой по какой-либо таблице. Например, команду XLAT можно использовать для преобразования кодировок символов по кодовым таблицам. Ниже представлен фрагмент программы, использующий команду XLAT для преобразования двоичного числа в ASCII символ. Numbers DB ‘0123456789’ . . . MOV AX, SEG Numbers MOV DS, AX ; Инициализация регистра DS MOV BX, OFFSET Numbers ; настройка BX на начало таблицы MOV AL, 5 ; в AL число 5 XLAT ; теперь в AL символ ‘5’ Команда LEA загружает в 16-битный регистр адрес ячейки памяти. Для указанного в команде адресного выражения вычисляется смещение и записывается в указанный регистр. Формат команды: LEA < имя_регистра>, < адресное выражение> Регистр должен быть 16-битным (например, AX или DX) и не должен быть сегментным регистром. Адресное выражение может использовать прямую и косвенную адресацию, но использование прямой адресации с командой LEA нецелесообразно, так как в этом случае в регистр сразу записывается смещение, указанное в команде, что можно сделать с помощью директивы OFFSET. Адресное выражение может содержать и префикс замены сегмента, но он игнорируется командой LEA и его использование только увеличит длину машинного кода на 1 байт. Пример использования команды LEA: LEA DX, [BX + SI + 2] Вместо команды LEA в предыдущем примере можно использовать следующую последовательность команд:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|