- •Машинное исполнение
- •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. Передача параметров.
5. Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы.
5.1. Создать с помощью редактора следующую программу с именем exasm2.asm:
.286
TITLE EXASM2 (EXE) Операции пересылки и сложения
;-------------------------------------------------------
STACKSG SEGMENT PARA STACK 'Stack'
DW 32 DUP(?)
STACKSG ENDS
;-------------------------------------------------------
DATASG SEGMENT PARA 'Data'
FLDA DW 250
FLDB DW 125
FLDC DW ?
DATASG ENDS
;--------------------------------------------------------
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:NOTH
PUSH DS ;Записать DS в стек
SUB AX,AX ;Записать в стек
PUSH AX ;нулевой адрес
MOV AX,DATASG ;Поместить адрес DATASG
MOV DS,AX ;в регистр DS
MOV AX,FLDA ;Переслать 0250 в АХ
ADD AX,FLDB ;Прибавить 0125 к АХ
MOV FLDC,AX ;Записать сумму в FLDC
RET ;Вернуться в DOS
BEGIN ENDP
CODESG ENDS
END BEGIN
Записать эту программу на диск.
5.2. Выполнить ассемблирование и компоновку программы.
5.3. С помощью текстового редактора LEXICON просмотрите листинг программы и запишите его в отчет.
Обратите внимание на машинный код слева:
B8 ----R
Четыре дефиса говорят о том, что ассемблер не может определить адрес DATASG; он определяется лишь когда объектная программа будет скомпонована и загружена для выполнения. Поскольку загрузчик может расположить программу в любом месте памяти, ассемблер оставляет данный адрес открытым и показывает это символом R; компоновщик должен будет подставить в это место действительный адрес.
5.4. С помощью отладчика DEBUG просмотрите сегмент кодов, сегмент данных, регистры и проделайте пошаговое выполнение программы. Снова просмотрите сегмент данных и сравните с данными листинга программы. Объясните почему отладчик показывает разные сегменты данных до выполнения программы и после ее выполнения.
5.5. С помощью текстового редактора LEXICON просмотрите листинги обоих программ exasm1.lst и exasm2.lst. Для этого установите курсор в панели NORTON на файл exasm1.lst и нажмите клавиши Alt F4. Затем перейдите в другое окно редактора LEXICON нажав клавиши Alt 2. Далее клавишей F10 выйдите в меню редактора LEXICON, выберите пункт меню "Текст", затем пункт меню "Загрузить". В
строке меню появится приглашение для ввода имени файла *.* , нажмите Enter. На экране появится список файлов из панели NORTON. Установите курсор на файле exasm2.lst и нажмите Enter. В окне редактора LEXICON появится листинг второй программы. Переход из окна в окно редактора LEXICON выполнять нажатием либо Alt 1 либо Alt2.
5.6. Сравнивая листинги двух программ определите, чем отличаются их сегменты стека. Выводы запишите в отчет.
5.7. Определите в какой программе имеется сегмент данных и что он содержит. Выводы запишите в отчет.
5.8. Определите, чем отличаются сегменты кодов двух программ. Выводы запишите в отчет.
5.9. Последовательность команд PUSH, SUB и PUSH инициализируют стек в обоих программах. Объясните как это происходит. Выводы запишите в отчет.
5.10. Две команды во второй программе обеспечивают адресацию сегмента данных:
0004 В8 ----R MOV AX,DATASG
0007 8E D8 MOV DS,AX
Объясните как это происходит. Выводы запишите в отчет.
СОДЕРЖАНИЕ ОТЧЕТА:
1. Листинги программ.
2. Выводы по анализу листингов.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Какую команду надо ввести в командной строке DOS для ассемблирования программы TEMPY.ASM с получением файлов LST, OBJ и CRF.
2. Какую команду надо ввести для программы TEMPY для:
а) выполнения через отладчик DEBUG,
б) непосредственного выполнения из DOS.
3. Объясните назначение каждого из следующих файлов:
а) file.asm
б) file.lst
в) file.crf
г) file.obj
д) file.exe
е) file.map
3. Напишите две команды для инициализации регистра DS, полагая, что имя сегмента данных - DATSEG.
4. Составьте ассемблерную программу для:
- пересылки 30Н (непосредственное значение) в регистр AL;
- сдвига содержимого регистра AL на один бит влево (команда SHL AL,1);
- пересылки 18Н (непосредственное значение) в регистр BL;
- умножения регистра AL на BL (команда MUL BL).
Не забывайте команду RET. В программе не требуются определение и инициализация сегмента данных. Не забывайте также копировать стандартную часть программы (основу программы) и использовать редактор для ее развития. Выполните ассемблирование и компоновку. Используя отладчик DEBUG, проверьте сегмент кодов, регистры и проделайте пошаговое выполнение (трассировку) программы.
ОТВЕТЫ:
3. MOV AX,DATSEG
MOV DS,AX
4. MOV AL,30H
SHL AL,1
MOV BL,18H
MUL BL
RET
Л а б о р а т о р н а я р а б о т а N 3