Пиши Дома Нужные Работы

Обратная связь

Передача параметров в процедуру.

Ассемблер для IBM PC.

Основы программирования.

Часть 2

Лабораторный практикум

Для студентов специальностей

010200 «Прикладная математика и информатика»,

351500 «Математическое обеспечение и администрирование информационных систем»,

220200 «Автоматизированные системы обработки информации и управления»

Майкоп 2008


УДК 681.32 (075.8)

ББК 32.973.26 – 018

М 52

 

 

Рецензенты: Тлюстен В.Ш., зав. кафедрой прикладной математики и информационных технологий АГУ, канд. физ-мат. наук, доцент;

Довгаль В.А., доцент кафедры информатики и вычислительной техники МГТУ, канд. техн. наук, доцент.

 

 

Работа печатается по решению редакционно-издательского совета Адыгейского государственного университета.

 

М 52 Меретуков Ш.Т., Бучацкая В.В., Бучацкий П.Ю. Лабораторный практикум «Ассемблер для IBM PC. Основы программирования. Часть 1.» для студентов специальностей 010200 «Прикладная математика и информатика», 351500 «Математическое обеспечение и администрирование информационных систем», 220200 - Автоматизированных систем обработки информации и управления / Ш.Т. Меретуков и др. – Майкоп, 2008. - 35 с.

 

Лабораторный практикум «Ассемблер для IBM PC. Основы программирования. Часть 2.» включает описания лабораторных работ по курсам «Архитектура ЭВМ и систем», «Организация ЭВМ и систем», «Введение в язык Ассемблера IBM PC», состоящих из теоретической, практической части, заданий для индивидуальной работы, контрольных вопросов и заданий.

 

 


Содержание

Введение……………………………………………………………………………  
Лабораторная работа № 5. Процедуры  
Лабораторная работа № 6. Обработка символьной информации……………  
Лабораторная работа № 7. Битовые операции ……………………………  
   
Рекомендуемая литература……………………………………………………….  

 




Введение.

Данная разработка является второй частью методического руководства к выполнению лабораторных работ. В нее вошли вопросы, касающиеся обработки символьной информации, работы с процедурами, выполнения логических битовых операций. Разработка составлена на основе лекций, читаемых авторами по курсу «Архитектура вычислительных систем и сетей», «Организация ЭВМ и систем», «Введение в язык Ассемблера».

Изучение тем, предлагаемы в данном руководстве необходимо при подготовке профессиональных программистов, поскольку позволяет лучше понять принципы работы ЭВМ, операционных систем и трансляторов с языков высокого уровня, а также разрабатывать высокоэффективные программы.

Описание каждой лабораторной работы состоит из следующих разделов:

ü цель работы;

ü основные сведения – содержат минимальных набор теоретических сведений, необходимых в ходе выполнения работы;

ü пример выполнения работы – типовое задание и программа, реализующая поставленную задачу, можно рассматривать как шаблон для выполнения работы по данной теме;

ü варианты заданий для индивидуальной работы;

ü контрольные вопросы.

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

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


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

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

Цель:изучение приемов программирования на языке Ассемблера с использованием подпрограмм, выработка навыков работы с командами вызова подпрограмм, возврата из подпрограммы.

Задачи:

ü изучить механизм работы команды вызова подпрограммы CALL, возврата из подпрограммы RET, правила оформления подпрограмм;

ü получить практические навыки по созданию подпрограмм на языке Ассемблера.

Команды работы с подпрограмми.

В языке ассемблера подпрограмма оформляется в виде процедур. Для объявления процедур в одномодульных, простых программах можно использовать упрощенный вариант синтаксиса:

<имя> PROC <тип>

<тело процедуры>

RET

<имя> ENDP

где PROC – директива, определяющая начало процедуры,

<имя> – метка, служащая именем процедуры и задающая адрес точки входа в процедуру;

<тип> – параметр, определяющий тип процедуры и может принимать два значения: near (ближний) и far (дальний). Если используется упрощенные формы определения сегментов, то тип процедуры задается выбранной моделью памяти и его можно не указывать. Для моделей tiny, small и compact определяется тип near, а для остальных – far;

RET (Return) – последняя команда подпрограммы. Она осуществляет выход из подпрограммы и возврат в основную программу. Тип процедуры автоматически задает тип возврата из процедуры.

Вызов подпрограммы из основной программы осуществляется командой CALL, которая имеет следующий синтаксис:

CALL <тип> <имя>

где <тип> – параметр, определяющий тип перехода и может принимать значения near или far;

