2013-04-22 1 views

답변

0

store이 무엇인지 모르겠지만 MIPS의 모든 정상 분기 및 점프 명령은 바로 다음 명령과 함께 실행됩니다. 대부분의 사소한 경우에 지점/점프가 마지막으로 실행되고 다른 명령은 첫 번째로 실행된다고 생각할 수 있습니다.

그러나 쌍을 이루는 명령어가 내부적으로 두 개의 개별 명령어 대신 하나의 분할 할 수없는 명령어로 실행되면 놀라지 않을 것입니다.

여기서 잠재적 인 문제는 은 store 다음의 명령어 주소를 $ra에 저장한다는 것입니다. store 또는 무엇이든 지침 인 경우 $ra을 사용하면 $ra에 대한 두 액세스 사이에 경쟁 조건, 데이터 위험이있을 수 있으며 최종 결과는 확실하지 않거나 당연히 예상 할 수있는 결과 일 수 있습니다.

+0

글쎄 실제 명령어가 아니라 단순화 된 명령어입니다. 스토어는 $ ra의 값을 메모리에 저장하는 것을 의미합니다. – Alaya

+0

메모리 위치가 있어야하므로 메모리 위치는 어떻게됩니까? –

+0

네, 거기에 메모리 위치가 있지만 여기에 덜 중요하게 보인다. 내 생각에 '가게'는 'jal'이 점프하는 서브 루틴이 끝난 후에 만 ​​$ ra를 읽으면 위험 할 수 없어야한다고 생각합니다. 따라서 질문은 "어떤 명령이 뽑힐 것인가? ''상점 '또는'jal '이 점프하는 곳에있는 지침이 될 것인가?" – Alaya

0

MIPS 분기 지연 슬롯의 명령어는 분기가 실행되기 전에 항상 완전히 실행됩니다. 따라서 store $ra 명령어는 의 값이 보다 작고보다 작고 jal 명령어 업데이트는 $ra입니다. 환언하면,이 서열

li $ra, 0x1234 
    jal addr 
    store $ra, mem # mem <- 0x1234 

이것은 MIPS 아키텍처에서 정의되지 않은 순서 아니므 결과 예측 :

li $ra, 0x1234 
L: jal addr 
    nop 
    store $ra, mem # mem <- L + 8 

이 순서보다는 메모리에 다른 값을 저장할하겠습니다.

noreorder이 설정되어 있지 않으면 MIPS 어셈블러는 일반적으로 jal 뒤에 nop을 삽입합니다.