Y86 сборки глобальных переменных
Я изо всех сил пытаюсь заставить глобальные переменные работать правильно для моего назначения Y86. К сожалению, единственные примеры, которые нам предоставили, находятся в сборке IA-32. Я искал последние несколько часов, но безрезультатно. Это очень просто, я знаю, но я новичок в Y86.
Я "объявляю" мои переменные следующим образом
.align 4
x: .long 1
y: .long 4
Когда я использую их в такой операции, как irmovl x, %edx
Я вижу, что значение 380 назначено регистру edx вместо значения 4. Я думаю, что происходит то, что мне присвоено место в регистре памяти вместо значения. Какой будет правильный синтаксис для установки значения глобальной переменной в регистр?
Я попытался использовать mrmovl вместо этого, но не уверен в синтаксисе для mrmovl с глобальной переменной.
mrmovl x,% edx, дайте мне ошибку "x не число"
1 ответ
irmovl
как следует из названия, я имею непосредственное участие. Ты хочешь mrmovl
так как это память для администратора.
Что касается синтаксиса, так как y86 поддерживает смещение, я ожидаю mrmovl x, %edx
работать. Вы говорите, что это не так, в качестве обходного пути вы можете использовать 2 инструкции:
irmovl x, %edx # load address
mrmovl (%edx), %edx # fetch value