--------------------------
Тема: Исследование основных моделей памяти ассемблерных программ для 16-разрядного МП
Цели работы: 1.Научиться создавать ассемблерные программы с моделями памяти TINY,SMALL,LARGE и модификаторами NEARSTACK,FORSTACK
2.Проверить практически на ПЭВМ распределение памяти с помощью отладчика AFDPRO.EXE
3.Выяснить роль директивы .STARTUP
Основные вопросы для отработки на занятии
-------------------------------------------
1. Для индивидуального задания составить программу и проверить ее с помощью отладчика при различных значениях исходных данных для случаев:
а). X > Y
б). X = Y
в). X < Y ,
чтобы убедиться в правильности реализации логического условия
2. Включить в начало программы команды записи в стек содержимого сегментных
регистров CS,DS,SS (выбраны произвольно)
push cs
push ds
push ss
а в конце программы команды извлечения из стека в регистры DI,SI,BP (выбраны произвольно для примера)
pop di
pop si
pop bp
и найти в памяти байты,которые используются под стек.
3. Найти распределение памяти(для последнего варианта программы, т.е. с командами обращения к стеку) для случаев
c выделенным сегментом стека директивой .stack
Для каждого варианта определить с помощью отладчика
- начальные адреса
сегментов
- адреса всех переменных
- адрес вершины стека
- взаимное расположение сегментов в памяти
4. Повторить пункт 3 с исключенной директивой .stack
5. Заменить в программе с вариантом модели памяти
а). .model small
директиву .STARTUP командами
MOV AX,@DATA
MOV DS,AX
определить распределение памяти и сравнить с ранее полученным.
6. Проанализировать фрагмент программы,которые соответствуют ди-
рективе .STARTUP
MOV DX,@DATA
MOV DS,DX
MOV BX,SS
SUB BX,DX
SHL BX,1
SHL BX,1
SHL BX,1
SHL BX,1
CLI
MOV SS,DX
ADD SP,BX
STI
и выяснить их роль.
7. Программа с моделью памяти TINY выглядит так:
;..Косвенно-регистровая адресация....
.model tiny
.code ; В программе только один сегмент
org 0100h ;
sum macro a,b,c ; Макроопределение
push ax
mov al,a
add al,b
mov c,al
pop ax
endm ; Конец макроопределения
n equ 5 ;
x0 equ 1 ;
q equ 3 ; Данные
s db ? ;
x db (n+1)dup(0);
.startup ; Точка входа в программу
mov cx,n
mov s,x0
mov si,offset x
sum x0,0,[si]
m1: sum [si],q,[si+1]
sum s,[si+1],s
inc si
loop m1
.exit ; Точка выхода из программы в DOS
end
Особенности:
a).Сегмент в программе только один - кодовый
б).Обязательна директива
org 100h
Текст программы:
Текст программы:
|
||||
|
||||
|
||||
|
||||
|