我正在努力让全局变量在我的Y86任务中正常工作。不幸的是,我们提供的唯一例子是IA-32装配。我搜索了最近几个小时但无济于事。这是我知道的非常基础,但我在Y86是一个完整的新手。
我是"宣布"我的变量如下
.align 4
x: .long 1
y: .long 4
当我在诸如irmovl x, %edx
的操作中使用它时,我看到值380被分配给edx寄存器而不是值4.我认为发生的事情是我将内存位置分配给寄存器而不是价值。将全局变量的值设置为寄存器的正确语法是什么?
我尝试过使用mrmovl,但我不确定mrmovl的全局变量的语法。
mrmovl x,%edx给我错误" x不是数字"
答案 0 :(得分:1)
irmovl
正如名称所说 i mmediate to r egister。
您希望mrmovl
为 m emory to r egister。
至于语法,因为y86确实支持置换,我希望mrmovl x, %edx
能够工作。你说它没有,作为一种解决方法,你可以使用2条指令:
irmovl x, %edx # load address
mrmovl (%edx), %edx # fetch value