Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[147]

read

\

(controller gcd-loop

(assign a (op read))

(assign b (op read)) test-b

(test (op =) (reg b) (const 0)

(branch (label gcd-done))

(assign t (op rem) (reg a) (reg b))

(assign a (reg b))

(assign b (reg t))

(goto (label test-b)) gcd-done

(perform (op print) (reg a)) (goto (label gcd-loop)))

Рис. 5.4: Машина НОД, которая считывает входные числа и печатает результат.


Команда

(assign t (op rem) (reg a) (reg b))

в определении контроллера НОД заменяется на последовательность команд, содержащую цикл, как показано на рисунке 5.6.

Упражнение 5.3.

Спроектируйте машину для вычисления квадратных корней методом Ньютона, как описано в разделе 1.1.7:

(define (sqrt x)

(define (good-enough? guess)

(< (abs (- (square guess) x)) 0.001)) (define (improve guess)

(average guess (/ x guess))) (define (sqrt-iter guess) (if (good-enough? guess) guess

(sqrt-iter (improve guess)))) (sqrt-iter 1.0))

Для начала предположите, что операции good-enough? и improve имеются как примитивы. Затем покажите, как развернуть их с помощью арифметических операций. Опишите каждую из версий машины sqrt, нарисовав диаграмму путей данных, и написав определение контроллера на языке регистровых машин.

5.1.3 Подпрограммы

При проектировании машины для некоторого вычисления мы часто предпочтем устроить так, чтобы компоненты ее разделялись различными частями вычисления, а не дублировались. Рассмотрим машину, которая включает в себя два вычисления НОД - одно находит НОД содержимого регистров a и b, а другое НОД содержимого регистров c и d. Для начала можно предположить, что имеется элементарная операция gcd, а затем развернуть два экземпляра gcd в терминах более простых операций. На рисунке 5.7 показаны только части получившихся путей данных, относящиеся к НОД. Связи с остальными частями машины опущены. Кроме того, на рисунке показаны соответствующие сегменты последовательности команд контроллера машины.

В этой машине два блока вычисления остатка и два блока проверки на равенство. Если повторяющиеся компоненты сложны, как, например, блок вычисления остатка, такое построение машины окажется неэкономным. Можно избежать дублирования компонент путей данных, если использовать для обоих вычислений НОД одни и те же компоненты, при условии, что такое решение не повлияет на остальные вычисления большой машины. Если к тому времени, как контроллер добирается до gcd-2, значения в регистрах a и b не нужны (или если их можно временно сохранить в каких-то еще регистрах), то мы можем изменить машину так, чтобы она использовала регистры a и b, а не c и d, при вычислении второго НОД, так же как и при вычислении первого. Так у нас получится последовательность команд контроллера, показанная на рисунке 5.8.

Мы удалили одинаковые компоненты путей данных (так что они снова стали такими, как на рисунке 5.1), но теперь в контроллере содержатся две последовательности команд вычисления НОД, которые различаются только метками.


да

a <-b

b <-t

Рис. 5.5: Пути данных и контроллер уточненной машины НОД.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196]