Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы
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. Две команды во второй программе обеспечивают адресацию сегмента данных:
В8 ----R MOV AX,DATASG