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




 

Размер стека зависит от режима работы микропроцессора и ограничивается 64 Килобайтами (или 4 Гигабайтами в защищенном режиме). В каждый момент времени доступен только один стек, адрес сегмента которого содержится в регистре SS. Этот стек называется текущим. Для того чтобы обратиться к другому стеку («переключить стек»), необходимо загрузить в регистр SS другой адрес. Регистр SS автоматически используется процессором для выполнения всех команд, работающих со стеком.

 

Перечислим еще некоторые особенности работы со стеком:

1. запись и чтение данных в стеке осуществляется в соответствии с принципом LIFO;

2. по мере записи данных в стек последний растет в сторону младших адресов. Эта особенность заложена в алгоритм команд работы со стеком;

При использовании регистров esp/sp и ebp/bp для адресации памяти ассемблер автоматически считает, что содержащиеся в нем значения представляют собой смещения относительно сегментного регистра ss.

 

В общем случае стек организован так:

Регистр ESP/SP всегда указывает на вершину стека, т. е. содержит смещение, по которому в стек был занесен последний элемент. Команды работы со стеком неявно изменяют этот регистр так, чтобы он указывал всегда на последний записанный в стек элемент.

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

 

Задание для выполнения

Напишите программу вывода числа хранящегося в регистре AX (5A0Fh) в десятичной системе счисления. Создайте COM-файл. Опишите алгоритм работы стека в созданной программе.

 

Критерии оценок:

5 – работа выполнена полностью. В тексте программы нет синтаксических ошибок. Разработан оптимальный алгоритм решенных задач. Описан алгоритм работы стека.

4 – работа выполнена полностью. В тексте программы нет синтаксических ошибок. Разработан не оптимальный алгоритм решенных задач. Описан алгоритм работы стека.

3 – работа выполнена полностью. В тексте программы нет синтаксических ошибок. Разработан не оптимальный алгоритм решенной задачи. Алгоритм работы стека описан не правильно

2 – поставленная задача не была реализована.

 


Программа вывода числа хранящегося в регистре AX (5A0Fh) в десятичной системе счисления

 

s1 segment

org 100h

start:

 

mov ax,0003h

int 10h

 

mov ax,5A0Fh

mov bx,10

mov cx,0

 

label1:

mov dx,0

div bx

push dx

add cx,1

cmp ax,0

jnz label1

label2: pop dx

call print

loop label2

 

mov ah,10h

int 16h

 

int 20h

 

print proc

mov ah,02h

add dl,30h

int 21h

ret

print endp

 

s1 ends

end start


Практическая работа №6

Использование прерывания 21h: Сервис DOS.

Цель занятия: изучить и научиться использовать основные функции прерывания 21h.

 

Прерывание - специальный набор готовых процедур, постоянно доступный для использования.

Общий алгоритм применения функций любого прерывания

1. Поместить номер вызываемой функции в регистр ah;

2. Подготовить, если необходимо, входные данные для функции;

3. Вызвать прерывание;

Сохранить или обработать выходные данные.

Пример 1: Вывести на экран символ '$'

mov ah, 02;номер функции

mov dl, '$';входные данные

int 21h;вызов прерывания

 

Пример 2: Ввести строку с клавиатуры и вывести ее на экран

mov ah, 0ah;номер функции

lea dx,max;входные данные

int 21h;вызов прерывания

 

mov ah,09h;номер функции

mov dx,offset enter1;выходные данные

int 21h;вызов прерывания

 

mov ah,09h;номер функции

mov dx,offset string;выходные данные

int 21h;вызов прерывания

 

max db 255;структура адреса буфера ds:dx для функции 0ah

len db 0

string db 254 dup(‘$’)

 

enter1 db 10,13,’$’;перевод строки на экране

Функции DOS (Int 21h)

Назначение № Функции Данные на входе Данные на выход
Ввод символа с ожиданием и эхосопровождением 01h ah – 01h al - ASCII код
Вывод символа 02h ah – 02h dl - ASCII код  
Ввод символа с ожиданием и без эхосопровождения 08h ah – 08h al - ASCII код
Вывод строки на экран 09h ah – 09h ds:dx - адрес строки с символом '$' на конце  
Ввод строки с клавиатуры 0ah ah – 0ah ds:dx - адрес буфера со следующим форматом: 1й байт - размер буфера; 2й байт - число фактически введенных символов; 3й байт и следующие за ним - буфер под строку Введенная строка в буфере с 0dh на конце

Задания для выполнения

1. Вывести слово "Привет" вертикально.

2. Вывести приглашение к вводу символа, вывести введенный символ.

3. Вывести приглашение к вводу строки, вывести введенную строку.

 

 

Критерии оценок:

5 – работа выполнена полностью (решены три задачи). В тексте программ нет синтаксических ошибок. Разработан оптимальный алгоритм решенных задач.

4 – работа выполнена не полностью (решены две задачи). В тексте программ нет синтаксических ошибок. Разработан оптимальный алгоритм решенных задач.

3 – работа выполнена не полностью (решена одна задача). В тексте программы нет синтаксических ошибок. Разработан не оптимальный алгоритм решенной задачи.

2 – ни одна из поставленных задач не была реализована.

 


Практическая работа №7



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: