Всего на сайте:
248 тыс. 773 статей

Главная | Информатика

Подпрограмму через общие регистры  Просмотрен 139

Ячейка памяти Команда на машин ном язык Команда в символической форме Комментарий
. . . . . . . . .    
LDR 0 Загрузка первого аргумента в регистр D
   
   
0D MOV 0 to D  
LDR 0 Загрузка второго аргумента в регистр Е
   
   
MOV 0 to E  
7F JMS Переход на подпрограмму в ячейке 9000
   
002А    
002В Точка возврата из подпрограммы.
. . . . . . . . .    

 

Предполага­ется, что аргументы находились в ячейках памяти 8000 и 8050. Глав­ная программа загружает их в общие регистры D и Е, после чего пере­дает управление на подпрограмму в ячейке 9000 с помощью команды «переход на подпрограмму».

Если нужные подпрограмме аргументы находятся в последователь­ных ячейках памяти, в главной программе перед переходом на под­программу можно загрузить в регистры Н и L (или в любую другую пару общих регистров) адрес первого аргумента. Ответственность за выборку аргументов возлагается при этом на подпрограмму. Достоинство этого способа в том, что не нужно загружать сразу все аргументы в регистры — программа будет выбирать из их памяти по мере необходи­мости. Такой подход, очевидно, предпочтительнее, когда число аргу­ментов превышает число свободных общих регистров. Кроме того, этот подход решает проблему обратной передачи результатов. Например, достаточно под результаты зарезервировать часть списка аргументов.

В рассмотренном случае главная программа загружала в регистры Н и L адрес первого аргумента и тем самым передавала в подпрограмму список аргументов. Возможен вариант, когда главная программа передает в подпрограмму не список самих аргументов, а список адресов аргументов. В этом случае в регистры Н и L загружается адрес первого адреса в списке адресов аргументов. Таким образом, чтобы получить аргумент, подпрограмма должна сначала получить адрес из списка адресов, а уже затем сам аргумент. Этот способ обладает тем преимуществом, что аргументы не обязательно должны располагаться в последовательных ячейках памяти, а могут быть разбросаны про­извольным образом.

 

 

Сложение с п-кратной точностью

 

Большинство современных микрокомпьютеров работает со словами длиной 8 бит. Очевидно, что для многих задач такая точность недостаточна, и, следовательно, нужны средства для представления чисел с более высокой точностью. Очевидный спо­соб — это представлять одно число двумя или большим количеством слов. Такие числа можно хранить в последовательных ячейках памя­ти или в последовательных общих регистрах. Будем называть их чис­лами n - кратной точности. Проблема тогда сведется к выполнению ариф­метических действий над числами n -кратной точности с помощью команд, работающих с данными размером в одно слово. Наличие команд «сложения/вычитания с переносом» значительно упрощает ре­ализацию сложения и вычитания над числами n-кратной точности.

Процедуру сложения чисел без знаков с двойной точностью можно реализовать, например, следующим образом. Младшие слова двух чисел складываются без начального переноса, при этом получается младшее слово суммы и итоговый перенос из старшего разряда. Старшие слова двух чисел складываются вместе с входным переносом, ко­торый равен итоговому переносу, полученному при сложении млад­ших слов. Окончательный результат, т. е. сумма,— это число с двой­ной точностью и итоговый перенос. В виде блок-схемы эта процедура представлена на рис. 18.

В табл. 6 показана подпрограмма, реализующая эту процедуру. Исходные числа с двойной точностью обозначены через X и Y, а сум­ма — через S. Предполагается, что общие регистры 1 и 2 содержат соот­ветственно старшую и младшую части X (обозначенные как Хн и XL), а регистры 3 и 4 — старшую и младшую части Y (обозначенные как yh и yl). Старшая и младшая части суммы должны быть поме­щены в регистры 5 и 6 соответственно.

Таблица 5.6

Предыдущая статья:Вход в подпрограмму и выход из подпрограммы Следующая статья:Подпрограмма сложения чисел с двойной точностью
page speed (0.0173 sec, direct)