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

• ENNi (enter negative i - эвести i с обратным знаком). С = 48 + г; F = 3.

Эти команды идентичны ENTA. ENTX и ЕЫТг, но в данном случае при загрузке знак меняется на противоположный.

Пример. Команда "ENN3 0,3" меняет на противоположный знак содержимого регистра г13, хотя -О так и остается -0.

• INCA (increase А - увеличить А). С = 48; F = 0.

К содержимому регистра гА добавляется величина М; это эквивалент команды ADD для добавления из памяти слова, содержащего величину М. Здесь также возможно переполнение, которое обрабатывается, как и в случае команды ADD.

Пример. Команда "INCA 1" увеличивает содержимое гА на единицу.

• INCX (increase X -увеличить X). С = 55; F = 0.

Величина М добавляется к содержимому гХ. Если происходит переполнение, то оно обрабатывается так же, как в случае команды ADD, только вместо гА используется гХ. Действие этой команды никогда не затрагивает регистр А.

• INCi (increase i - увеличить г). С = 48 + г; F = 0.

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

• DECA (decrease А - уменьшить А). С = 48; F = 1.

• DECX (decrease X - уменьшить X). С = 55; F = 1.

• DECi (decrease г -уменьшить г). С = 48 -Ь г; F = 1.

Эти восемь команд аналогичны INCA, INCX и INCi соответственно, но только М не добавляется к содержимому регистра, а вычитается из него.

Обратите внимание, что для команд ENTA, ENNA, INCA и DECA используется один и тот же код операции С; поле F используется для того, чтобы можно было отличить одну операцию от другой.

Команды сравнения. При выполнении всех команд сравнения MIX сравнивается величина, содержащаяся в регистре, с величиной, содержащейся в памяти. Затем для флага сравнения устанавливается значение LESS (меньше), EQUAL (равно) или GREATER (больше) в зависимости от того, будет ли содержащееся в регистре значение меньше, равно или больше величины, содержащейся в ячейке памяти. При этом нуль со знаком "-" считается равным нулю со знаком "-1-".

• СМРА (compare А - сравнить А). С = 56; F = поле.

Заданное поле гА сравнивается с тем же полем CONTENTS(M). Если F не содержит бит знака, то оба поля считаются неотрицательными; в противном случае сравнение выполняется с учетом знака. (Равенство всегда будет результатом сравнения, если F - это (0:0), так как нуль со знаком "-" равен нулю со знаком "-1-".)

• СМРХ (compare X - сравнить X). С = 63; F = поле. Эта команда аналогична СМРА.

• СМРг (compare i - сравнить г). С = 56 -i- г; F = поле.

Аналог СМРА. Байты 1, 2 и 3 индексного регистра при сравнении считаются нулевыми. (Поэтому, если F = (1:2), результатом сравнения не может быть знак GREATER (больше).)



Команды перехода* Команды обычно выполняются последовательно. Другими словами, команда, которая выполняется после команды из ячейки Р, обычно находится в ячейке РЧ- 1. Но команды "перехода" позволяют нарушить этот последовательный ход вьшолнения. При выполнении типичной команды перехода в регистр J заносится адрес следующей команды (т. е. команды, которая оказалась бы следующей, не будь перехода). Затем в случае необходимости программист сможет использовать "адрес J" для определения адресного поля другой команды, чтобы вернуться к первоначальному месту программы. Содержимое регистра J меняется при каждом переходе в программе, за исключением случая, когда используется команда перехода JSJ. Если перехода нет, содержимое итого регистра измениться никак не может.

• JMP (jump -перейти). С = 39; F = 0.

Ко.манда безусловного перехода: следующая команда выбирается из ячейки М.

• JSJ Qump, save J - перейти, сохранить J). С = 39; F = 1.

Эта команда идентична JMP, но только содержимое rJ не меняется.

• JOV (jump on overflow - перейти при переполнении). С = 39; F = 2.

Если для флага переполнения установлено значение 1, то он переключается в положение О и вьшолняется команда JMP; в противном случае ничего не происходит.

• JNOV (jump on no overflow - перейти, если нет переполнения). С = 39; F = 3. Ести для флага переполнения установлено значение О, то вьшолняется команда JMP; в противном случае ничего не происходит.

