eufs писал(а):Насчет память-память, я напутал, признаю,а вот насчет RISC вы зря. Руководитель кружка, где я занимался, говорил что он относится к RISC(может упустив слово "почти"). Может это было в контексте сравнения с другими - сейчас уже не помню. Специально поинтересовался: ...
Руководитель кружка ошибается, как неверен и вывод той цитаты, что Вы привели, хотя приведённые в ней факты, в общем-то, соответствуют действительности. Но на самом деле у 6502 (как, впрочем, и у других 8-разрядных процессоров того времени) нет
ни одной черты RISC-архитектур даже в зачаточном состоянии:
1) RISC-процессоры имеют достаточно большое число регистров общего назначения, иногда достигающее нескольких сотен -- а у 6502 вообще, по большому счёту, нет регистров общего назначения, ибо все имеющиеся регистры -- специализированные. То, что он может хитрым способом использовать младшие 256 байт памяти, отнюдь не делает его имеющим кучу регистров: это всё равно память, для доступа к которой требуются лишние такты, ну а сама идея РИСКа заключалась в как можно более быстром выполнении операций, для чего и требовалась куча регистров (чтобы как можно реже обращаться за данными к памяти);
2) все операции обработки данных РИСК-процессоры выполняют над операндами, находящимися только и исключительно в регистрах -- у 6502 это не так, поскольку все такие операции выполняются между регистром A и памятью;
3) основная масса операций (в идеале -- все, кроме чтения и записи памяти) выполняется за один такт -- в 6502 это опять-таки не так, там переменное время выполнения команды (да, оно может быть точно посчитано в тактах, если не вводятся такты ожидания, но то же самое можно сказать о любом не суперскалярном процессоре, хотя не всегда легко найти "раскладку" команд по тактам);
4) коды команд имеют фиксированную длину -- у 6502 это опять-таки не так, длина команды там колеблется от 1 до 3 байтов.
Кстати говоря, неверно утверждение и о "слабом месте". 6502 -- 8-разрядный процессор, и никаких "слабых мест" по сравнению с более-менее современными 8-разрядными процессорами у него нет: все они для обработки данных большего размера требуют нескольких команд, ну и т.д. (ну а наличие отдельных специальных команд в некоторых процессорах картины в целом не меняет: в общем случае всё равно надо пользоваться группой обычных 8-разрядных команд). Понятное дело, что на 32-разрядном VAX-11 какая-нибудь вычислительная программа будет во много раз короче, чем на 6502: и разрядность в 4 раза выше, и умножение с делением имеются, и операции с плавающей запятой...
Кстати, уместно было бы сравнить архитектуру 6502, 8080 и т.п. с, например, AVR8. У последней:
1) 32 регистра более-менее общего назначения (у части регистров есть и специализированные функции, однако основные операции могут выполняться над любыми регистрами);
2) операции обработки данных выполняются либо над двумя регистрами, либо над регистром и константой, закодированной в самой команде;
3) все основные команды, кроме обрабатывающих два регистра сразу (типа SBIW), реально выполняются за один такт. Два такта в командах переходов связаны не с временем выполнения как таковым, а с приостановкой конвейера из-за необходимости выбрать код следующей команды (на которую выполнен переход);
4) все основные команды имеют длину 16 бит. Вроде как длинные переходы имеют 32 бита, врать не буду, но они отсутствуют в системе команд младших АВРок и, вероятно, являются "надстройкой" над исходной системой команд.
Таким образом, AVR8 близка к классической РИСК-архитектуре, хотя не соответствует ей на все 100%.
А вообще я его не сильно знаю, потому как пересел на 8080, так что ивините,если чего напутал. IMHO 8080 лучше.
6502 у меня -- первый процессор. Когда-то я его очень хорошо знал. Конечно, прошло лет 20 с тех пор, когда я с ним последний раз имел дело, но довольно многие вещи ещё помню. Прилично пришлось поработать и с 8080. Гадкая архитектура с неудобной адресацией (у 6502 намного более гибкая, в т.ч. за счёт той самой нулевой страницы памяти) и, насколько помню, отвратительными командами сдвига. По реальной производительности 8080 зачастую проигрывал 6502, имея тактовую частоту в 2-2,5 раза больше -- как раз благодаря неудачной системы команд, из-за чего на выполнение более-менее сложной последовательности действий на 8080 требовалось существенно больше команд, чем на 6502. Думаю, Ваши впечатления связаны с тем, что Вы просто не успели по-настоящему хорошо изучить 6502, понять его сильные и слабые стороны, ну а с 8080 работали намного больше, вот и сложилось такое мнение. Фактически, у 8080 только два реальных преимущества: неограниченный (в пределах 64 Кбайт, конечно) размер стека (у 6502 -- 256 байт) и простая схема кодирования команд (причём второе преимущество достаточно сомнительно: в конце концов, прямо в машинном писать приходится нечасто, и лучше уж более запутанная кодировка, но зато эффективная система команд).
Кстати, думается, достижения Эпла в 80-х годах объяснялись не только инженерными талантами создателей, но и использованием процессоров не от Интел: они обеспечивали более высокую производительность при меньшей тактовой частоте. Если б Эпл не закрывала наглухо свои разработки, то, думается, современный ПК по своей родословной восходил бы именно к ним, а не к уродцу от ИБМ на ужасном 8088...