Символьный адрес против метки в MIPS - PullRequest
1 голос
/ 04 октября 2019

Я просто хочу быть уверен, что я точен в своих определениях. Является ли метка программы просто еще одним термином для символического адреса или это нечто иное и более конкретное?

1 Ответ

0 голосов
/ 05 октября 2019

В значительной степени да;см. также Место хранения меток MIPS для получения дополнительной информации о символах, являющихся способами обращения к адресам памяти. Они очень полезны, чтобы избежать необходимости пересчитывать вручную числовой адрес вершины каждого цикла (или фактически расстояние от относительной ветви).

Они также полезны для случаев, когда время сборкирасчет невозможен, и его следует отложить до времени ссылки.


Терминология: метка определяет символ. Символы также могут быть определены другими способами, но обычнометки.

foo: на отдельной строке (или в начале строки) - это метка .

foo - это символ , на который вы можете ссылаться из других мест, например jal foo или bne foo. Или поместите адрес в регистр с помощью la $t0, foo

. Вы можете даже ссылаться на символ из других исходных файлов для символов, которые экспортируются, чтобы они оказались в таблице символов объектный файл (.o), который ваш ассемблер создает из вашего источника asm. (например, вы используете .global foo для экспорта foo вместо того, чтобы оставлять его просто как локальный символ файла.)

В синтаксисе GAS (который в основном используется MARS) другие способы определения символов связаны с такими вещами, какдиректива .set или .weakref для определения метки, которая является псевдонимом другой метки. Или .comm, чтобы зарезервировать место в BSS и указать имя символа на нем. (Но без использования директивы .bss, чтобы фактически сделать .bss текущим разделом, так что это не метка.)

...