• JL, JE, JG, JGE, JNE, JLE (jump on less, equal, greater, greater-or-equal, unequal, less-or-equal - перейти, если меньше, равно, больше, больше или равно, не равно, меньше или равно). С = 39; F = 4, 5, 6, 7, 8, 9 соответственно.

Переход осуществляется в случае, если для флага сравнения установлено указанное значение. Например, по команде JNE переход будет выполнен, если значением флага сравнения является LESS (меньше) или GREATER (больше). Заметим, что эти команды не изменяют значение самого флага сравнения.

• JAN, JAZ, JAP, JANN, JANZ, JANP (jump А negative, zero, positive, nonnegative, nonzero, nonpositive - перейти, если в регистре А отрицательное значение, нулевое, положительное, ненулевое, неположительное). С = 40; F = О, 1, 2, 3, 4, 5 соответственно. Если содержимое гА удовлетворяет заданному условию, то выполняется команда JMP, в противном случае ничего не происходит. "Положительным" является значение, которое больше нуля (но не нуль), а "неположительным" -наоборот, нуль или отрицательное значение.

• JXN. JXZ, JXP, JXNN, JXNZ, JXNP (jump X negative, zero, positive, nonnegative, nonzero, nonpositive - перейти, если в регистре X отрицательное значение, нуль, положительное, неотрицательное, ненулевое, неположительное). С = 47; F = О, 1, 2, 3, 4, 5 соответственно.

• JiN, JiZ, JiP, JiNN, JiNZ, JiNP (jump i negative, zero, positive, nonnegative, nonzero, nonpositive - перейти, если в индексном регистре г-отрицательное значение, нуль, положительное, неотрицательное, ненулевое, неположительное). С = 40-Ь г; F = О, 1, 2, 3, 4, 5 соответственно. Это аналоги соответствующих команд для гА.



Другие команды

• SLA, SRA, SLAX, SRAX, SC, SRC (shift left A (сдвинуть A влево), shift right A (сдвинуть A вправо), shift left AX (сдвинуть AX влево), shift right AX (сдвинуть AX вправо), shift left AX circularly (циклический сдвиг AX влево), shift right AX circularly (циклический сдвиг AX вправо)). С = 6; F = О, 1, 2, 3, 4, 5 соответственно. Это команды "сдвига", где М обозначает число байтов компьютера MIX, которые нужно сдвинуть вправо или влево; М должно быть неотрицательным. Команды SLA и SRA не оказывают влияния на содержимое гХ; остальные команды сдвига оказывают такое действие на оба регистра А и X, как будто это один 10-байтовый регистр. При выполнении команд SLA, SRA, SLAX и SRAX в регистр с одной стороны входят нули, а с другой стороны исчезает информация из сдвинутых байтов. Команды SLC и SRC вызывают "циклический" сдвиг, при котором байты, "исчезнувшие" с одной стороны, снова входят в регистр с другой стороны. В циклическом сдвиге участвуют оба регистра - г А и гХ. Заметим, что ни одна из команд сдвига никак не влияет на знаки регистров А и X.

Примеры

Регистр А

Регистр X

Первоначальное содержимое

SRAX 1

SLA 2

SRC 4

SRA 2

SLC 1

• MOVE (переместить). С = 7; F = число.

Количество слов, определенное значением F, перемещается, начиная от ячейки М, в другие ячейки, адрес первой из которых задается содержимым индексного регистра 1. Перемещение осуществляется по одному слову за раз, и к концу выполнения операции значение в регистре гП увеличивается на F. Если F = О, то ничего не происходит.

Необходимо следить за тем, чтобы группы ячеек, участвующих в перемещении, не перекрывались. Предположим, что F = 3 и М = 1000. Тогда, если гП = 999, перемещаем CONTENTS(1000) в CONTENTS(999), CONTENTS(1001) в CONTENTS(1000) и CONTENTS (1002) в CONTENTS (1001); в данном случае все нормально. Но если бы в регистре гП содержалось число 1001, то в результате были бы выполнены перемещения CONTENTS(1000) в CONTENTS (1001), CONTENTS (1001) в CONTENTS (1002), CONTENTS(1002) в C0NTENTS(1003), т е. мы бы переместили одно и то же слово CONTENTS (1000) в три различных места.

• NOP (по operation - нет операции). С = 0.

Никакие действия не выполняются, и эта команда просто пропускается. F и М игнорируются.

• HLT (halt -остановить). С = 5; F = 2.



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