Encoding x86 Instructions
x86 инструкции действительно заслуживают название Complex Instruction Set Computer (CISC) из-за своей чрезвычайно сложной структуры. Инструкции могут достигать 15 байт в длину, включая префиксные байты, которые изменяют поведение существующих команд, а не расширяют opcode. Процессор поддерживает два основных типа opcode: стандартный 1-байтовый и расширенный 2-байтовый с префиксом 0Fh, что теоретически позволяет до 512 различных классов инструкций. Бит направления (d) в opcode определяет направление передачи данных, а бит размера (s) указывает на 8-битные (s=0) или 16/32-битные (s=1) операнды.
Ключевым элементом является MOD-REG-R/M байт, который определяет операнды и режимы адресации. Поле MOD указывает на режим адресации (00-11), REG определяет регистр (от AL до EDI в зависимости от размера данных), а R/M совместно с MOD указывает второй операнд или единственный операнд для команд вроде NOT. Общие регистры (EAX, EBX, ECX и др.) обеспечивают быстрый доступ к данным, так как процессор работает с ними значительно быстрее, чем с памятью. 32-битные регистры содержат в себе свои 16-битные и 8-битные аналоги, что позволяет гибко работать с данными разных размеров.
Комментарии (27)
- Обсуждение началось с размышлений о сложности кодирования инструкций в x86 и ARM64, где последний оказался значительно проще в этом плане.
- Участники обменялись ссылками и инструментами, включая вики-страницу "x86 is an octal machine" и репозиторий Paul Hsieh's.
- Была затронута тема эволюции процессора: сравнение 8086 и современных чипов, а также затрагивающая влияние на эффективность кода.
- Обсуждались трудности с кодированием инструкций в x86, включая непредсказуемость длины кода и сложность дешифрации.
- В итоге, участники сошлись на том, что эволюция процессора и архитектуры влияет на эффективность кода, и что важно адаптироваться к изменениям.
"Special register groups" invaded computer dictionaries for decades (2019)
Как «специальные группы регистров» 50 лет жили в словарях
Фраза «special register groups» внезапно появилась в определении «CPU» в 1960-е и до сих пор мелькает в учебниках.
В старом глоссарии Минсельхоза США (1960) читаем:
«MAIN FRAME — центральный процессор; включает основную память, арифметическое устройство и special register groups».
Это описание относилось к мэйнфрейму Honeywell 800 (1959), где для многозадачности каждая из 8 программ получала собственный аппаратный набор из 32 регистров — именно их Honeywell назвала «special register groups».
Определение скопировали чиновники, оно попало в Automatic Data Processing Glossary, затем — в сотни книг и статей. Постепенно «main frame» стало синонимом «тип большого компьютера», а «special register groups» превратились в бессмысленную клишированную строчку, которую перепечатывали до 2017 года включительно.
Комментарии (39)
- Участники обсудили странное определение «special register groups» в старых словарях: оно неясно и не упоминает обычные регистры.
- Упомянули, что IBM в 1954 году определяла CPU как совокупность арифметических и управляющих функций, без «специальных регистров».
- Появились примеры старых машин, например Honeywell 800, где у каждой программы был свой набор регистров — предшественник barrel- и multithread-процессоров.
- Отмечено, что терминология часто копировалась без проверки, создавая «человеческий слаг» вроде «tongue map» или «brushless DC».
- Участники сравнили путаницу в терминах с другими примерами, включая RAM, ROM, SMT и «micom» в японских рисоварках.
A Simple CPU on the Game of Life (2021)
Схема простого процессора в «Жизни» — часть 4
Строим первый настоящий компьютер: 2-конвейерную машину неограниченных регистров (URM). Она факторизует 15 за несколько минут.
Что такое URM
- Теория: бесконечное число регистров с неограниченными целыми.
- Практика: 16 регистров по 4 бита.
- Инструкции:
INC Rx— увеличить.DEC Rx— уменьшить.JNZ Rx, Addr— переход, если не ноль.
Этого достаточно для полной Тьюринговой машины. Например, сложение:
ADD:
jnz R1, END
dec R1
inc R2
jmp ADD
END:
Архитектура
- Верхний левый угол: тактовый генератор.
- Рядом: регистровый файл (16×4 бит) — вся RAM.
- Справа: АЛУ, умеет только инкремент.
- Ниже: счётчик команд (PC) и ПЗУ на 128 4-битовых команд.
- Слева от ПЗУ: конвейерные триггеры для одновременного чтения и исполнения.
- Край справа: четыре семисегментных дисплея для вывода.
Особенности «Жизни»
В реальном железе минимизируют транзисторы; в «Жизни» главное — минимизировать площадь и задержку клеток.
Комментарии (11)
- Пользователи в восторге от наглядности «жизни» как модели вычислений, хотя кто-то считает её сложнее обычных логических символов.
- Conway, по мнению комментаторов, был бы в восторге.
- Вопрос о стеке сайта остался без ответа, но все хвалят дизайн.
- Пошутили о запуске DOOM и о «человеческом компьютере» из «Задачи трёх тел».