0
x, y 사이의 모든 포함 정수의 합을 만드는 프로그램을 작성하려고합니다. 합계, y 및 x는 전역 변수입니다. 로컬 레지스터에 x와 y를 할당하려고하면 문제가 발생합니다 (시뮬레이터는 0x60과 0x64의 값을 로컬 레지스터에 1과 4의 값으로 할당합니다)뿐만 아니라 합계 값을 가져 와서 전송합니다. 합계의 글로벌 변수. 보통 나는 도움이되는 가이드를 온라인으로 찾으려고 노력하지만, Y86은 그다지 쓸모없이 사용되는 언어가 아닙니다.Y86 어셈블리의 전역 변수 사용
내 코드 : 나는 레지스터가 잘못된 값을 얻는 이유 (내가 mrmovl와 값 대신 irmovl으로 그들에게 메모리 위치를 전송했다)과 어떻게 비슷한 맥락에서 파악
.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