
- •Ассемблирование и выполнение программы
- •1. Ввод программы
- •2. Ассемблирование программы.
- •3. Компоновка программы.
- •4. Выполнение программы.
- •5. Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы.
- •0004 В8 ----r mov ax,datasg
- •6. Создание exe-файла.
- •7. Получение com-файла.
4. Выполнение программы.
4.1. Для выполнения программы необходимо в панели NORTON установить курсор на файле exasm1.exe и нажать клавишу Enter. После этого программа пользователя выполнена.
4.2. Так как наша программа не вырабатывает видимых результатов, ее можно выполнить трассировкой под отладчиком DEBUG. Для этого необходимо ввести в командной строке DOS:
debug exasm1.exe
В результате DOS загрузит программу DEBUG, которая, в свою очередь, загрузит требуемый ЕХЕ-модуль. После этого отладчик выдаст дефис (-) в качестве приглашения.
4.3. Для просмотра сегмента стека введите:
D SS:0
Эту область легко узнать по 12-кратному дублированию константы STACKSEG.
4.4. Для просмотра сегмента кода введите:
D CS:0
Сравните машинный код с листингом ассемблера. Непосредственные операнды, приведенные в листинге ассемблирования как 0123 и 0025, в памяти представлены в виде 2301 и 2500 соответственно. В данном случае листинг ассемблирования не вполне соответствует машинному коду. Все двухбайтовые адреса (слова) и непосредственные операнды в машинном коде хранятся в обратном порядке.
4.5. Введите R для просмотра содержимого регистров.
4.6. Выполните программу с помощью команды Т (трассировка). В процессе пошагового выполнения программы обратите внимание на содержимое регистров.
4.7. Когда вы дойдете до команды RET, введите Q (Quit - выход) для завершения работы отладчика.
4.8. Используя команду DOS DIR проверьте наличие ваших файлов на диске. Для этого в командную строку DOS введите команду:
dir exasm1.*
В результате на экране появятся следующие имена файлов:
exasm1.asm
exasm1.obj
exasm1.lst
exasm1.crf
exasm1.map
exasm1.exe
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. Две команды во второй программе обеспечивают адресацию сегмента данных: