Хелпикс

Главная

Контакты

Случайная статья





Тема: «Разработка и отладка программы с использованием подпрограмм и 



 

Методические указания по выполнению лабораторной работы № 14.

Тема: «Разработка и отладка программы с использованием подпрограмм и 

команд работы со стеком »

  

Цель работы: получить практические навыки работы со стеком.

Оборудование: методические рекомендации по выполнению работы, ПК, программа-отладчик AFD.

 

Краткие теоретические сведения.

Стек – это область памяти, специально выделяемая для временного хранения данных программы. Для стека в структуре программы предусмотрен отдельный сегмент.

Для работы со стеком предназначены три регистра:

- ss – сегментный регистр стека;

- sp/esp – регистр указателя стека;

- bp/ebp – регистр указателя базы стека.

Размер стека зависит от режима работы микропроцессора и ограничивается 64 Кбайт.

В каждый момент времени доступен только один стек, адрес сегмента которого содержится в регистре ss. Этот стек называется текущим. Для того чтобы обратиться к другому стеку (“переключить стек”), необходимо загрузить в регистр ss другой адрес. Регистр ss автоматически используется процессором для выполнения всех команд, работающих со стеком.

Регистр esp/sp всегда указывает на вершину стека, то есть содержит смещение, по которому в стек был занесен последний элемент. Команды работы со стеком неявно изменяют этот регистр так, чтобы он указывал всегда на последний записанный в стек элемент. Если стек пуст, то значение esp равно адресу последнего байта сегмента, выделенного под стек. При занесении элемента в стек процессор уменьшает значение регистра esp, а затем записывает элемент по адресу новой вершины. При извлечении данных из стека процессор копирует элемент, расположенный по адресу вершины, а затем увеличивает значение регистра указателя стека esp. Таким образом, получается, что стек растет вниз, в сторону уменьшения адресов.

Работает стек по принципу: «Первый вошел – последний вышел».

Для организации работы со стеком существуют специальные команды записи и чтения.

push < источник> – запись значения источник в вершину стека.

pop < назначение> – запись значения из вершины стека по месту, указанному операндом < назначение>. Значение при этом “снимается” с вершины стека.

 

Методика выполнения работы.

1. Запустить отладчик. Набрать А 100. Ввести программу записи содержимого регистров в стек:

PUSH AX

PUSH [10]

PUSH [SI]

INT3

2. Для выхода из ассемблирования нажать Ctrl+Enter. Записать в регистры и ячейки исходные данные согласно варианта (таблица 1). Посмотреть начальное значение регистра SP.

Таблица 1.

До выполнения программы

После выполнения
Варианты  
АХ D871 D318 B896 CC11  
[10], [11] A456 В367 8С36 F590 E925 81АС С987 АСВ1 СВА2  
SI  
[20], [21] 94F5 С234 В658 А920 Е872 4А13 5С98 Е657 F456 44АА  
SP                                
Ячейки памяти:   FFFE, FFFF                                
FFFC, FFFD  
FFFA, FFFB  

До выполнения программы

После выполнения
Варианты  
АХ DВ71 D3Е8 BВ96 ЕЕ11 1А22 А234 А678  
[10], [11] 457С В337 ВС36 F598 EЕ25 АА33 3В44 89АС 98С7 АСВ3 ЕВА2  
SI  
[20], [21] 88FА СС33 В6В8 А922 ЕЕ72 СС98 Е6Е7 FЕ56 7С88 4Е67 АВС1 В4АА  
SP                                
Ячейки памяти:   FFFE, FFFF                                
FFFC, FFFD  
FFFA, FFFB  

Будьте внимательны, первая программа связана со второй (п. 4).

 

3. Набрать D 100, выполнить программу в пошаговом режиме F2.

Убедиться, что после выполнения каждой команды содержимое SP уменьшается на 2, т. к. стек работает со словами и меньший байт записывается по меньшему адресу. Содержимое регистров при этом не изменяется. Заполнить таблицу 1.

 

4. Очистить содержимое регистров АХ, ВХ, СХ, DX (записать 0). Значение регистра SP не изменять. Отладчик не закрывать! Ниже, после первой программы ввести программу, которая выталкивает из стека содержимое регистров. Учитывая принцип работы стека, вводимая программа будет иметь вид:

РОР DX

РОР CX

РОР BX

РОР AX

INT3      

Выполнить программу в пошаговом режиме F2, заполнить таблицу 2.

Таблица 2.

До выполнения программы

После выполнения программы
АХ  
BX  
CX  
DX  
SP    
Ячейки памяти: FFF8    
FFFA    
FFFC    
FFFE    

 

 

