Составители:
Рубрика:
54
возврата. Каждая процедура «знает» свой тип вызова (одно или два слова)
и отступив от верхушки стека на +2 или на +4 читает параметры.
mov ax, bp+2 ; первый параметр при ближнем вызове
mov ax, bp+4 ; первый параметр при дальнем вызове
Сохранение регистров
Подпрограмма во время выполнения использует регистры процессора.
Значения, которые в них хранились, возможно, ещё
понадобятся основной
программе. По этой причине каждая подпрограмма обязана сохранить зна-
чения регистров перед началом их использования, а после завершения
работы перед возвратом восстановить их прежние значения. Для сохране-
ния регистров используется стек. В процессорах, начиная с 386, введены
команды
pusha
popa
сохраняющие в стеке, а после выполнения подпрограммы, восстанав-
ливающие значения всех
регистров.
6.4. Пример выполнения работы
Разработать подпрограмму, которая удаляет, начиная с задан-
ной позиции строки, указанного числа символов. Написать програм-
му, которая вводит с клавиатуры строку, позицию и длину удаляемой
части строки, удаляет указанную часть и выводит строку.
Текст программы:
data segment
MESS1 db 0dh,0ah, "Введите строку:", 0dh,0ah, "$"
MESS2 db 0dh,0ah, "Введите позицию:", 0dh,0ah, "$"
возврата. Каждая процедура «знает» свой тип вызова (одно или два слова) и отступив от верхушки стека на +2 или на +4 читает параметры. mov ax, bp+2 ; первый параметр при ближнем вызове mov ax, bp+4 ; первый параметр при дальнем вызове Сохранение регистров Подпрограмма во время выполнения использует регистры процессора. Значения, которые в них хранились, возможно, ещё понадобятся основной программе. По этой причине каждая подпрограмма обязана сохранить зна- чения регистров перед началом их использования, а после завершения работы перед возвратом восстановить их прежние значения. Для сохране- ния регистров используется стек. В процессорах, начиная с 386, введены команды pusha popa сохраняющие в стеке, а после выполнения подпрограммы, восстанав- ливающие значения всех регистров. 6.4. Пример выполнения работы Разработать подпрограмму, которая удаляет, начиная с задан- ной позиции строки, указанного числа символов. Написать програм- му, которая вводит с клавиатуры строку, позицию и длину удаляемой части строки, удаляет указанную часть и выводит строку. Текст программы: data segment MESS1 db 0dh,0ah, "Введите строку:", 0dh,0ah, "$" MESS2 db 0dh,0ah, "Введите позицию:", 0dh,0ah, "$" 54
Страницы
- « первая
- ‹ предыдущая
- …
- 52
- 53
- 54
- 55
- 56
- …
- следующая ›
- последняя »