Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы

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

Наши рекомендации