Регистрируется в ЦП компьютера - PullRequest
0 голосов
/ 09 февраля 2019

Я просто хочу проверить, поддерживает ли сам процессор имена «регистров».Я имею в виду arg0 arg1 arg2 ... и т.д. в конце "имена".Поддерживает ли процессор также имена ?!Я не спрашиваю о самом регистре, я спрашиваю, поддерживает ли процессор имена регистров, которыми он может манипулировать или нет?

1 Ответ

0 голосов
/ 10 февраля 2019

имена - это нечто магическое, а не физическое

В этом все дело.Имена только для нас людей для чтения. Процессоры абсолютно не имеют понятия имен. Единственное, с чем они имеют дело, это числа.Символы - это числа, адреса - это числа, инструкции - это числа ... Так же как и регистры, которые также являются просто числами, закодированными каким-либо образом в самой инструкции

После сборки в инструкции есть только цифрыпоток.Даже метки перехода, функции ... не существуют в исполняемом двоичном файле.Они описаны как «14-я инструкция после этой» , »инструкция за 48 байт до« ... или абсолютно как »функция по адресу 0xFACECAFE" .Имена, если таковые имеются, помещаются в отдельные разделы, чтобы описать, что представляет адрес, в противном случае никто не знает, что такое переменная 0x65DAB3CF или функция в 0xFACECAFE.Эти имена используются для отладчиков для печати переменных для чтения людьми или для компоновщиков, загрузчиков ... чтобы найти правильное место для замены адресов.Процессоры полностью игнорируют их

Например, в MIPS $ ra номер регистра 31, $ t9 равен 25, $ a3 равен 7 ... , и они будутбыть закодированы как таковые в инструкции как их двоичные значения.ADD $s2, $t5, $a3 будет закодировано как

000000 (код операции инструкции R-типа) - 01101 ($ 13 / $ t5) - 00111 ($ 7 / $ a3) - 10010 ($ 18 / $ s2) - 00000 (сумма смены) - 100000 (32 - функция ADD) , то есть 0x01A79020

Аналогично в x86 регистры RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8-R15 отображаются в 0-15 соответственно.xor ecx, esi кодируется как 31 f1 = 00110001 11110001 с последними 6 битами, сохраняющими 2 параметра.Более сложные инструкции требуют более сложных правил, например, ADD r9, [rax + 4*r13 + 20] кодируется как 4e 03 4c a8 14

Поскольку ЦП заботятся только о числах , на самом деле возможно построить кодировку, котораяотображает строки символов для имен регистров на сами регистры . Например, r20 будет закодирован как 72 32 30 (которые являются значениями ASCII строки "r20") внутриинструкция, но зачем тратить так много ценного места в инструкции?Карта от r20 до 20 (0x14) проста и достаточно ясна

...