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
Другие вопросы по тегам