Архитектура ЭВМ. Учебные машины



бет2/4
Дата14.06.2016
өлшемі377.92 Kb.
#135088
1   2   3   4

§3. Учебные машины.


Ранее мы рассмотрели общие принципы построения ЭВМ. В данном параграфе мы разберем 4 учебные вычислительные машины. Эти машины называются учебными, потому что они не существуют на самом деле. Однако они помогут нам представить работу реальных ЭВМ, разобрать некоторые проблемы, возникающие при построении ЭВМ, и способы решения этих проблем.

Для записи содержимого ячеек будем пользоваться шестнад­цатиричными цифрами.



П.1. Учебная трехадресная машина УМ-3.

1. Структура процессора.



Кроме тех регистров, которые мы обсуждали в §2, в арифметическом устройстве УМ-3 имеются регистры первого операнда ОП1, второго операнда ОП2 и результата РЕЗ.

2. Оперативная память.

Ячейка - 14 шестнадцатиричных разрядов.

Объем ОП - 164 ячеек с адресами 0000FFFF.

Представление чисел: число содержится в одной ячейке; отрицательные числа записываются в дополнительном коде.

Представление команд: команда занимает одну ячейку. Разряды ячейки имеют следующий смысл (формат команд):














































       

КОП А1 А2 А3


Здесь КОП – код операции (указывает, какую машинную операцию надо выполнить); А1, А2, А3 – адреса первого, второго операндов и результата. Разрядность адресов совпадает с разрядностью регистра СА и определяется объемом ОП (а именно, количеством возможных адресов). Количество разрядов в регистрах ОП1, ОП2, РЕЗ и РК должно совпадать с количеством разрядов ячейки ОП, так как в ОП1, ОП2 и РЕЗ должны поместиться числа, а в РК – команда, которые занимают по одной ячейке ОП.
3. Система команд УМ-3.

Система команд ЭВМ – это набор всех машинных команд данной ЭВМ.


Название

КОП

Операция

Примечание

останов

99

стоп

А1,А2,А3 - любые

пересылка

00

[А1]  [А3]

А2 - любой







арифметические




сложение

01

[А1]+[А2]  [А3]

Устанавливаются

вычитание

02

[А1]-[А2]  [А3]

арифметические флаги

умножение










со знаком

03

[А1]*[А2]  [А3]




без знака

13







деление










со знаком

04

[А1] div [А2]  [А3], [А1] mod [А2]  [А3+1]

без знака

14
















переходы




безусловный

80

перейти к А3

А1,А2 - любые

условные







После выполнения

по =

81

при [А1]=[А2]

перейти к А3



команды перехода работа продолжается

по 

82

при [А1][А2]

перейти к А3



с команды, записанной в ячейке с адресом A3

по 

с/зн - 83 б/зн - 93

при [А1][А2] перейти к А3

по 

с/зн - 84 б/зн - 94

при [А1] [А2] перейти к А3

по 

с/зн - 85 б/зн - 95

при [А1][А2] перейти к А3

по 

с/зн - 86 б/зн - 96

при [А1] [А2] перейти к А3

В таблице использовано обозначение [A] – содержимое ячейки с адресом A.

Арифметические команды выполняются следующим образом: содержимое ячеек с адресами A1 и A2 пересылается в регистры ОП1 и ОП2, выполняется арифметическая операция (результат – в регистре РЕЗ), содержимое регистра РЕЗ пересылается в ячейку с адресом А3. Следует обратить внимание на то, что есть две команды умножения и две команды деления. Программист использует подходящую команду в зависимости от того, с какими данными (числами со знаком или без знака) должна работать программа. Команда деления дает два результата – частное и остаток. Они записываются в соседние ячейки: частное – по адресу А3, остаток – в ячейку с адресом А3+1.

Действие команд перехода заключается в изменении содержимого регистра СА. При этом на следующем такте работы ЦП будет выполнять команду, записанную в ячейке с адресом А3. (Вспомните §2.)

В командах условного перехода производится проверка соответствующего условия. Если условие выполняется, тогда в СА записывается адрес А3. Сравнение значений [ А1] и [А2] выполняется так: в ОП1 записывается [А1], в ОП2 – [А2]; выполняется вычитание ОП1-ОП2, при этом получают значение все четыре арифметических флажка. По значениям флагов и определяется истинность условия. Некоторым условиям (например,<) соответствуют разные наборы значений флагов для разных данных – чисел со знаком и чисел без знака. Поэтому команды переходов для чисел со знаком и чисел без знака разные.