5. Исследовать выполнение команды PUSHA, которая записывает содержимое всех регистров МП в стек (таблица 3). Набрать А 100 и программу:

PUSHA

INT3

Записать в регистры значения из таблицы 3. Записать начальные значения регистров SP и BP. Набрать D 100, выполнить программу в пошаговом режиме (F2).

Будьте внимательны, третья программа связана с четвертой (п. 6).

 

Таблица 3.

До выполнения программы

После выполнения
варианты  
АХ DDDD CCDD ВВ44 FD11  
BX EEEE EE11 ЕЕ55 91AC DC12  
CX FFFF 22FF АА99  
DX AAAA АА11 DD22  
SI BBBB 99AA ВВ22 FF33  
DI CCCC 11BB AA11 СС33  
SP                                
BP                                

Ячейки памяти:

                           
FFFE  
FFFC  
FFFA  
FFF8  
FFF6  
FFF4  
FFF2  
FFF0  

 

До выполнения программы

После выполнения
варианты  
АХ BBBB CCDD FA11 FF22 ВВ44 FD11 T555  
BX CCCC AAAA AA11 CB11 7AD7 33E4 ЕЕ55 91AC DC12 999C  
CX ВВ22 FF33 11BB CC17 44AF C566 АА99 111F  
DX СС33 АB11 DD22 224A  
SI  
DI  
SP                                
BP                                

Ячейки памяти:

                           
FFFE  
FFFC  
FFFA  
FFF8  
FFF6  
FFF4  
FFF2  
FFF0  

 

6. Исследовать выполнение команды РОРА, которая выталкивает из стека содержимое всех регистров. Очистить регистры, набрать А 100 и программу:

РОРА

INT3

Таблица 4.

До выполнения программы

После выполнения программы
АХ  
BX  
CX  
DX  
SI  
DI  
SP    
BP    
Ячейки памяти: FFFE    
FFFC    
FFFA    
FFF8    
FFF6    
FFF4    
FFF2    
FFF0    

7. Набрать D 100, выполнить программу в пошаговом режиме (F2), заполнить таблицу 4.

 

8. Исследовать выполнение команды PUSHF, которая размещает в вершине стека содержимое регистра флагов. Набрать А 100 и программу:

PUSHF

INT3

 

9. Набрать D 100, выполнить программу. Записать содержимое 2-х ячеек вершины стека (смотрите содержимое ячейки памяти, адрес которой указан в регистре SP) и сравнить результат со значениями флажков. Формат регистра флажков имеет следующий вид:

 0 nt io pl of df if tf sf zf af pf cf
                               

 

10. Пример использования стека.

Дан массив (см. таблицы 4, 5), состоящий из 10 байт, записанных с адреса со смещением 0010. Используя стек можно переписать элементы массива в обратном порядке (вместо имен меток писать адреса перехода в командах loop). Выполнение программы клавиша F1 (таблица 6).

 

Таблица 4 – Текст программы

Адрес команды Машинный код Команда, операнды
  MOV SI, 0010
    MOV CX, 0A
    M: PUSH [SI]
    INC SI
    LOOP M
    MOV SI, 0010
    MOV CX, 0A
    M1: POP [SI]
    INC SI
    LOOP M1
    INT3

 

Таблица 5 – Исходные данные

Смещения

Варианты

А1

В1

А2

В2

А3

В3

А4

В4

А5

В5

А6

В6

А7

В7

А8

В8

А9

В9

А0

А0

В0

Смещения

Варианты

C1

D1

E1

F1

C2

D2

E2

F2

C3

D3

E3

F3

C4

D4

E4

F4

C5

D5

E5

F5

C6

D6

E6

F6

C7

D7

E7

F7

C8

D8

E8

F8

C9

D9

E9

F9

C0

D0

E0

F0

AA

                                                           

 

Таблица 6.

Адрес
До выполнения                    
После выполнения                    

 

11. Сделать вывод о проделанной работе. Ответить на контрольные вопросы. Составить отчет.

 

Отчет должен содержать:

1. Номер, название и цель работы. Номер варианта.

2. Заполненные таблицы 1–4, 6; значение флажков п. 9.

4. Ответы на контрольные вопросы. Вывод о проделанной работе.

 

Контрольные вопросы:

1. Как производится запись числа в стек?

2. Как выполняется чтение числа из стека?

3. Какие функции выполняет стек?

4. Какая команда используется для записи числа в стек?

5. Какая команда используется для записи содержимого всех регистров МП в стек?

 

Литература

1. Майко Г. В. Ассемблер для IBM PC: - М.: «Бизнес-Информ», «Сирин», 1999г. – 212с.

2. Юров В., Хорошенко С. Аssembler: учебный курс – СПб: Питер Ком, 1999г. – 672 с.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.