Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


ѕередача параметров




4.1. «аписать в текстовом редакторе следующую программу в ≈’≈-формате:

 

.286

TITLE CALLMUL4 (EXE) ѕередача параметров в подпрогр.

;-------------------------------------------------------

EXTRN SUBMUL4:FAR

;-------------------------------------------------------

STACKSG SEGMENT PARA STACK 'Stack'

DW 64 DUP(?)

STACKSG ENDS

;-------------------------------------------------------

DATASG SEGMENT PARA 'Data'

QTY DW 0140H

PRICE DW 2500H

DATASG ENDS

;--------------------------------------------------------

CODESG SEGMENT PARA PUBLIC 'Code'

BEGIN PROC FAR

ASSUME CS:CODESG,DS:DATASG,SS:STACKSG

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DATASG

MOV DS,AX

PUSH PRICE

PUSH QTY

CALL SUBMUL4;¬ызвать подпрограмму

RET;¬ернутьс€ в DOS

BEGIN ENDP

CODESG ENDS

END BEGIN

 

«аписать эту программу на диск под именем callmul4.asm.

4.2. «аписать в текстовом редакторе следующую подпрограмму:

 

.286

TITLE SUBMUL4 ¬ызываема€ подпрограмма умножени€

;------------------------------------------------------

CODESG SEGMENT PARA PUBLIC 'Code'

SUBMUL4 PROC FAR

ASSUME CS:CODESG

PUBLIC SUBMUL4

PUSH BP

MOV BP,SP

MOV AX,[BP+8];—тоимость

MOV BX,[BP+6]; оличество

MUL BX;ѕроизведение в DX:AX

POP BP

RET 4;¬ернутьс€ в DOS

SUBMUL4 ENDP

CODESG ENDS

END

 

«аписать эту подпрограмму на диск под именем submul4.asm.

4.3. ¬ыполнить ассемблирование основной программы и подпрограммы.

ѕросмотреть листинги основной программы и подпрограммы и записать их в отчет.

¬ этом примере вызывающа€ программа физически передает данные через стек.  ажда€ команда PUSH должна записывать в стек данные размером в одно слово из пам€ти или из регистра.

ѕрограмма, прежде чем вызывать подпрограмму submul4, заносит в стек значени€ полей PRICE и QTY.

ѕри выполнении программы в стек заноситс€ следующа€ информаци€:

 

- »нициализирующа€ команда PUSH DS заносит адрес сегмента в стек. Ётот адрес может отличатьс€ в разных верси€х DOS.

-  оманда PUSH AX заносит в стек нулевой адрес.

-  оманда PUSH PRICE заносит в стек слово (2500).

-  оманда PUSH QTY заносит в стек слово (0140).

-  оманда CALL заносит в стек содержимое регистра CS.

- “ак как команда CALL представл€ет здесь межсегментный вызов, то в стек заноситс€ также содержимое регистра IP.

 

¬ызываема€ программа использует регистр BP дл€ доступа к параметрам в стеке, но прежде она запоминает содержимое регистра BP, записыва€ его в стек.

«атем программа помещает в регистр BP содержимое из регистра SP, так как в качестве индексного регистра может использоватьс€ регистр BP, но не SP. ѕервоначально регистр SP содержал размер пустого стека. «апись каждого слова в стек уменьшает содержимое SP на 2.

“ак как в стек было произведено 6 записей, то содержимое SP уменьшилось на 12. ÷ена (PRICE) €вл€етс€ 3-й записью, следовательно дл€ доступа к 3-й записи число в регистре BP нужно увеличить на 8, что соответствует перемещению в стеке на 4 записи назад.  оличество (QTY) €вл€етс€ 4-й записью, следовательно дл€ доступа к 4-й записи число в регистре BP нужно увеличить на 6, что соответствует перемещению в стеке на 3 записи назад. “ак формируютс€ адреса полей дл€ пересылки содержимого этих полей из стека в регистры ј’ и ¬’, содержимое самого регистра BP при этом не измен€етс€. ƒалее происходит перемножение данных регистров ј’ и ¬’.

ѕеред возвратом в вызывающую программу в регистре BP восстанавливаетс€ первоначальное значение, а содержимое в регистре SP увеличиваетс€ на 2.

ѕоследн€€ команда RET представл€ет собой "длинный" возврат в вызывающую программу. ѕо этой команде выполн€ютс€ следующие действи€:

 

- »з вершины стека восстанавливаетс€ значение регистра IP.

- —одержимое регистра SP увеличиваетс€ на 2.

- »з новой вершины стека восстанавливаетс€ значение регистра CS.

- —одержимое регистра SP увеличиваетс€ на 2.

 

 оманда RET закодирована как:

 

RET 4

 

ѕараметр 4 представл€ет собой количество байтов в стеке, использованных при передаче параметров (два слова в данном примере).  оманда RET прибавит этот параметр к содержимому регистра SP. “аким образом, из стека исключаютс€ не нужные больше параметры. Ќеобходимо быть особенно внимательным при восстановлении регистра SP - ошибки могут привести к непредсказуемым результатам.

4.4. ¬ыполнить компоновку программы. ¬ыполнить трассировку программы с помощью отладчика DEBUG. ¬нимательно проследить за изменением регистров CS, IP, SP, BP а также содержимого сегмента стека, начальный адрес которого указываетс€ в регистре SS. ¬ыводы о работе программы записать в отчет.

 

 

—ќƒ≈–∆јЌ»≈ ќ“„≈“ј:

1. Ћистинги программ и подпрограмм.

2. ¬ыводы о работе программ.

 

 

 ќЌ“–ќЋ№Ќџ≈ ¬ќѕ–ќ—џ:

1. ѕредположим, что программа MAINPRO должна вызывать подпрограмму SUBPRO. а)  ака€ директива в программе MAINPRO указывает ассемблеру, что им€ SUBPRO определено вне ее собственного кода?

б)  ака€ директива в программе SUBPRO необходима дл€ того, чтобы им€ точки входа было доступно в основной программе MAINPRO?

2. ѕредположим, что в программе MAINPRO определены переменные QTY как DB, VALUE как DW и PRICE как DW. ѕодпрограмма SUBPRO должна разделить VALUE на QTY и записать частное в PRICE. а)  аким образом программа MAINPRO указывает ассемблеру, что три переменные должны быть доступны извне основной программы? б)  аким образом подпрограмма SUBPRO указывает ассемблеру, что три переменные определены в другом модуле?

 

 

ќ“¬≈“џ:

1. а) EXTRN SUBPRO:FAR б) PUBLIC SUBPRO

 

2. а) PUBLIC QTY,VALUE,PRICE б) EXTRN QTY:WORD,VALUE:WORD,PRI-

CE:WORD

 





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-10-01; ћы поможем в написании ваших работ!; просмотров: 518 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

Ќадо любить жизнь больше, чем смысл жизни. © ‘едор ƒостоевский
==> читать все изречени€...

1289 - | 1048 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.015 с.