Рассмотрим на примерах соответствие между условиями и значениями флагов.

1) Переход по равенству. В результате вычитания [А1] - [А2] получится ZF=1 тогда и только тогда, когда [А1] = [А2].

2) Переход по "меньше", числа без знака.

[А1] < [А2]  [А1] - [А2] < 0  CF=1.

3) Переход по "меньше", числа со знаком. Если вычитаются числа со знаком, то при [А1] < [А2], [А1] - [А2] < 0, возможны ситуации

а) результат вычислили правильно (OF=0) и он оказался отрицательным , значение SF=1,

б) результат вычислили неправильно (OF=1), при этом знак вычисленного значения противоречит знаку числа [А1] - [А2], вычис­лен­ный результат оказался положительным, то есть SF=0.

Таким образом, для чисел со знаком
[А1] < [А2]  [А1] - [А2] < 0  (OF=1) and (SF=0) or (OF=0) and (SF=1), или более коротко OF  SF. При выполнении команды перехода по "меньше" для чисел со знаком процессор проверяет выполнимость условия OF  SF.
4. Разберем теперь несколько примеров программ для УМ-3. Условимся, что перед началом работы

1) в СА записывается 0100, то есть выполнение начинается с команды по адресу 0100,

2) в ячейки ОП уже записаны все данные, необходимые для работы программ (ввод и вывод не рассматриваем).

Пример 1. Вычислить значение x= ( a mod 50 - b )2 по заданным a и b.

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




Адрес


Содержимое

0000

a

0001

3216 (=5010)

0002

b

0003

x

0004

рабочая (потребуется для деления)

Программа.




Адрес

Содержимое ячейки

Комментарий

0100

04 0000 0001 0003

a mod 50  [0004]

0101

02 0004 0002 0003

[0004] - bx

0102

03 0003 0003 0003

xxx

0103

99 0000 0000 0000

стоп

Напомним, что деление даёт два результата, поэтому первая команда программы записывает в [0003] x div 50 (это значение в дальнейшем не используется) и в [0004] a mod 50.



Пример 2. Вычислить

S1 = max(a,b) * 20,

S2 = min(a,b) div 3.

Вычисления организуем так:



begin if a < b then begin S1 := b; S2 := a end

else begin S1 := a; S2 := b end;

S1 := S1 * 20;

S2 := S2 div 3

end.

Данные:


0000 a

0001 b

0002 1416 (=2010)

0003 3


0004 S1

0005 S2

0006 рабочая.

Будем считать, что работаем с числами без знака.

Программа:


Адрес

Содержимое ячейки

Комментарий




0100

94 0000 0001 0104

if ab, go to 0104




0101

00 0001 0000 0004

S1 := b

часть

0102

00 0000 0000 0005

S2 := a

then

0103

80 0000 0000 0106

go to 0106




0104

00 0000 0000 0004

S1 := a

часть

0105

00 0001 0000 0005

S2 := b

else

0106

13 0004 0002 0004

S1 := S1 * 20




0107

14 0005 0003 0005

S2 := S2 div 3




0108

99 0000 0000 0000

стоп





Пример 3. Вычислить p = n!.

Алгоритм:



begin p:=1; k:=2;

while k  n do

begin p := p * k;

k := k + 1

end

end.

В этой задаче могут возникнуть довольно большие положительные числа, поэтому будем работать с числами без знака.

Данные:

0000 n



0001 1

0002 2


0003 p

0004 k

Программа:


0100

00 0001 0000 0003

p :=1

0101

00 0002 0000 0004

k := 2

0102

95 0004 0000 0106

if k > n, go to 0106

0103

13 0003 0004 0003

p := p * k

0104

01 0004 0001 0004

k := k + 1

0105

80 0000 0000 0102

go to 0102

0106

99 0000 0000 0000

стоп

Заметим, что в машинной программе начало цикла while k n do заменилось на переход на конец программы по отрицанию условия. Тело цикла заканчивается безусловным переходом на начало цикла.





Достарыңызбен бөлісу:
1   2   3   4




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет