我试图编写一个程序,在x和y之间创建所有包含整数的和,其中sum,y和x是全局变量。当我尝试将x和y分配给本地寄存器(我的模拟器将0x60和0x64的值分配给本地寄存器而不是1和4)以及获取求和值并传输时,我遇到了问题那是总和的全局变量。通常我会尝试在线找到有用的指南,但Y86是一种很少用的语言,几乎没有。
我的代码:
.pos 0
init: irmovl Stack, %esp //Set up stack pointer
irmovl Stack, %ebp //Set up base pointer
call main //call main program
halt //Terminate program
main: pushl %ebp //setup
rrmovl %esp, %ebp
pushl %ebx //declaring x local register
irmovl x, %ebx
pushl %esi //declaring y local register
irmovl y, %esi
pushl %eax //declaring sum
irmovl sum, %eax
pushl %edi //constant of 1
irmovl $1, %edi
L2:
subl %ebx, %esi // %esi = y-x
jl L3 // ends function if x > y
irmovl y, %esi // %esi = y
addl %ebx, %eax // sum += x
addl %edi, %ebx // x++
jmp L2 // go to beginning of loop
rmmovl %eax, (%eax) //value assigned to sum global variable
L3:
rrmovl %ebp, %esp //finish
popl %ebx
popl %esi
popl %edi
popl %eax
popl %ebp
ret
.align 4
x: .long 1
y: .long 4
sum: .long 0
.pos 0x200
Stack: .long 0
答案 0 :(得分:0)
我弄清楚为什么寄存器得到了错误的值(我用mirmovl而不是mrmovl的值发送它们的内存位置),并且类似地,如何将值赋给全局变量sum(rmmovl% eax,sum)。
这是解决内容而不是位置
的问题