Все же твоя таблица напоминает что-то PDP-11, а не ВМ2. Взять те же ASC и ASCH. Никаких непредсказуемых результатов в них нет. Да и в других командах непонятно, чего там непредсказуемого?
Вид для печати
В пределах одной отдельно взятой машины вообще непредсказуемых результатов не будет. А если тебе захочется чтобы программа работала не только на УКНЦ, но и еще где-нибудь - надо считаться с возможными вариантами. Взять те же ASH и ASHC которые по разному себя поведут в описанном случае ;)
Это не идиотизм, поскольку получаемый результат соответствует ожидаемому.
...
Например,вместоКод:MTPS 0
- это гораздо хуже. ( А я именно так и отличился недавно - у половины MTPS забыл решётки к числам добавить и очень потом удивлялся странному поведению программы :)Код:MTPS #0
DEC наверное не случайно ошибку Z пишет почти на все эти команды? ;)
Ну это просто ошибка - всякое бывает :)
---------- Post added at 02:47 ---------- Previous post was at 02:43 ----------
Так для того и есть таблица. Команды собственно даны так, чтобы место заполнить. Кроме ASH и явно косячных JMP на регистр, все остальные компилятор и так посчитает ошибкой :)
Куда важнее таблица признаков, особенно если будешь разбирать чьи-то программы. Далеко не всегда очевидно почему автор так уверен, что вот в этом месте скажем бит C сброшен, а в этом установлен итд. Или к примеру встречал такую ошибку - при 32битном счетчике пытались оперировать командой INC вместо нужного ADD #1.
Это хорошо когда есть обработчик прерываний, а если это не обработчик прерываний - там все просто: один обработчик на кучу устройств и никаких проблем (всмысле тем же способом). Но далеко не всегда такие вещи используются в прерываниях :)
И здесь опять таки таблица признаков помогает. Можно к примеру сравнить R1,#1, а можно и #1,R1 и мы можем сэкономить на чем-нибудь за счет этого :)
А как на PDP11 реализуются 32-битные сумматоры, чтобы можно было пользоваться флагом арифметического переполнения V?
На тех процессорах, где есть команда ADC R0,R1, понятно. Просто делаешь ADD #low_byte,R0; ADC #high_byte,R1.
А на PDP11 как? И еще раз, я имею ввиду конечный флаг V, а не результат.
Как формаруются знать в принципе надо, а таблица поможет понять будет ли вообще флаг меняться :)
---------- Post added at 03:12 ---------- Previous post was at 03:11 ----------
А-а - вон ты про что.
ADD L1,L2
ADC H2
ADD H1,H2
- это всмысле как 32 бита сложить с 32 битами
а как ты написал - думаю и так понятно
Вот он пример из книги:
Это пример для знаковых чисел. Если BVS заменить на BCS, то это уже будет для беззнаковых.Код:.MACRO MPADD X,Y ?L1,?L2
MOV X,R1
MOV Y,R2
MOV #10,R0
CLC
L1: MOV R2,-(SP)
MOV R0,-(SP)
L2: ADC -(R2)
SOB R0,L2
BVS ERROR
MOV (SP)+,R0
MOV (SP)+,R2
ADD -(R1),-(R2)
SOB R0,L1
BVS ERROR
.ENDM
Titus, а все-таки интересно, что за многомногоразрядное число Вам понадобилось складывать на УКНЦ, да еще понадобились флаги V и C.
Эмуляция Z80 на УКНЦ ????? :o:o:o О, это круто, но зачем, тормозить же будет.
Да и вряд ли это громоздко будет, сложить же три числа, а сложение в PDP-11 только 16-разрядное, так что бит 8 - это и есть бит C, а с V подумать надо, тут его только по алгоритму вычислять надо.
А кстати у Z80 есть 16-разрядный ADC ?
Titus, а может Вы по примеру эмулятора БК пишете эмулятор Спектрума на УКНЦ?