mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 09:10:10 +00:00
Опечатка в 14 лабораторной (#117)
К прошлым изменениям (Старые названия модулей) забыл добавить, что в Labs/07. Datapath/board files /README.md на рисунке 1 тоже старые названия модулей. В листинге 1 написано:".../* Секция данных размещается аналогично секции инструкций за исключением адреса загрузки в памяти (Load Memory Address, LMA). Поскольку память инструкций и данных физически разделены, у них есть пересекающееся адресное пространство, которое мы бы хотели использовать (поэтому в разделе MEMORY мы указали что стартовые адреса обоих памятей равны нулю). Однако компоновщику это не нравится, ведь как он будет размещать две разные секции в одно и то же место. Поэтому мы ему сообщаем, с помощью оператора "AT", что загружать секцию данных нужно на самом деле не по нулевому адресу, а по какому-то другому, заведомо большему чем размер памяти инструкций, но процессор будет использовать адреса, начинающиеся с нуля. Такой вариант компоновщика устраивает и он собирает исполняемый файл без ошибок. Наша же задача, загрузить итоговую секцию данных по нулевым адресам памяти данных. */ .data : AT (0x00800000) {..."
This commit is contained in:
@@ -96,7 +96,7 @@ _Таблица 1. Ассемблерные мнемоники для целоч
|
|||||||
|
|
||||||
Обычно LMA совпадает с VMA. Однако в некоторых случаях они могут быть и различны (например, изначально секция данных записывается в ROM, а перед выполнением программы, копируется из ROM в RAM). В этом случае, LMA — это адрес секции в ROM, а VMA — адрес секции в RAM.
|
Обычно LMA совпадает с VMA. Однако в некоторых случаях они могут быть и различны (например, изначально секция данных записывается в ROM, а перед выполнением программы, копируется из ROM в RAM). В этом случае, LMA — это адрес секции в ROM, а VMA — адрес секции в RAM.
|
||||||
|
|
||||||
Таким образом, мы можем сделать общие VMA (процессор, обращаясь к секциям инструкций и данных будет использовать пересекающееся адресное пространство), а конфликт размещения секций компоновщиком разрешить, задав какой-нибудь заведомо большой VMA для секции данных. В последствии, мы просто проигнорируем этот адрес, проинициализировав память данных начиная с нуля.
|
Таким образом, мы можем сделать общие VMA (процессор, обращаясь к секциям инструкций и данных будет использовать пересекающееся адресное пространство), а конфликт размещения секций компоновщиком разрешить, задав какой-нибудь заведомо большой LMA для секции данных. В последствии, мы просто проигнорируем этот адрес, проинициализировав память данных начиная с нуля.
|
||||||
|
|
||||||
Помимо прочего, в скрипте компоновщика необходимо прописать, каков [порядок следования байт](https://en.wikipedia.org/wiki/Endianness), где будет находиться стек, и какое будет значение у указателя на глобальную область памяти.
|
Помимо прочего, в скрипте компоновщика необходимо прописать, каков [порядок следования байт](https://en.wikipedia.org/wiki/Endianness), где будет находиться стек, и какое будет значение у указателя на глобальную область памяти.
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user