Анимация
JavaScript
|
Главная Библионтека Программа М. BEGIN CYCLE TIME * ИМИТАТОР MIX ORIG 3500 STZ STZ STZ ENT6 LDA INCA STA LDA STA INC6 LDX SLAX STA LD2 J2Z DEC2 J2P LDA LDX SLAX ADD time(0:2) ovtog comp i 0 clock 0 clock 0.6 inst 1 inst(1:2) 5 m inst(3:3) IF 6 indexerrOr sign6,2 i6reg,2 5 m cmpa zero(1:3) jne addrerror sta m ld3 inst(4:4) ld5 m ld4 inst(5:5) dec4 63 j4p operror 0ptable,4(4:4) time(0:2) 0ptable,4(0:2) LDA STA LD2 JNOV 0,2 JMP 0,2 Имитируемая память, начиная с 0000 и далее. 0VT0G - имитируемый флаг переполнения. C0MPI, ±1 или О, -флаг сравнения Взять первую команду из нулевой ячейки Начало выполнения управляющей программы. Указывает на ячейку, содержащую время выполнения предыдущей команды (строка 033) гА <- имитируемая команда Увеличить значение счетчика адреса Взять абсолютное значение адреса Присоединить знак к адресу Проверить поле индекса Это нуль Определен недопустимый индекс Взять знак индексного регистра Взять абсолютное значение индексного регистра. Присоединить знак Сложение с учетом знаков для индексирования. Результат слишком велик Если да, имитировать ошибку В противном случае адрес найден г13 <- Р-поле г15 <- М г14 <- С-поле Код операции > 64 Взять из таблицы время выполнения Взять адрес соответствующей программы Перейти к оператору (Защита от переполнений ) Советую читателю обратить особое внимание на строки 034-036 "Таблица-переключатель" из 64 операторов - это составная часть имитатора, позволяющая ему быстро переходить к нужной программе для выполнения текущей команды. Это важный метод экономии времени (см упр. 1 3 2-9). В состоящей из 64 слов таблице-переключателе OPTABLE также хранится время выполнения для различных операторов, содержимое этой таблицы определяется в следующих строках. 037 038 039 040 NOP CYCLE(l) ADD ADD(2) SUB SUB (2). MUL MUL(10) Таблица кодов операций, ее типичные элементы имеют вид "ОП программа(время)"
(Элементы, соответствующие операторам LDi, LDiN и INCi, имеют дополнительную запись ", 1", чтобы сделать поле (3:3) ненулевым. Это используется ниже, в строках 289 и 290, для указания того, что после имитации данных операций необходимо проверить размер величины, содержащейся в соответствующем индексном регистре.) В следующей части программы-имитатора просто перечисляются ячейки, которые используются для хранения содержимого имитируемых регистров.
А теперь рассмотрим три подпрограммы, идет подпрограмма MEMORY. используемые имитатором. Первой Последовательность вызова: JMP MEMORY. Состояние при входе: г15 = допустимый адрес памяти (в противном случае подпрограмма перейдет к MEMERROR). Состояние при выходе: гХ := знак слова в ячейке памяти г15; гА = абсолютное значение слова в ячейке памяти г15. 125 * ПОДПРОГРАММЫ 126 MEMORY STJ 9F 127 J5N MEMERROR 128 СМР5 129 JGE 130 LDX 131 ENTA 132 SRAX 133 LDA 134 H JMP Подпрограмма выборки из памяти. =BEGIN= Имитируемая память находится MEMERROR в ячейках с 0000 до BEGIN - 1. 0,5 1 5 гХ ч- знак слова. 0,5(1:5) гА<- абсолютное значение слова. * Выход. I Подпрограмма FCHECK обрабатывает спецификацию частичного поля и проверяет, имеет ли оно вид 8L + R, где L < R < 5. Последовательность вызова: JMP FCHECK. rI3 = допустимая спецификация поля (в противном случае подпрограмма перейдет к FERROR). гА = гИ = L, гХ = R. Состояние при входе: Состояние при выходе: 135 FCHECK STJ 9F 136 ENTA О 137 ENTX 0,3 138 DIV =8= 139 СМРХ =5= ЦО JG FERROR 141 STX R 142 STA L 143 LDl L 144 CMPA R 145 9H JLE * 146 JMP FERROR Подпрограмма проверки поля. гАХ <- спецификация поля. гА ч- L, гХ ч- R. R> 5? rll -(- L. Выйти, если L < R. 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 |