Резервування пам’ятi для стека та використання команд для роботи зi стеком

Страницы работы

Содержание работы

АП–31б Липка Наталiя

Лабораторна робота № 3

Тема: Резервування пам’ят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  ; сообщения

Похожие материалы

Информация о работе