Я беру этот курс, и я действительно борюсь за понимание директивы .align
.Понимание сборки MIPS. Адрес и адрес памяти
Вот пример, который я не мог понять:
Я знаю, что внутри сегмента данных, есть адреса, начиная с 0x10010000,0x10010020 и т.д..
И я знаю, что внутри каждого адреса имеется 8 полей памяти, каждая из которых имеет 32 бит.
Теперь, что я не понимаю, как и почему var2
внутри адреса 0x10010010? str1
находится внутри адреса 0x10010003, потому что мы зарезервировали 3 бита для var1
.
Последнее, что именно директива .align' doing? when I tested it in Mars4, it only shifted the data into the next memory field when I used
выровнять 3` и вверх, но я действительно не понимаю.
Прошу прощения, если это очень запутывающие парни, я отчасти отчаялся здесь.
Набрал мой ответ на телефоне, пока его не было ... ваш бы избавил от необходимости другого. – gnometorule
Спасибо всем за ваши ответы! Вопрос: Как 0x10010010 является кратным 4? – Sobiaholic
0x10010010 = 2^28 + 2^16 + 2^4, который умножается на 4. Если расчет не имеет для вас смысла, пожалуйста, прочитайте снова шестнадцатеричные числа. – gnometorule