Недопустимое литеральное сообщение о постановке на охрану: пул должен быть ближе - PullRequest
0 голосов
/ 18 марта 2020

Прежде чем начать, я должен сказать, что я проверил другой вопрос, для которого мой вопрос может быть помечен как дубликат, и это не помогло мне. Дело в том, что я сделал для назначения программу, которая получает массив и распечатывает его в обратном порядке, когда я скомпилировал в ARMSim (запрос на назначение), он показал мне эту ошибку: enter image description here

enter image description here

Операнды представляют собой массив из 3 0 operands: .word 0, 0, 0, который находится в .data Функция печатает itoa, а atoi (то есть выше itoa) происходит из UsefulFunctions файл на официальной странице #ARMSim. Если бы кто-нибудь мог объяснить мне эту ошибку, я был бы очень признателен.

1 Ответ

1 голос
/ 18 марта 2020

Когда вы используете псевдоинструкцию LDR =, она превращается в PC -относительную нагрузку из так называемого «литерального пула» (то есть пула литералов).

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

В зависимости от в каком ассемблере вы используете, директива для генерации пула литералов может быть .pool, LTORG или что-то еще.

...