Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Подпрограмму через общие регистры
Предполагается, что аргументы находились в ячейках памяти 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
|