АП–31б Липка Наталiя
Тема: Резервування пам’ятi для стека та використання команд для роботи зi стеком.
Мета: Навчитися використовувати стек та задiяти регiстри процесора, а також його команди та директиви асемблера, якi забезпечують роботу зi стеком.
Iндивiдуальне завдання: Створити текстовий файл на асемблерi з використанням команд, якi звертаються до стеку. Отримати виконуючий файл. Використовуючи вiдладчик, створену програму завантажити до пам’ятi та виконати в режимi трасировки, фiксуючи при цьому моменти, пов’язанi з роботою зi стеком.
Опис виконання роботи:
Файл lab3.asm
.286
title labrab_3
page ,132
sts segment stack
dw 8 dup (?)
vst label word
dw 12 dup (?)
db 3 dup ('stack ')
tos label word
sts ends
data segment
text1 db 'begin labrab_3',0ah,0dh,'$'
text2 db 'end labrab_3',0ah,0dh,'$'
data ends
code segment
assume cs:code,ds:data,ss:sts
nach: mov ax,data
mov ds,ax
mov ax,sts
mov ss,ax
lea sp,tos
mov ah,9h ; Вывод
lea dx,text1 ; сообщения
int 21h ; на экран
; Использование стека командами int и iret
mov sp,offset tos-24
int 12h
; Использование стека командами call и ret
; при ближнем вызове процедуры
lea sp,vst-4
call pr1
; Использование стека командами call и ret
; при дальнем вызове процедуры
call far ptr pr2
; Использование стека командами pusha и popa
; (если имеем МП-80286)
lea sp,tos
pusha
mov ah,9h ; Вывод
lea dx,text2 ; сообщения
int 21h ; на экран
popa
; Возврат в систему
mov ah,4ch
int 21h
; ------------- Текст процедуры pr1 ---------------
pr1 proc near
; Переход содержимого регистра SP через ноль
mov cx,5
mov ax,'*\'
m1: push ax
loop m1
mov ax,'/\'
push ax
mov bp,sp
add bp,12
mov sp,bp
ret 4
pr1 endp
; ------------- Текст процедуры pr2 ---------------
pr2 proc far
; Использование регистра BP для организации
; произвольного доступа к памяти, занятой стеком
mov bp,sp
mov bx,[bp-10]
mov dh,byte ptr [bp+28]
add bp,31
mov dl,byte ptr [bp]
ret
pr2 endp
; Конец кодового сегмента и текста программы
code ends
end nach
Файл L3.lst
1 .286
2 title labrab_3
3 page ,132
4 0000 sts segment stack
5 0000 0008[ dw 8 dup (?)
6 ????
7 ]
8
9 0010 vst label word
10 0010 000C[ dw 12 dup (?)
11 ????
12 ]
13
14 0028 0003[ db 3 dup ('stack ')
15 73 74 61 63 6B
16 20 20 20
17 ]
18
19 0040 tos label word
20 0040 sts ends
21 0000 data segment
22 0000 62 65 67 69 6E 20 text1 db 'begin labrab_3',0ah,0dh,'$'
23 6C 61 62 72 61 62
24 5F 33 0A 0D 24
25 0011 65 6E 64 20 6C 61 text2 db 'end labrab_3',0ah,0dh,'$'
26 62 72 61 62 5F 33
27 0A 0D 24
28 0020 data ends
29 0000 code segment
30 assume cs:code,ds:data,ss:sts
31 0000 B8 ---- R nach: mov ax,data
32 0003 8E D8 mov ds,ax
33 0005 B8 ---- R mov ax,sts
34 0008 8E D0 mov ss,ax
35 000A 8D 26 0040 R lea sp,tos
36 000E B4 09 mov ah,9h ; Вывод
37 0010 8D 16 0000 R lea dx,text1 ; сообщения
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.