Скачать 1.24 Mb.
|
Соглашения о связях для языка Паскаль
2. Передача параметров. Теперь рассмотрим механизм передачи параметров из вызывающей программы в вызываемую. Большинство компиляторов языков высокого уровня для реализации вызова процедур используют передачу параметров в стек. При этом способе передачи данных перед выполнением вызова все требуемые параметры заносятся в стек. После вызова вызывающая программа осуществляет доступ к данным без их пересылки. Пример 1. Передача параметров через стек Вызывающая процедура ... ... push ; пересылка последнего аргумента ... ... push ; пересылка второго аргумента push ; пересылка первого аргумента call ; вызов процедуры add sp,2N ; очистка стека ... ... Вызываемая процедура PROC FAR ; пример вызова процедуры far push bp ; сохранение старого BP mov bp,sp ; указатель ссылки на стек ... ... mov ,[bp+6] ; доступ к первому параметру mov ,[bp+8] ; доступ ко второму параметру ... ... mov ,[bp+4+2N] ; доступ к последнему параметру ... ... pop bp ; удаление сохраненного BP ret ; возврат в вызывающую программу ENDP Вызывающая процедура перед вызовом сохраняет в стеке адрес возврата. Поскольку дальняя процедура главная процедура сохраняет полный 4-х байтовый адрес (CS:IP). Вызываемая программа использует регистр BP для доступа к параметрам в стеке, но прежде она запоминает содержимое регистра BP, записывая его в стек. Затем программа помещает в регистр BP содержимое из регистра SP, так как в качестве индексного регистра может использоваться регистр BP, но не SP. Допустим первоначально регистр SP содержал значение 80h Запись каждого слова в стек уменьшает содержимое SP на 2:
BP=SP=72h Так как BP теперь также содержит 0072,то первый параметр (dummy1) будет по адресу BP+6, а N-й параметр по адресу BP+6+2•N. Перед возвратом в вызывающую программу в регистре BP восстанавливается первоначальное значение, а содержимое в регистре SP увеличивается на 2. Последняя команда RET представляет собой «длинный» возврат в вызывающую программу. По этой команде выполняются следующие действия:
Таким образом, осуществляется корректный возврат в вызывающую программу. Осталось одно небольшое пояснение. После команды вызова call следует команда add sp,2N. Число 2N представляет собой число байт в стеке использованных при передаче параметров. Эта команда “выталкивает” из стека ненужные больше параметры. 3. Ход работы.Для решения поставленной задачи я создал несколько текстовых файлов, в которых находятся исходные тексты программ. В файле rinako_c.cpp находится текст программы на С++ в которой производится вызов ассемблерных функций ,исходный текст которых находится в файле rinako_a.asm _______________________________________________________________________________________ C помощью транслятора tasm получил объектный файл rinako_a.obj . tasm /ml rinako_a.asm Флаг /ml я использовал для того, чтобы транслятор различал в названиях функций и переменных строчные и заглавные буквы. _______________________________________________________________________________________ Затем откомпилировал файл rinako_c.cpp при помощи утилиты bcc.exe и получил объектный файл rinako_с.obj bcc -ms -P –c rinako_с.cpp Флаг -ms указывает компилятору модель памяти программы. Флаг -Р указывает что надо использовать С++ компилятор. Флаг -с указывает что надо провести только компиляцию. а затем скомпоновал объектные файлы, получив исполняемый _______________________________________________________________________________________ При помощи утилиты tlink.exe я скомпановал полученные объектные файлы и получил исполняемый файл rinako.exe . tlink /с /Tde c0s+ rinako_с + rinako_a, rinako, rinako, cs Флаг /c указывает ,что необходимо различать строчные и заглавные буквы Флаг /Tde указывает тип исполняемого файла : DOS exe . _______________________________________________________________________________________ 4. Пояснения к исходным текстам .Организация связи программ на С++ и ассемблере требуют определенного описания, используемых взаимно функций и переменных. Так ассемблерная функция Func определяется в С++ модуле как: extern “C” void Func(void); Это говорит о том ,что данная функция находится в другом модуле. А также, что функция использует Си соглашение о связях. В ассемблерном модуле директива определения модели памяти используется следующим образом: .model small,c Второй операнд директивы указывает транслятору генерировать имена переменных и функций в соответствии с Си соглашением об именах. При написании программ было учтено что в модели small все функции имеют тип NEAR и расположены в одном сегменте. по умолчанию генерируется близкий вызов функций. large функции имеют тип FAR и расположены в разных сегментах. по умолчанию генерируется дальний вызов функций. Поэтому ассемблерные процедуры принимающие параметры через стек должны писаться с учетом модели памяти. В частности для корректного вызова Си функции из ассемблера необходимо явно указывать тип вызова : call far ptr Func ;для модели large call near ptr Func ;для модели small Список используемых функций. Adding – ассемблерная функция демонстрирует принятие двух параметров через стек и один параметр глобальный, затем выполняет сложение трех чисел и возвращает результат в С - функцию. Описание int adding(int,int); Функция принимает два параметра типа int. Возвращаемое значение int Printf – C - функция, которая вызывается из ассемблерного модуля, демонстрируя вывод строки на экран. Описание void printf(“String”); Функция принимает строку. Возвращаемое значение void Getch – C - функция, которая вызывается из ассемблерного модуля, демонстрируя ожидание нажатия какой либо кнопки для продолжения. Описание int getch(void); Функция принимает значение типа void Возвращаемое значение int – ASCII - код нажатой клавиши. Main – основная функция программы написанная на языке С++. Из функции производится вызов демонстрационных функций, перечисленных выше. 5. Исходные тексты программ.файл rinako_a.asm PUBLIC C adding EXTRN _printf, _getch, _a:word _data segment public 'data' text1 db 'Сейчас находимся в ASSEMBLERE и складываем эти три числа’,0 text2 db 13, 10, 'Нажмите любую клавишу для перехода в C++', 0 _data ends _text segment public 'code' assume cs:_text ;//////////////////////////////////////////////// adding proc near push bp mov bp,sp push offset text1 call near ptr _printf add sp,2 xor ax,ax mov ax,_a add ax,[bp+4] add ax,[bp+6] push ax push offset text2 call near ptr _printf add sp,2 call near ptr _getch pop ax pop bp ret adding endp ;//////////////////////////////////////////////// _text ends end Файл rinako_c.cpp #include #include extern "C" pascal far int adding (int b,int c); int a; void main(void) { int b,c,sum; clrscr(); printf("Сейчас МЫ находимся в С++\n"); printf("\nВведите три числа :\n"); scanf("%d%d%d",&a,&b,&c); sum=adding(b,c); printf("\nПерешли в С++\n"); printf("Сумма чисел равна :%d",sum); getch(); } 6. Демонстрация работы программы. Сейчас МЫ находимся в С++ Введите три числа: 10 20 30 Сейчас находимся в ASSEMBLERE и складываем эти три числа Нажмите любую клавишу для перехода в C++ Перешли в С++ Сумма чисел равна: 60 Лабораторная работа 2. Основы работы с MS-DOS (3) Задание : 1. Ознакомится: с версией ОС, с составом ОС. 2. Используя информационные утилиты DOS и третьих фирм, получить информацию по аппаратной и программной конфигурации, распределению оперативной памяти, резидентных программах и драйверах. 2. Создать вариант ОС на FD
3. Выполнить
5. Выполнить обработку текстовых файлов с использованием фильтров и перенаправления потоков ввода вывода. 6. Создать командный файл с передачей параметров, управлением отображением через ANSI-драйвер, проверкой кодов возврата и т.д. 7. Ознакомиться с возможностями дисковых утилит ScanDisk, Defragmenter, Backup. 8. Ознакомиться с работой дискового компрессора DoubleSpace. Создать сжатый логический диск на дискете.
Систему можно разделить на шесть основных частей. Первая часть – это система BIOS в ПЗУ. Это система поставляется вместе с компьютером и может использоваться любой операционной системой. Функция BIOS в ПЗУ заключается в обслуживании основных и наиболее фундаментальных операций компьютера. Поскольку система BIOS в ПЗУ для PC является "встроенной" в комптютер, она является не только составной частью ДОС, но и составной частью любой операционной системы .Еще одна часть - "загрузочная запись" дискеты. Загрузочная запись - это очень короткая и простая программа, находящаяся в первом секторе загрузочной дискеты. Функция этой программы заключается в запуске процесса загрузки операционной системы после включения компьютера или перезапуска (нажатия клавиш CTRL-Alt-Del). Загрузочная запись считывает еще два модуля операционной системы в память и они завершают процесс загрузки DOS. Следующие две части DOS представляют собой дисковые файлы IO.SYS и MSDOS.SYS. Обе эти части загружаются в память загрузочной записью и остаются в памяти во время работы DOS. Файл IO.SYS представляет собой изменяемое дополнение к системе BIOS в ПЗУ. Система BIOS в ПЗУ, IO.SYS и драйверы устройств, вместе взятые образуют "физический" уровень операционной системы.Файл MSDOS.SYS реализует основные услуги DOS. Это "логический" уровень ввода/вывода операционной системы. Оба эти файла являются "скрытыми" системными файлами. Имена этих файлов не включаются в оглавление диска, вызываемое по команде DIR. Одна из функций IO.SYS заключается в загрузке еще одного модуля операционой системы.Пятая часть - это дисковый файл COMMAND.COM. Главная функция COMMAND.COM заключается в обработке команд, вводимых пользователем. Команды DOS, считающиеся внутренними, такие как TYPE, COPY и DIR фактически реализуются программами COMMAND.COM. Собственно COMMAND.COM разделяется на две части: одна становится частью MSDOS.SYS, а вторая - процессором дополнительных команд. Шестая и последняя часть DOS состоит из всех внешних команд, таких как FORMAT и MEM. Функции этих команд различны и реализующие их программы загружаются в память только в случае необходимости. В отличие от остальных пяти частей DOS, все эти дополнительнве программы не являются интегральной составляющей DOS, хотя они и поставляются вместе с ней. Некоторые из этих дополнительных программ, например, FORMAT, настолько важны, что обойтись без них практически невозможно.Внешние команды являются нерезидентными частями DOS, поскольку они не находятся в памяти постоянно.
|
Учебно-методический комплекс дисциплины «электронно-программное обеспечение гидроакустики» Учебно-методический комплекс составлен в соответствии с требованиями государственного образовательного стандарта высшего профессионального... |
Учебно-методический комплекс по дисциплине «Маркетинг» Учебно-методический комплекс предназначен для студентов очной формы обучения, содержит план лекционных и практических занятий, рекомендации... |
||
Учебно-методический комплекс по дисциплине «Маркетинг» Учебно-методический комплекс предназначен для студентов заочной формы обучения, содержит план лекционных и практических занятий,... |
Учебно-методический комплекс дисциплины «Правовое обеспечение экономики» Учебно-методический комплекс составлен в соответствии с требованиями государственного образовательного стандарта высшего профессионального... |
||
Учебно-методический комплекс по дисциплине «Языки и среды реализации web -приложений» Учебно-методический комплекс предназначен для студентов заочной формы обучения, содержит план лекционных и практических занятий,... |
Учебно-методический комплекс дисциплины «Правовое обеспечение финансовых решений» Учебно-методический комплекс составлен в соответствии с требованиями федерального государственного образовательного стандарта высшего... |
||
Учебно-методический комплекс дисциплины «организационное поведение» Учебно-методический комплекс дисциплины составлен в соответствии с требованиями государственного образовательного стандарта высшего... |
Учебно-методический комплекс дисциплины «Торговое оборудование» Учебно-методический комплекс дисциплины составлен в соответствии с требованиями государственного образовательного стандарта высшего... |
||
Учебно-методический комплекс дисциплины «Русский язык и культура речи» Учебно-методический комплекс дисциплины составлен в соответствии с требованиями государственного образовательного стандарта высшего... |
Учебно-методический комплекс дисциплины обсужден на заседании кафедры... Учебно-методический комплекс дисциплины составлен на основании требований государственного образовательного стандарта высшего профессионального... |
||
Учебно-методический комплекс дисциплины Учебно-методический комплекс дисциплины составлен на основании государственного образовательного стандарта высшего профессионального... |
Учебно-методический комплекс дисциплины Учебно-методический комплекс дисциплины составлен на основании государственного образовательного стандарта высшего профессионального... |
||
Учебно-методический комплекс дисциплины архитектура ЭВМ 090104. 65... Учебно-методический комплекс дисциплины составлен на основании требований государственного образовательного стандарта высшего профессионального... |
Учебно-методический комплекс дисциплины «коммерческое право» Учебно-методический комплекс дисциплины составлен в соответствии с требованиями государственного образовательного стандарта высшего... |
||
Учебно-методический комплекс дисциплины «римское право» Учебно-методический комплекс дисциплины составлен в соответствии с требованиями государственного образовательного стандарта высшего... |
Учебно-методический комплекс дисциплины «Таможенное право» Учебно-методический комплекс дисциплины составлен в соответствии с требованиями государственного образовательного стандарта высшего... |
Поиск |