Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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

Ключ Назначение
/t компоновка программы как COM
/k отключение сообщения “Warning: No Stack”
/v включение в исполнительный файл отладочной информации

 

Примеры использования компоновщика 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

    Примеры правильного использования Примеры неправильного использования
MOV AX, 1234h MOV CS, AX
MOV AX, BX MOV 0400h, BL
MOV AX, CS MOV AL, DX
MOV CH, DL MOV [BX], [SI]
MOV AX, [BX + 2] MOV [DI], 432q
MOV [SI], AL MOV DX, BYTE PTR [BX + SI]
MOV [BP + DI], 0B800h MOV BYTE PTR [SI + 2], 257
MOV [BP + DI], DS MOV DS, 1010111010101110b

 

В таблице 4 показаны все возможные сочетания типов операндов для команды MOV. Строки соответствуют операнду-приемнику, а столбцы – операнду-источнику. Знаком ‘+’ обозначены сочетания операндов, для которых команда будет являться корректной.

Таблица 4

Сочетания типов операндов для команды MOV

  Регистры общего назначения Регистр CS Регистры DS, SS, ES Ячейка памяти Непосред-ственное значение
Регистры общего назначения + + + + +
Регистры DS, SS, ES + +
Ячейка памяти + + + +

 

    Команда 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...