Терминология:“регистры” в программировании на языке ассемблера

StackOverflow https://stackoverflow.com/questions/814448

  •  03-07-2019
  •  | 
  •  

Вопрос

Я слышал эту терминологию:регистр, аппаратный регистр, программный регистр, файл регистра.

В чем разница между всем этим?И, наконец, каков тип регистра EAX?Регистрация программы?

Это было полезно?

Решение

Регистр - это область хранения данных внутри центрального процессора.Вот несколько определений:

  • Файл регистра - это массив регистров , см. http://en.wikipedia.org/wiki/Register_file для получения полного описания.
  • Регистр eax является накопительным регистром процессоров семейства Intel x86 - это место, где выполняется математика целых чисел.
  • Программный регистр (я думаю, вы имеете в виду программный счетчик) - это регистр специального назначения, который содержит адрес следующей команды машинного кода, которая должна быть выполнена

Другие советы

Регистр - самое основное устройство хранения данных. Теперь это основные отличия.

Файл регистров - это, как правило, большая коллекция регистров, организованных таким образом, что они используются для вычислений. В современном процессоре все вычисления выполняются между значениями, хранящимися в нескольких регистрах в файле регистров.

Аппаратный регистр обычно относится к регистрам, которые хранят информацию о конфигурации и состоянии. Это может быть процессор или какое-либо внешнее устройство ввода-вывода.

Программный регистр может относиться к счетчику программ, специальному регистру, который хранит ячейку памяти текущей инструкции, выполняемой процессором.

регистр - это небольшая часть памяти, которая находится внутри процессора. и используется языком ассемблера для выполнения различных задач.

Может быть, под регистром программы вы подразумеваете счетчик программ?

Ну, у вас есть регистры общего назначения, затем у вас есть регистры, которые имеют специальное использование (например, регистры счетчика программ), и у вас есть другие (регистры памяти / сегменты, SSE).

EAX, EBX и т. д. являются стандартными регистрами общего назначения. Вы можете использовать их для чего угодно. Обычно возвращаемое значение предполагается поместить в EAX, но на этом все. Затем у вас есть указатель стека EBP, который указывает на начало вашего стека. Наконец, вы должны запрограммировать счетчик, который указывает на текущую инструкцию EIP. В x86 есть несколько особых случаев, когда два регистра объединяются при выполнении 64-разрядных целочисленных вычислений. Существуют более особые случаи для строковых инструкций. Если вы собираетесь изучать сборку, проще всего начать с PowerPC, в котором больше регистров, и вы можете использовать их все без ограничений.

Все эти регистры, конечно, являются аппаратными регистрами, то есть они физически встроены в ваш ЦП;) Место, где они находятся, называется регистровым файлом.

Другой тип регистров, которые вы можете увидеть, это наличие у вас виртуальной машины, которая использует регистры ( Parrot ), вы получаете «виртуальные регистры», которые впоследствии назначаются реальным регистрам. Это похоже на то, что вы можете сделать, когда пишете компилятор самостоятельно, вы в основном принимаете неограниченное количество регистров (то есть вы генерируете новый при каждом использовании) и выполняете преобразование в реальные регистры на другой фазе (распределение регистров). ).

A " аппаратный регистр " также может относиться к расположению внутри некоторого аппаратного устройства. Например, UART (COM-порт) выглядит как D-образный разъем с 9 или 25 контактами снаружи корпуса, но для драйвера устройства это выглядит как несколько регистров конфигурации, регистр состояния и регистры данных, содержащие следующий символ: отправить и последний полученный символ. (Я оставил там много подробностей.)

В архитектуре x86 эти регистры обычно расположены в специальном физическом адресном пространстве, доступ к которому осуществляется с помощью инструкций ввода / вывода. На других платформах аппаратные регистры обычно отображаются в некоторый угол обычного пространства памяти. В любом случае одна из важных ролей операционной системы и ее драйверов устройств состоит в том, чтобы код приложения не нуждался в сведениях о том, где расположены аппаратные регистры и что они означают.

В некоторых типах аппаратных устройств различие между памятью и аппаратными регистрами менее четкое. Например, ваш видеоадаптер содержит блок памяти, известный как буфер кадров, который содержит значения цвета и яркости для каждого отдельного пикселя. Является ли эта память большим аппаратным регистром или это просто буфер с интересным побочным эффектом?

Что касается этого вопроса, то существует два общих типа регистров, которые вам следует рассмотреть:

  • программные регистры
  • аппаратные регистры

Аппаратные регистры синхронизируются (обновляются с тактовыми сигналами) и используются в физический проектирование схем процессора.

Программные регистры являются оперативной памятью и хранятся в регистровом файле, расположенном в центральном процессоре.Инструкции по сборке / машинному коду обращаются к этим регистрам через такие имена, как %eax, % esp, %rdi, % edi и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top