Анимация
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

• STi (store i - записать j). С = 24 + i; F = поле.

Идентична команде STA, за исключением того, что сохраняется содержимое г1г, а не гА. Байты 1, 2 и 3 индексного регистра являются нулевыми, поэтому, если в гП содержится

значит, в нем находится

±

• STJ (store J - сохранить J). С = 32; F = поле.

Идентична команде STi, но только сохраняется rJ и знаком всегда является "+".

Для команды STJ стандартной спецификацией поля для F является (0:2), а не (0:5). И это естественно, так как STJ почти всегда выполняет запись в адресное поле команды.

• STZ (store zero - записать нуль). С = 33; F = поле.

Идентична команде STA, но только сохраняется нуль со знаком "+". Другими словами, заданное поле CONTENTS(М) обнуляется.

Арифметические команды. При выполнении операций сложения, вычитания, умножения и деления допускается спецификация поля. Спецификацию поля "(0:6)" можно использовать для указания операции с плавающей точкой (см. раздел 4.2). Но лишь в некоторых программах для MIX мы будем пользоваться этой возможностью, так как, в первую очередь, нас будут интересовать целочисленные алгоритмы.

Стандартной спецификацией поля, как обычно, является (0:5). Остальные поля имеют такой же смысл, как при выполнении команды LDA. Буквой "V" будем обозначать заданное поле CONTENTS (М). Таким образом, V - это значение, которое должно быть загружено в регистр А, если кодом операции является LDA.

• ADD (сложение). С = 1; Б = поле.

V добавляется к гА. Если абсолютное значение результата слишком велико для того, чтобы поместиться в регистре А, то для триггера переполнения устанавливается значение 1, а в гА остается значение, которое выглядит так, как будто "1" перенесено в другой регистр слева от гА. (В противном случае значение для триггера переполнения не меняется.) Если результат равен нулю, то знак регистра гА остается неизменным.

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

STA 2000

LDA 2000(5:5)

ADD 2000(4:4)

ADD 2000(3:3)

ADD 2000(2:2)

ADD 2000(1:1)

Иногда эту операцию называют сложением наискосок.

В одних компьютерах MIX переполнение происходит, а в других - нет, что связано с разницей в размерах байта. Мы не говорили, что переполнение обязательно произой/teT, если результат превысит число 1 073 741 823; переполнение случается,



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

• SUB (вычитание). С = 2; F = поле.

вычитается из гА. (Эквивалентна команде ADD, только вместо V берется -V.)

• MUL (умножение). С = 3; F = поле.

Занимающее 10 байт произведение V и значения из гА заменяет содержимое регистров А и X. В качестве знаков гА и гХ устанавливается алгебраический знак произведения (а именно- "-Ь", если знаки V и гА были одинаковы, и "-", если они были различны).

• DIV (деление). С = 4; F = поле.

Значение из гА и гХ, рассматриваемое как 10-байтовое число гАХ со знаком гА, делится на значение V. Если V = О или если абсолютная величина частного не помещается в пяти байтах (это эквивалентно условию гА > V), то регистры А и X заполняются неопределенной информацией и для триггера переполнения устанавливается значение 1. В противном случае частное ±[rAX/V(J помещается в гА. а остаток ±(гАХ mod V) -в гХ. После выполнения операции знаком гА становится алгебраический знак частного (а именно - "-Ь", если знаки V и г А были одинаковы, и если они были различны). Знаком гХ после выполнения операции будет тот знак, который был у гА до ее выполнения.

Примеры арифметических команд. В большинстве случаев ариф.метические действия выполняются только со словами MIX, которые являются одинарными пятибайтовыми числами, не упакованными в нескольких полях. Тем не менее можно вьшолнять арифметические операции и над упакованными словами MIX, если принять некоторые меры предосторожности. Для этого следует внимательно изучить приведенные ниже примеры. (Как и раньше, ? обозначает неопределенное значение.)

ADD 1000

SUB 1000

MUL 1000

1234

1334

1234

2000

гА до операции

Ячейка 1000

гА после операции

гА до операции

Ячейка 1000

гА после операции

гА до операции Ячейка 1000 гА после операции гХ после операции



MUL 1000(1:1)

MUL 1000

DIV 1000

DIV 1000

rA до операции Ячейка 1000 гА после операции гХ после операции

гА до операции Ячейка 1000 гА после операции гХ после операции

гА до операции гХ до операции Ячейка 1000 гА после операции гХ после операции

гА до операции гХ до операции Ячейка 1000 гА после операции гХ после операции

(Эти примеры были подготовлены с учетом той точки зрения, что лучше дать трудное, но полное описание, чем простое, но неполное.)

Команды операций с адресами. В следующих операциях "адрес" М (возможно, индексированный) используется как число со знаком, а не как адрес ячейки памяти.

• ENTA (enter А). С = 48; F = 2.

Величина М загружается в гА. Это действие эквивалентно команде "LDA" для загрузки из памяти слова, содержащего число М со знаком. Если М = О, то загружается знак команды.

Примеры. "ENTA О" обнуляет гА и устанавливает для него знак "+". "ENTA 0,1" заносит в г А текущее содержимое индексного регистра 1, только -О меняется на +0. Действие команды "ENTA -0,1" аналогично, только +0 меняется на -0.

• ENTX (enter X -ввести X). С = 55; F = 2.

• ENTi (enter г -ввести г). С = 48 -I- г; F = 2.

Эти команды аналогичны ENTA, но только загружается соответствующий регистр.

• ENNA (enter negative А - ввести А с обратным знаком). С = 48; F = 3.

• ENNX (enter negative X - ввести X с обратным знаком). С = 55; F = 3.



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