Мегаобучалка Главная | О нас | Обратная связь


Формат команды чтения слова состояния канала



2016-09-16 428 Обсуждений (0)
Формат команды чтения слова состояния канала 0.00 из 5.00 0 оценок




 

Лабораторная работа №9

Организация работы с процедурами

Цель работы

Организация ввода-вывода информации с использованием операций процедуры.

Теоретические основы

Процедуры на языке ассемблера

На языке ассемблера процедура оформляется следующим образом:

Метка proc тип_адресации

;тело процедуры

Метка endp

Пример 1

Программа, содержащая процедуру PrintWord, которая печатает на экране "Hello, World!".

CodeSg segment 'Code'

Assume CS:CodeSg, DS:DataSg, SS:StackSg

;

Begin: mov AX, DataSg

Mov DS, AX

Mov AX, StackSg

Mov SS, AX

;

Call PrintWord

;

Mov AX, 4C00h

Int 21h

;

PrintWord proc

;

Mov AH, 09h

Mov DX, offset message

Int 21h

Ret

;

PrintWord endp

;

CodeSg ends

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

DataSg segment 'Data'

;

message db 'Hellow, World!', '$'

;

DataSg ends

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

StackSg segment Stack 'Stack'

;

Db 256 dup(0)

;

StackSg ends

End begin

Пример 2

Основную часть программы также можно оформлять в виде процедуры:

Main proc far

; тело основной программы

Main endp

End Main

При этом команда ret не используется, а в качестве точки входа необходимо указать имя главной процедуры.

CodeSg segment 'Code'

Assume CS:CodeSg, DS:DataSg, SS:StackSg

Main proc far

;

Mov AX, DataSg

Mov DS, AX

Mov AX, StackSg

Mov SS, AX

;

Call PrintWord

;

Mov AX, 4C00h

Int 21h

;

Main endp

PrintWord proc

;

Mov AH, 09h

Mov DX, offset message

Int 21h

Ret

;

PrintWord endp

CodeSg ends

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

DataSg segment 'Data'

;

message db 'Hellow, World!', '$'

;

DataSg ends

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

StackSg segment Stack 'Stack'

;

Db 256 dup(0)

;

StackSg ends

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

End Main

Сравните с помощью отладчика результирующий код программ из приведённых выше примеров.

Способы передачи параметров в процедуры

Часто в подпрограммы необходимо передавать параметры. Существует три основных способа:

• через регистры;

• через стек;

• через общие области памяти.

Пусть в подпрограмму Y нужно передать параметр X. Тогда это можно сделать так:

Пример передачи параметров через регистры

Mov AX, X ; параметр X в регистр AX

Call Y ; вызов процедуры Y

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

Y proc

Inc AX ; некоторое действие с параметром

Ret ; возврат из процедуры

Y endp

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

X dw 0

В этом примере для передачи параметра X используется регистр AX, с которым процедура выполняет некоторое действие и возвращает ответ также через регистр AX.

Пример передачи параметров через стек

Push X ; параметр X в стек

Call Y ; вызов процедуры Y

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

Y proc

Pop BX ; временно извлекаем адрес возврата

Pop AX ; извлекаем из стека параметр

Push BX ; возвращаем в стек адрес возврата

Inc AX ; некоторое действие процедуры с параметром

Ret ; возврат из процедуры

Y endp

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

X dw 0

Здесь параметр X помещается перед вызовом процедуры в стек. В вызванной процедуре Y происходит извлечение из стека сперва адреса возврата в регистр BX, а затем самого параметра в регистр AX. Для правильного возврата из процедуры необходимо вернуть значение адреса возврата в стек, причем так, чтобы во время выполнения команды ret он находился в верхушке стека.

Пример передачи параметров через общую область памяти

Call Y

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

Y proc

Mov AX, ds:0000h ; извлекаем параметр по адресу ds:0000h

Inc AX

Ret

Y endp

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

X dw 0

При этом способе передачи параметра процедура должна знать, по какому адресу находится значение параметра. В данном случае это ds:0000h.

Замечание. Возврат значения из процедуры осуществляется как правило через регистр AX. Это может быть либо сам ответ либо его адрес.

Передача параметров по ссылке

В примерах ко способам передачи параметров подразумевалось, что в процедуру передается значение параметра X. Если же нужно предоставить процедуре возможность самостоятельно извлекать значение параметра, а также, возможно, изменять его значение, то надо передавать в процедуру не значение параметра, а его адрес. Такой способ может быть также полезен при

передаче в процедуру массивов, строк или каких-то других блоков данных (например, структур).

Пример

Процедура, обнуляющая массив X с количеством элементов N.

Mov AX, offset X ; передаем через AX адрес массива X

Mov CX, N ; передаем через CX кол-во N элементов X

Call Y

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

Y proc

l1:

mov [AX], 0 ; обнулям ячейку с адресом находящимся в AX

add AX, 2 ; "переходим" на следующий элемент массива

Loop l1 ; повторяем CX-раз

Y endp

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

X dw 0, 1, 2, 3, 4, 5 ; обнуляемый массив

N dw 6 ; кол-во элементов массива X

Задание

Составить три программы (с разными способами передачи параметров в процедуру), содержащую процедуру, выполняющую нижеприведённые действия. Исследовать её работу в отладчике.

(Упражнение выбирать по номеру студента в списке группы.)

1. n - раз выводит на экран символ '*' (в качестве параметра передавать число n).

2. Возводит целое число X в целую степень n (в качестве параметра передавать числа X и n).

3. Проверяет число X на знак и возвращает 0, если число X положительное или 0, и 1 в противном случае (в качестве параметра передавать число X).

4. Проверяет числа X и Y на равенство и возвращает 0, если равны, и 1 в противном случае (в качестве параметра передавать числа X и Y).

5. Вычисляет значение функции |X|, X - целое (в качестве параметра передавать число X).

6. Делит целое число X на n-ю степень числа 2 (в качестве параметра передавать числа X и n).

7. Умножает целое число X на n-ю степень числа 2 (в качестве параметра передавать числа X

и n).

8. Преобразует положительное число X в отрицательное (в дополнительный код) (в качестве параметра передавать число X).

9. Проверяет число X на принадлежность диапазону [a, b] и возвращает 0, если принадлежит, и 1 в противном случае (в качестве параметра передавать числа X, a, b).

10.Проверяет число X на принадлежность диапазону [0, a]V[b, 255] и возвращает 0, если принадлежит, и 1 в противном случае (в качестве параметра передавать числа X, a, b).

4 Контрольные вопросы

1. Механизм вызова процедуры/возврата из процедуры (ближний и дальний вызовы).

2. Форматы команды call.

3. Форматы команды ret.

4. Способы передачи параметров в процедуры.

 

 



2016-09-16 428 Обсуждений (0)
Формат команды чтения слова состояния канала 0.00 из 5.00 0 оценок









Обсуждение в статье: Формат команды чтения слова состояния канала

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (428)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)