Анимация
JavaScript


Главная  Библионтека 

0 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 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Левая часть команды, ±АА, определяет адрес. (Обратите внимание, что знак является частью адреса.) ГГоле I, которое следует за адресом,-это спецификация индекса, которую можно при>1енять для модификации фактического адреса. Если I = О, то адрес ±АА используется без изменений. В противном случае в поле I должно содержаться число г от 1 до 6, и тогда содержимое индексного регистра Ь алгебраически добавляется к ±АА перед выполнением команды. Полученный результат используется как адрес. Процесс индексирования выполняется для каждой команды. Обозначим буквой "М" адрес, получаемый после каждой операции индексирования. (Если после добавления содержимого индексного регистра к адресу ±АА получается результат, который не помещается в двух байтах, то значение М будет неопределенным.)

Для большинства команд М указывает на ячейку памяти. Термины "ячейка памяти" и "адрес ячейки памяти" в этой книге почти всегда являются эквивалентными. Предполагается, что имеется 4 ООО ячеек памяти с номерами от О до 3 999 Поэтому адрес каждой ячейки можно представить с помощью двух байтов. Для каждой команды, в которой М обозначает ячейку памяти, должно выполняться неравенство О < М < 3999. В этом случае запись CONTENTS (М) будет обозначать величину, которая хранится в ячейке с адресом М.

Для некоторых команд "адрес" М имеет несколько иной смысл; он может даже быть отрицательным. Так, например, одна команда добавляет М к индексному регистру и при этом принимается во внимание знак М.

Форма записи. Чтобы сделать команды более читабельными, для обозначения команды типа (3) будет использоваться следующая форма записи:

ОР ADDRESS,1(F)

- часть

Здесь GP - символическое имя кода операции (часть С) команды, ADDRESS-±АА, I и F - поля I и F соответственно.

Если I равно нулю, то запись "Д" опускается. Если F-стандартная F-спецификация для данной команды, то запись "(F)" использовать не нужно. Практически для всех команд стандартной Р-спецификацией является (0:5), что соответствует целому слову. Если же стандартной является другая спецификация F, то она будет упомянута особо при описании конкретной команды

Например, команда загрузки числа в аккумулятор называется LDA и ее код операции - 8. Имеем следующее.

Условное представление

Реальное представление команды в цифровом виде

2000,2(0:3)

2000

2000,2(1:3)

2000

2000(1:3)

2000

2000

2000

-2000.4

- 2000

Команда "LDA 2000,2(0:3)" читается следующим образом: содержимое ячейки 2000 с индексом 2, поле "нуль-три".

"Загрузить в регистр А



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

+ 2000 2

число -1-2000 занимает два соседних байта и знак. Заметим, что реальное содержимое байта (1:1) и байта (2:2) будет меняться при переходе от одного компьютера MIX к другому, так как меняется размер байта. В следующем примере подобной записи

- 10000 3000

представлено слово, состоящее из двух полей. В первом поле, содержащем три байта и знак, находится число -10000, а во втором поле, размером два байта, - число 3000. Когда слово разбито на несколько полей (т. е. содержит более одного поля), говорят, что оно "упаковано".

Описания команд. В замечаниях, следующих за записью (3) (см. выше), были определены величины М, F и С для любого слова, используемого в качестве команды. А теперь определим действия, соответствующие каждой команде.

Команды загрузки

• LDA (load А - загрузить А). С = 8; F = поле.

Заданное поле contents(m) заменяет предыдущее содержимое регистра А.

Во всех операциях, в которых в качестве входного значения используется частичное поле, знак учитывается, если он является частью этого поля; в противном случае берется знак "-ь". По мере загрузки поле сдвигается в правую часть регистра.

Примеры. Если F - стандартная спецификация поля (0:5), то все содержимое ячейки М копируется в гА. Если F - спецификация (1:5), то абсолютное значение contents (М) загружается со знаком . Если в М содержится команда и F-это спецификация (0:2), поле "±АА" загружается как

±

Предположим, в ячейке с адресом 2000 содержится слово

тогда, загружая различные частичные поля, получим следующие результаты.

Команда Последующее содержимое гА LDA 2000

LDA 2000(1:5)

LDA 2000(3:5)

LDA 2000(0:3)

LDA 2000(4:4)

LDA 2000(0:0)

LDA 2000(1:1)



(В последнем примере значение частично не определено, так как размер байта переменный.)

• LDX (load Х--загрузить X). С = 15; F = поле.

Эта команда идентична LDA, за исключением того, что вместо гА загружается гХ.

• LDi (load i-загрузить г). С = 8 -h г; F = поле.

Эта команда идентична LDA, только вместо г А загружается rli. Индексный регистр содержит только два байта (а не пять) и знак; байты 1, 2, 3 всегда считаются нулевыми. Поэтому, если установить для байтов 1, 2 или 3 любые значения, не равные нулю, то команда LDi станет неопределенной.

В описаниях всех команд "г" обозначает целое число, 1 < г < б. Таким образом. LDi обозначает шесть различных команд: LD1, LD2, ..., LD6.

• LDAN (load А negative - загрузить в А с обратным знаком). С = 16; F = поле.

• LDXN (load X negative - загрузить в X с обратным знаком). С = 23; F = поле.

• LDiN (load г negative - загрузить в г с обратным знаком). С = 16 -Ь г; F = поле. Эти восемь команд идентичны командам LDA, LDX и LDi соответственно, но только величины загружаются с обратным знаком.

Команды записи в память

• STA (store А - записать А). С = 24; F = поле.

Часть содержимого г А заменяет поле CONTENTS (М), которое указано в F Другие части CONTENTS (М) остаются неизменны.ми.

Для операции записи в память поле F имеет противоположный смысл по сравнению с операцией загрузки. Нужное количество байтов в поле, взятом из правой части регистра, в случае необходимости сдвигается влево, а затем помещается в соответствующее поле CONTENTS (М). Знак меняется только тогда, когда он является частью поля. Содержимое регистра также остается без изменений.

Примеры. Предположим, в ячейке 2000 содержится

а в регистре А -

Тогда получаем следующее.

Команда Содержимое ячейки 2000 после выполнения команды

STA 2000

STA 2000(1:5)

STA 2000(5:5)

STA 2000(2:2)

STA 2000(2:3)

STA 2000(0:1)

• STX (store X -записать X) С = 31: F = поле.

Идентична команде STA, но только сохраняется содержимое гХ, а не гА.



0 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 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225