Mips 어셈블리 언어를 배우려고했지만 다른 상황에서 사용할 레지스터를 아는 데 어려움을 겪고 있습니다. 나는 $ V0, $ A0 또는 $ (T1)를 ... 사용 하는가하면 시스템 호출을 포함하여 다른 사람에 의해 쓰여진 어떤 코드를 사용하지 않는 경우Mips 프로그램에서 사용할 레지스터를 어떻게 알 수 있습니까?
답변
, 당신이 원하는 그러나 당신이 레지스터를 사용할 수 $at
이 제공처럼 는 어셈블러 용으로 예약되어 있으며 은 jal
/jalr
에 의해 암시 적으로 사용됩니다.
매우 시스템 호출이나 다른 사람이 작성한 코드를 사용하지 않을 것 같지 않습니다.
컴파일러와 인간이 코드를 보지 않고 루틴을 사용하게하려면 전문가들 사이에 규칙이 설정됩니다.
응용 프로그램 이진 인터페이스 (ABI) 및 MIPS got one too이라고합니다.
ABI는 레지스터 사용 방법을 요구합니다.
이- 당신은 이미 ABI을 존중 코드를 사용
당신은 때마다 ABI을 존중해야합니다. 이 경우 ABI는 대부분 유익합니다. 함수가 인수를 기대하는 위치와 사용하는 레지스터를 알려줍니다. - ABI를 기대하는 코드 나 도구와 호환되기를 원할 때.
나중에 동료에게 줄 기능을 작성하면 ABI를 존중하여 작성하는 것이 좋습니다. 이 방법으로 그들은 이미 국제 대회에 익숙해 져 있으며 그것을 사용하는 것이 당연합니다.
컴파일러를 사용하는 경우 ABI를 준수하는 소스 코드가 컴파일되므로 사람이 생성 한 어셈블리에서 그렇게 할 것으로 예상됩니다.
이러한 레지스터의 사용되는 MIPS32 ABI를 인용 :
$ 0 (0 $ 영)는 항상 0
$에서 ($ AT) 임시 값을가 일반적으로 어셈블러에서 사용됩니다. [절대 사용자는]
$ 2 $ .. 3 ($ V0-V1의 $) 식 평가에 사용 정수 포인터 형 함수 반환 값을 유지하도록. 는
$ .. 4 $ 7 $ V0 정수 함수가 리턴 값을 넣어 어디 ($ a0- $ A3) 함수 인수를 전달을 위해 사용; 값은 이 아닌 함수 호출에서 보존됩니다. 아래에 설명 된대로 추가 인수 이 스택에 전달됩니다. [인수가가는 곳이다]
$ 8 $ 15 조 ($ t0- $의 T7) 식 평가에 사용의 임시 레지스터; 값 은 함수 호출에서 보존되지 않습니다.
$ 16- $ 23 ($ s0- $ s7) 저장된 레지스터; 값은 함수 호출에 걸쳐 보존됩니다. [당신이 함수 내에서 다음을 사용하는 경우,이를 저장 및 복원]
$ (24) ... $ 25 조 ($ t8- $의 T9) 식 평가에 사용의 임시 레지스터; 값은 함수 호출에서 보존되지 않습니다. 호출 위치 독립적 함수 $ 25는 호출 된 함수의 주소 인 을 포함해야합니다.
$ 26- $ 27 ($ kt0- $ kt1)은 운영 체제에서만 사용됩니다.
$ 28 ($ gp) 전역 포인터 및 컨텍스트 포인터. [컴파일러에서 사용]
$ 29의 ($의 SP) SP 스택 포인터. 는
$ 30의 ($의 S8) (S0-S7 같은) 저장 레지스터 [스택이 사용]. [수정 된 경우 함수에 저장하고 복원]
$ 31 ($ ra) 반송 주소. 반환 주소는 함수가 제어를 반환해야하는 의 위치입니다. 이
[
jal
/jalr
에 의해 설정] 우리는 자습서를 제공하거나 책을 사용하지 않는 것이 좋습니다. 질문이 마지막 단락없이 나타날 수 있으면 편집하십시오 (왼쪽 하단의 "편집"링크). 그렇지 않은 경우 삭제하는 것이 좋습니다. –