- •Машинное исполнение
- •1. Просмотр памяти.
- •2. Пример машинных кодов: непосредственные данные.
- •3. Пример машинных кодов: определение данных.
- •4. Пример машинных кодов: определение размера памяти.
- •5. Специальные средства отладчика.
- •6. Сохранение программы из отладчика.
- •Ассемблирование и выполнение программы
- •1. Ввод программы
- •2. Ассемблирование программы.
- •3. Компоновка программы.
- •4. Выполнение программы.
- •5. Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы.
- •Определение данных
- •1. Директивы определения данных.
- •2. Определение данных с числом повторений.
- •3. Директива определения байта (dв).
- •4. Директива определения слова (dw).
- •5. Директива определения двойного слова (dd).
- •6. Директива определения поля из четырех слов (dq).
- •7. Директива определения десяти байт (dt), директива equ.
- •Программы в com-файлах
- •1. Создание exe-файла.
- •2. Получение com-файла.
- •Логика и организация программы
- •1. Команда jmp.
- •2. Команда loop.
- •3. Сегмент стека.
- •4. Программа: расширение операции пересылки.
- •5. Программа: замена строчных букв на заглавные.
- •6. Команды сдвига и циклического сдвига.
- •7. Команды логических операций: and, or, xor, test, not.
- •Xor al,bl ;Логическое сравнение
- •Команды обработки строк
- •1. Rep: префикс повторения команды.
- •2. Программа: строковые операции.
- •3. Сканирование и замена.
- •4. Дублирование образца.
- •5. Программа: выравнивание справа при выводе на экран.
- •Арифметические операции 1: обработка двоичных данных
- •1. Сложение и вычитание.
- •2. Многословное сложение.
- •3. Умножение.
- •4. Повышение эффективности умножения.
- •5. Многословное умножение.
- •6. Сдвиг регистровой пары dx:ax.
- •7. Деление.
- •8. Деление вычитанием.
- •9. Преобразование знака.
- •Арифметические операции 2: обработка данных в форматах ascii и
- •1. Сложение в ascii-формате.
- •2. Вычитание в ascii-формате.
- •3. Умножение в ascii-формате.
- •4. Деление в ascii-формате.
- •5. Двоично-десятичный формат (bcd).
- •6. Преобразование ascii-формата в двоичный формат и наоборот.
- •Обработка таблиц
- •1. Прямой табличный доступ
- •2. Табличный поиск.
- •3. Табличный поиск с использованием сравнения строк.
- •4. Транслирующая команда xlat.
- •5. Программа: вывод шестнадцатиричных и ascii-кодов.
- •6. Программа: сортировка элементов таблицы.
- •Макрокоманды
- •If (условие)
- •If (условие)
- •1. Простое макроопределение.
- •2. Использование параметров в макрокомандах.
- •3. Комментарии в макрокомандах.
- •4. Использование макрокоманд внутри макроопределения.
- •5. Директива local.
- •6. Использование библиотек макроопределений.
- •7. Конкатенация (&).
- •8. Директивы повторения: rept, irp, irpc.
- •Inc ctr ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •9. Макрокоманды, использующие директивы if и ifndef.
- •10. Макрокоманды, использующие директиву ifidn.
- •Связь между подпрограммами
- •1. Программа: использование директив extrn и public для меток.
- •2. Программа: использование директивы public в кодовом сегменте.
- •3. Программа: общие данные в подпрограмме.
- •4. Передача параметров.
Программы в com-файлах
МЕТОДИЧЕСКИЕ УКАЗАНИЯ:
1. Для выполнения лабораторной работы вы должны войти в каталог группы из панели NORTON. Каждый студент должен иметь в каталоге группы свой личный каталог. Все программы должны создаваться и записываться в личном каталоге студента.
2. Для получения COM-файлов необходимо написание программы в текстовом редакторе в несколько другой форме. Сегмент стека в COM-файле не определяется, COM-программа генерирует стек автоматически, а все данные определяются не в сегменте данных, а в сегменте кодов.
3. После написания программы в текстовом редакторе с помощью программы tasm.exe необходимо получить OBJ-файл. Далее с помощью программы tlink.exe получают требуемый COM-файл.
4. В COM-программе сегмент стека и сегмент данных не определены. Поэтому в COM-программах резервируется 256-байтовый блок памяти (100Н). Так как адресация начинается со смещения 100Н от начала PSP (префикс программного сегмента), то в программе после директивы ASSUME должна быть команда ORG 100H.
5. Объем COM-файла ограничен 64 Кбайт.
6. Файл в COM-формате меньше, чем соответствующий EXE-файл.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
Войти в каталог TASM и удалить все созданные вами файлы в предыдущих работах за исключением файла exasm2.asm. Для этого необходимо выделить файлы для удаления клавишей Ins и нажать F8, после чего появится приглашение для подтверждения операции удаления. После нажатия Enter будут удалены все помеченные вами файлы.
1. Создание exe-файла.
1.1. Для программы exasm2.asm получить OBJ-файл. Для этого в командной строке DOS ввести команду:
tasm exasm2.asm
1.2. Для программы exasm2.asm получить LST-файл. Для этого в командной строке DOS ввести команду с опцией l (генерация листинга):
tasm exasm2.asm /l
Просмотреть полученный листинг с помощью текстового редактора LEXICON и записать листинг в отчет.
1.3. Для программы exasm2.asm получить перекрестные ссылки в файле LST. Для этого необходимо ввести команду DOS с опцией с (генерация перекрестных ссылок):
tasm exasm2.asm /l/c
Просмотреть полученный листинг с помощью текстового редактора LEXICON и записать перекрестные ссылки в листинг.
1.4. Для программы exasm2.asm получить листинг без таблицы имен. Для этого необходимо ввести команду DOS c опцией n (подавление таблицы имен):
tasm exasm2.asm /l/n
Просмотреть полученный листинг с помощью текстового редактора LEXICON.
1.5. Для OBJ-файла получить EXE-файл. Для этого в командной строке DOS ввести команду:
tlink exasm2.obj
Выполните ввод команды DOS (Enter). В вашем каталоге появится необходимый EXE-файл, а также MAP-файл. Просмотрите MAP-файл, нажав клавишу F3 и запишите текст файла в отчет.
2. Получение com-файла.
2.1. Для получения COM-файла необходимо создать в текстовом редакторе NORTON программу в другом формате. Для этого нажмите комбинацию клавиш Shift F4 и введите имя программы xcom1.asm. Далее запишите текст программы в следующей форме:
.286
TITLE XCOM1 (COM) для пересылки и сложения
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG 100H ;Начало в конце PSP
BEGIN: JMP MAIN ;Обход через данные
;-------------------------------------------------------
FLDA DW 250 ;Определение данных
FLDB DW 125
FLDC DW ?
;--------------------------------------------------------
MAIN PROC NEAR
MOV AX,FLDA ;Переслать 0250 в АХ
ADD AX,FLDB ;Прибавить 0125 к АХ
MOV FLDC,AX ;Записать сумму в FLDC
RET ;Вернуться в DOS
MAIN ENDP
CODESG ENDS
END BEGIN
Оператор ASSUME указывает ассемблеру на необходимость установить относительные адреса с начала сегмента кодов. Регистр CS также содержит этот адрес, являющийся к тому же адресом префикса программного сегмента (PSP). Директива ORG служит для резервирования 100Н байт от начального адреса под PSP.
ORG 100H устанавливает относительный адрес для начала выполнения программы. Программный загрузчик устанавливает этот адрес в командном указателе.
Если опущен ORG 100H, то на данные в префиксе программного сегмента будут установлены неправильные ссылки с непредсказуемым результатом при выполнении.
Команда JMP служит для обхода данных, определенных в программе. Запишите программу на диск и выйдите из редактора нажав комбинацию клавиш Shift F10.
2.2. Создайте OBJ-файл и LST-файл для программы xcom1.asm аналогично пункту 1.3. Просмотрите LST-файл с помощью текстового редактора LEXICON и запишите листинг в отчет.
2.3. Создайте COM-файл и MAP-файл. Для этого в командной строке DOS введите команду аналогично пункту 1.5. с опцией t (создание COM-файла):
tlink xcom1.obj /t
Без опции t управляющая программа tlink создаст EXE-файл.
Попытка выполнить EXE-модуль программы, написанной для COM-формата, успеха не имеет.
Нажав клавишу F3 просмотрите MAP-файл и его текст запишите в отчет.
СОДЕРЖАНИЕ ОТЧЕТА:
1. Листинги программ.
2. Тексты MAP-файлов.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Каков максимальный размер COM-файла?
2. Какие сегменты можно определить в программе, которая будет преобразована в COM-файл?
3. Выполните трассировку программы xcom1.com с помощью отладчика DEBUG.
ОТВЕТЫ:
1. 64 К
2. Сегмент данных, сегмент кодов.
Л а б о р а т о р н а я р а б о т а N 5