<имя> – имя вызываемой процедуры.

Команда CALL вызывает процедуру и сохраняет в стек адрес следующей за ней команды. При ближнем вызове в стек помещается значение регистра IP, а при дальнем вызове – значение регистров CS и IP. После выполнения в процедуре команды RET – выполняется обратное действие.

Example 5.1.Фрагмент программы вызова процедур.

;фрагмент кода программы

main PROC

MOV AX, @data

MOV DS, AX

CALL MySub

MOV AX, 4C00h

INT 21

main ENDP

MySub PROC

RET

MySub ENDP

Передача параметров в процедуру.

Передавать фактические параметры процедуре можно по-разному. Используются несколько способов передачи параметров. Выбор конкретного способа для определенной задачи зависит от количества используемых параметров и сложности их обработки.

1. Способ передачи параметров через регистры: программа перед вызовом заносит входные параметры в некоторые регистры процессора, а после возврата выбирает из регистров значения результатов.

2 Способ передачи параметров по значению: перед обращением к процедуре основная процедура вычисляет значения фактических параметров и записывает их в регистры.

Example 5.2.Вычислить c = max(a, b) + max(5, a-l), где все числа – знаковые размером в слово. Вычисление max(х, у) описать как процедуру. Условия передачи параметров: первый параметр (х) – через регистр АХ, второй параметр (у) – через регистр ВХ, результат (max) – в регистре АХ.

При этих условиях процедура и соответствующий фрагмент основной программы выглядят следующим образом: (для примера опишем процедуру как дальнюю):

;процедура: АХ= max (АХ,ВХ)

MAX PROC FAR

CMP AX, BX

JGE MAX1

MOV AX, BX

МАХ1: RET

MAX ENDP

;основная программа

MOV AX, А ;АХ:=а

MOV ВХ, В ;ВХ:=b

CALL MAX ;АХ:=mах(а,b)

MOV С, АХ ; сохранить АХ

MOV AX, 5 ;АХ:=5

MOV ВХ, А

DEC ВХ; ВХ:=а-1

CALL MAX ;AX:=max(5,a-l)

ADD С, АХ ;С:=mах(а,b)+mах(5,а-1)

3 способ передачи параметров по ссылке означает передачу адреса (имени) ячейки, соответствующей фактическому параметру, через регистр: основная программа записывает в какой-то регистр адрес фактической переменной, а процедура берет его оттуда. Используют регистры-модификаторы ВХ, ВР, SI или DI, т. к. процедуре придется модифицировать по этому регистру.

Example 5.3.Реализовать на Ассемблере процедуру на языке Паскаль:

procedure D (var x:integer);

begin

x:=x div 16

end;

Пусть в программе есть такие обращения к ней: D(A) и D(B), где А и В - имена переменных, значениями которых являются неотрицательные числа. Используем регистр ВХ: к началу выполнения процедуры в регистре ВХ должен находиться адрес той ячейки (А или В), содержимое которой она изменяет. Доступ к ячейки в этом случае можно получить с помощью конструкции [ВХ].

Фрагмент основной программы, соответствующий обращениям D(A) и D(B):

;процедура

D PROC

PUSH СХ ;сохранить cx

MOV CL, 4

SHR WORD PTR [BX], CL ; X:=x div 16

POP CX ;восстановить СХ

RET

D ENDP

;основная программа

LEA BX, A ;ВХ=адрес А

CALL D D(A)

LEA BX, B ;ВХ=адрес В

CALL D ; D(B)

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

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

4 способпередачи параметров через стек: программа перед вызовом заносит параметры в стек с помощью команды push. Чтобы подпрограмма могла изменять значения параметров, следует передавать ей не сами значения, а адреса параметров. Используется в случае большого количества параметров.

Выполнение процедуры должно начинаться со следующих команд («входные» действия процедуры):

Р PROC

PUSH ВР; сохранить ВР

MOV BP,SP ; ВР - на вершину стека

команды процедуры

После записи в стек старого значения ВР (ВРст) для доступа к параметрам процедуры надо использовать выражение вида [ВР+i], где i=2*n (n – размерность параметра).

При выходе из процедуры стек должен быть в том же состоянии, в каком он был после «входных» действий. Для восстановления состояния стека выполняются «выходные» действия:

POP ВР ;восстановить старое значение ВР

RET 2*k ;очистка стека от k параметров-слов и возврат

Р ENDP

По команде RET i*k из стека удаляется адрес возврата, затем стек очищается на указанное операндом число байтов и далее выполняется переход по адресу возврата.






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.