
- •Министерство образования Российской Федерации
- •Самарский государственный технический университет
- •2. Оформление курсового проекта
- •3. Описание вариантов заданий
- •Перечень операций подлежащих программированию
- •4. Архитектура микропроцессоров
- •4.1. Микрокомпьютер
- •4.2. Структура микропроцессора
- •4.3. Блок управления и синхронизации
- •4.4. Система команд
- •4.4.1. Фаза выборки и дешифрации
- •Обозначения, используемые при описании команд,
- •Команды передач управления
- •Команды обращения к подпрограммам
- •Арифметические и логические команды
- •Команды ввода/вывода
- •Специальные команды
- •4.4.2. Фаза выполнения
- •Команды пересылки
- •Команды с непосредственным адресом
- •Команды обращения к памяти
- •Команды передачи управления
- •Команды обращения к подпрограммам
- •Арифметические и логические команды
- •Команды ввода/вывода
- •Специальные команды
- •4.5. Способы адресации
- •Прямая адресация
- •Непосредственная адресация
- •Индексная адресация
- •Косвенная адресация
- •Относительная адресация
- •Страничная адресация
- •4.6. Некоторые другие команды, специфичные для микропроцессоров
- •Арифметические и логические команды с операндами в главной памяти
- •Команды условных переходов
- •Команды обработки данных
- •5. Программирование для микропроцессоров
- •5.1. Программирование на машинном языке
- •Пример программы: «прибавить константу к числу в памяти и записать результат снова в память»
- •5.2. Разветвления в программах
- •5.3. Программирование циклов
- •Программа вычисления суммы десяти 8-битовых чисел без знаков
- •5.4. Программирование сложных разветвлений
- •Программа сложного разветвления, использующая таблицу переходов
- •5.5. Подпрограммы
- •Вход в подпрограмму и выход из подпрограммы
- •Параметры подпрограммы
- •Пример передачи параметров от главной программы в подпрограмму через общие регистры
- •Сложение с п-кратной точностью
- •Подпрограмма сложения чисел с двойной точностью
- •Умножение
- •5.6. Загрузка программ
- •Подпрограмма умножения целых положительных чисел Распределение общих регистров: r2: счетчик, r3: множимое y, r4: множитель X, r5: ст. Часть произведения Рн, r6:мл. Часть произведения pl
- •80 (Маска)
- •Программа-загрузчик
- •5.7. Программирование на языке ассемблера
- •Ассемблеры
- •Язык ассемблера
- •Программа на языке ассемблера, соответствующая программе табл. 5.3
- •Директивы ассемблера
- •Макрокоманда
- •Список команд иллюстрированного микропроцессора
- •Список команд иллюстративного микропроцессора
- •Условные графические обозначения в схемах
- •Продолжение Приложение п3
- •Продолжение Приложение п3
- •Продолжение Приложение п3
- •Список литературы
- •Содержание и объем курсового проекта …………………………….
- •Оформление курсового проекта ……………………………………...
- •Продолжение Приложение п2
- •Продолжение Приложение п2
- •Продолжение Приложение п2
- •Продолжение Приложение п2
- •Приложение п2
- •Приложение п2
- •Список литературы
Параметры подпрограммы
Важный аспект понятия подпрограммы связан со способом передачи данных, которые называются параметрами или аргументами, между главной программой и подпрограммой. Существует несколько способов решения этой проблемы. Во-первых, аргументы можно загружать в общие регистры перед переходом на подпрограмму. Подпрограмма, написанная в предположении, что аргументы находятся в регистрах, выполняется и оставляет свои результаты также в регистрах. Главная программа после возврата из подпрограммы берет результаты из общих регистров.
Иллюстрирует такой подход программа в табл. 5.5.
Таблица 5.5
Пример передачи параметров от главной программы в подпрограмму через общие регистры
Ячейка памяти |
Команда на машин ном язык |
Команда в символической форме |
Комментарий |
. . . . . . . . . |
|||
0020 |
70 |
LDR 0 |
Загрузка первого аргумента в регистр D |
0021 |
80 |
80 |
|
0022 |
00 |
00 |
|
0023 |
0D |
MOV 0 to D |
|
0024 |
70 |
LDR 0 |
Загрузка второго аргумента в регистр Е |
0025 |
80 |
80 |
|
0026 |
50 |
50 |
|
0027 |
0Е |
MOV 0 to E |
|
0028 |
7F |
JMS |
Переход на подпрограмму в ячейке 9000 |
0029 |
90 |
90 |
|
002А |
00 |
00 |
|
002В |
— |
— |
Точка возврата из подпрограммы. |
. . . . . . . . . |
Предполагается, что аргументы находились в ячейках памяти 8000 и 8050. Главная программа загружает их в общие регистры D и Е, после чего передает управление на подпрограмму в ячейке 9000 с помощью команды «переход на подпрограмму».
Если нужные подпрограмме аргументы находятся в последовательных ячейках памяти, в главной программе перед переходом на подпрограмму можно загрузить в регистры Н и L (или в любую другую пару общих регистров) адрес первого аргумента. Ответственность за выборку аргументов возлагается при этом на подпрограмму. Достоинство этого способа в том, что не нужно загружать сразу все аргументы в регистры — программа будет выбирать из их памяти по мере необходимости. Такой подход, очевидно, предпочтительнее, когда число аргументов превышает число свободных общих регистров. Кроме того, этот подход решает проблему обратной передачи результатов. Например, достаточно под результаты зарезервировать часть списка аргументов.
В рассмотренном случае главная программа загружала в регистры Н и L адрес первого аргумента и тем самым передавала в подпрограмму список аргументов. Возможен вариант, когда главная программа передает в подпрограмму не список самих аргументов, а список адресов аргументов. В этом случае в регистры Н и L загружается адрес первого адреса в списке адресов аргументов. Таким образом, чтобы получить аргумент, подпрограмма должна сначала получить адрес из списка адресов, а уже затем сам аргумент. Этот способ обладает тем преимуществом, что аргументы не обязательно должны располагаться в последовательных ячейках памяти, а могут быть разбросаны произвольным образом.