1 / 28

Архитектура ЭВМ

Архитектура ЭВМ. Практика 6 . Организация подпрограмм. Процедуры. Процедура , часто называемая также подпрограммой , — это основная функциональная единица декомпозиции (разделения на несколько частей) некоторой задачи.

chloe
Download Presentation

Архитектура ЭВМ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Архитектура ЭВМ Практика 6. Организация подпрограмм

  2. Процедуры Процедура, часто называемая также подпрограммой, — это основная функциональная единица декомпозиции (разделения на несколько частей) некоторой задачи. Процедура представляет собой группу команд для решения конкретной подзадачи и обладает средствами получения управления из точки вызова задачи более высокого уровня и возврата управления в эту точку.

  3. Описание процедуры Для описания последовательности команд в виде процедуры в языке ассемблера используются две директивы: PROC и ENDP. Заголовок процедуры Тело процедуры Конец процедуры

  4. Место размещения процедуры Процедура может размещаться в любом месте программы в текущем, или во внешнем файле, но так, чтобы на нее случайным образом не попало управление. Рекомендуется записывать процедуры в конце кодового сегмента текущей программы, или в отдельном файле (модуле).

  5. Вызов и возврат из процедуры Для вызова подпрограммы (процедуры) используется команда: CALL<имя_процедуры> • Стек := ip; • ip := Адрес процедуры; Для возврата из подпрограммы (процедуры) используется команда: RET [число N] • ip := Стек; • Очистить стек на N байт;

  6. Способы размещения процедуры Методы разделения программы на модули

  7. Использование процедуры из текущего файла

  8. Объявление и использование внешних процедур Для того чтобы объявить о видимых извне объектах, программа должна использовать две директивы: - в вызывающем модуле: EXTRN имя:тип, …, имя:тип - в вызываемом модуле: PUBLIC имя, …, имя имя - имя переменной или процедуры; тип - для переменной: byte, word и т.д.; - для процедуры: proc [near]/far

  9. Использование процедуры из внешнего файла Текст главного файла:

  10. Использование процедуры из внешнего файла Текст внешнего файла:

  11. Компиляция программы из нескольких исходных файлов При создании программы, состоящей из нескольких модулей, каждый модуль транслируется (tasm.exe) по отдельности, а компоновщик (alink.exe) из нескольких объектных модулей строит один загрузочный (exe-файл). При этом, в списке объектных файлов первым должен быть главный файл (из которого вызываются другие), например: alink main mod1 mod2

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

  13. Способы передачи параметров Существуют следующие способы передачи параметров в процедуру и возврата результатов из процедуры: • через регистры; • через общую область памяти; • через стек.

  14. Пример 1: передача параметров через регистры • Составить программу вычисления: y = n! - m! • Для вычисления факториала создать подпрограмму (процедуру Factor с возвращением результата). • Процедуру Factorзаписать в текущем файле; • Передачу параметра в процедуру и возврат результата организовать через регистры cx и ax соответственно.

  15. Пример 2: передача параметров через стек • Составить программу вычисления выражения: • Для вычисления суммы создать процедуру Summa; • процедуру Summaразместить во внешнем файле; • передачу параметров (предел суммирования) передать через стек; • результат возвратить в регистре ax.

  16. Текст основного файла (main.asm)

  17. Текст внешнего файла (sum.asm) • Выполнить трансляцию файлов main.asm и sum.asm по отдельности; • Для компоновки дать команду: alink main sum

  18. Пример 3: передача параметров через общую память Этот вариант передачи аргументов предполагает, что вызывающая и вызываемая программы условились использовать некоторую область памяти как общую Для передачи параметров процедуры через общую память необходимо чтобы как в вызывающем модуле, так и в модуле, содержащем вызываемую процедуру был включен общий сегмент данных с одинаковой структурой описания переменных и атрибутом COMMON. Значение COMMON означает, что все сегменты, имеющие одинаковое имя объединяемых модулях, будут располагаться компоновщиком, начиная с одного адреса оперативной памяти. Это значит, что они будут просто перекрываться в памяти и, следовательно, совместно использовать выделенную память.

  19. Использование атрибута COMMON Например, для передачи параметров px, py и получения результата reможно использовать данные в сегменте данных mySegment, описанном следующим образом (как в вызывающем, так и в вызываемом модуле): В этом случае, все изменения, произведенные с переменными в одном модуле будут видны и в другом.

  20. Теоретический материал об использовании процедур

  21. Задание

  22. Практическое задание • Изучить пример программ, использующих процедуры для вычисления арифметических выражений. • Разработать программу для своего варианта арифметических действий. • Протестировать программу. Записать в отчет заданные исходные данные и полученные результаты.

  23. Отчет должен содержать: • Номер варианта, условие задачи • Текст программы с комментариями. • Результат тестирования программы (расчетные и полученные результаты тестирования).

More Related