나는 몇 군데에서 이것을 읽었지만 그 이유를 완전히 이해하지는 못했다. 나는 왜 모든 명령어가 MIPS32에서 4 바이트로 정렬되어야하는지 이해한다.왜 MIPS 스택 포인터를 더블 워드로 유지해야합니까?
그러나 그 때 스택 포인터가 더블 워드로 정렬되어야하기 때문에 스택 프레임은 8의 배수가되어야합니다. 왜?
나는 8 바이트의 배수로 패드 스택을 빈 공간을 추가하는 이유를 제외하고 첨부 된 이미지의 모든 것을 이해합니다.
편집 :이 here, 3 페이지, 다른 4 총알이었다 읽을 경우에 대한 하나 개의 소스는 아래 패터슨과 헤네시, 부록 A.6에 의해 컴퓨터기구 & 디자인, 5 판이었다 프로 시저 호출 예제. 그러나 이제는 MIPS32에 대해 이야기하고 있다고 가정하는 것으로 착각했습니다.
:. 32 비트 모드에서 실행 _ "MIPS ISA I 및 II, 스택 포인터 및 프레임 포인터 어드레스가 64 비트 모드에서 실행하는 4 바이트 단위로 최대 MIPS ISA III 및 정렬 의무, 스택 포인터와 프레임 포인터 주소가 8 바이트 경계에 정렬되도록 요구합니다. "_ 그렇지 않으면'sd'를 사용하여 64 비트 값을 스택에 푸시하려고하면 정렬 오류가 발생합니다. – Michael
감사합니다. Michael. 따라서 이것은 단순히 잠재적으로 64 비트 스택 포인터 주소 또는 리턴 주소를 수용하기위한 예방책으로 의미됩니까? 우리가 32 비트 모드에서 실행 중이라도? –
32 비트 MIPS에서 8 바이트 스택 정렬이 필요합니까? Michael이 8B 요구 사항이 64 비트 모드에만 적용된다고 말하는 것 같습니다. 그러나 8B 정렬을 사용하면 32 비트 모드에서 스택에 'double'정밀도 부동 소수점을 쉽게 저장할 수 있으므로 일부 ABI는 8B 스택 정렬이 필요할 수 있습니다. 어쨌든이 글을 읽는 곳에 링크를 추가하십시오. –