2013-04-12 4 views
0

현재 Y86, AT & T 구문이라는 교육용 어셈블리 언어를 사용하여 함수를 작성 중입니다. 지원하지 않는 것을 달성/해결하려고합니다. 메모리에 저장된 값에 숫자를 추가하고 addl을 사용하여 레지스터에 추가 할 수있는 어리석은 이유가 있습니다. 나는 이것이 왜 있는지 모른다. 나는이 같은 일을하고 싶은 방법을 모르는 함수 내부레지스터가 부족하여 문제가 있습니다.

는 :

addl $1, -4(ebp) 

또한, I 레지스터의 부족의 문제가있는 것 같다. 어쩌면 로컬 변수를 저장할 공간을 만드는 방법을 모르기 때문일 수 있습니다. 나는 레지스터가 호출자와 수신자에 의해 저장되는 개념이 있다고 생각한 것으로 들었다. Y86에서 위의 것과 같은 명령을 매우 높이 평가할 것입니다. 또한 레지스터를 절약하는 데 도움이되는 정보를 얻을 수 있습니다. 고맙습니다! 나는이 물건을 들여다 보는 것이 진짜 고통이라는 것을 안다.

답변

0

x86 및 Y86에서도 push을 사용하여 스택에 푸시 될 수 있으며 pop을 사용하여 스택에서 팝됩니다. 이렇게 :

push %ax ; push ax into stack 

; some code here that may overwrite ax. 

pop %ax ; pop ax from stack 

x86에는 제한된 수의 레지스터가 있으므로 몇 가지 변수에 대해 메모리를 사용해야합니다.

스택에 로컬 변수를위한 공간을 만들려면 스택 프레임을 만들어야합니다. What is stack frame in assembly?을 참조하십시오.

관련 문제