2014-11-18 3 views
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 

답변

0

값을 전역 변수 sum (rmmovl % eax, sum)에 대입하십시오.

위치와 대조적으로 내용을 처리하는 문제가 발생했습니다.