이곳은 개발을 위한 베타 사이트 입니다.
기여내역은 언제든 초기화될 수 있으며, 예기치 못한 오류가 발생할 수 있습니다.
기여내역은 언제든 초기화될 수 있으며, 예기치 못한 오류가 발생할 수 있습니다.
MIPS(ISA)/명령어 목록
덤프버전 :
분류
1. 개요[편집]
MIPS 아키텍처의 명령어 목록. 최신 버전인 Release 6 기준으로 서술하고, 구버전에 대한 사항은 각주나 표의 '비고'란 또는 별도의 하위 문단에 서술한다.
1.1. 약어 설명[편집]
- rd : destination register. 값을 기록할 레지스터
- rt : target register. R-type 명령어의 경우 값을 읽는 데 사용하고 I-type 명령어의 경우 값을 기록하는 데 사용한다.
- rs : source register. 값을 읽고자 하는 레지스터
- sa/shamt: shift amount.
- imm : 명령어에 인코딩되어 있는 상수(immediate)
1.2. 표기법[편집]
1.3. 명령어 인코딩[편집]
사용되지 않는 필드는 특별한 언급이 없는 한 0으로 둔다.
아래는 Release 6에서 추가된 인코딩이다
1.3.1. Opcode Map (MIPS32, Release 6)[편집]
- 명령어 인코딩
- 기호 설명
[R] A B C D E F G H I J K L M N O R-Type[I] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z I-Type[J] A B C J-Type[β] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] 예약됨[*] A B C D E [δ] A B C D E F G H I J K L M 추가 필드 사용[θ] A B [6N] A B C D E [6Nm] [6R] A B C D E F G H [6Rm] A B C D [1] [2] Release 6에서 추가된 AUI의 특수한 경우이다. (rs=0)[3] JALR (rd=0)으로 대체 가능하기 때문에 제거
1.3.2. Opcode Map (MIPS64)[편집]
[각주]
1.4. 레지스터[편집]
1.4.1. CPU 레지스터[편집]
MIPS32 ISA에서는 32비트 레지스터 32개 및 PC(program counter)를 정의한다. 단, 레지스터 r0은 상수 0으로 해당 레지스터에 대한 쓰기는 무시된다.
1.4.1.1. 범용 레지스터[편집]
1.4.1.2. 특수 레지스터[편집]
- PC: Program Counter(32-bit), 명령어의 주소를 가리키는 레지스터이다.
- (Release 6 이전 레지스터)[4]
- HI: 곱셈 연산의 결과 중 높은 자릿수 부분 또는 나눗셈 결과의 나머지 등을 저장하는 레지스터이다.
- LO: 곱셈 연산의 결과 중 낮은 자릿수 부분 또는 나눗셈 결과의 몫 등을 저장하는 레지스터이다.
[4] Release 6에서 곱셈 및 나눗셈 연산 관련 명령어를 변경하며 삭제되었다.
1.4.2. CP0 레지스터 (제어 레지스터)[편집]
MIPS32 ISA에서는 시스템의 제어를 보조프로세서 0에서 담당한다.
1.4.3. CP1 레지스터 (부동소수점 레지스터)[편집]
MIPS32 ISA에서는 부동소수점 연산을 보조프로세서 1에서 담당한다.
1.4.3.1. 범용 레지스터[편집]
MIPS32 ISA에서는 32비트 또는 64비트 레지스터 32개를 정의한다.
1.4.3.2. 특수 레지스터[편집]
MIPS32 ISA에서는 32비트 FCR을 정의한다.
2. 명령어 목록[편집]
2.1. CPU Load/Store 명령어[편집]
Release 6 이전에는 메모리 접근 명령어의 경우 해당 자료형의 크기에 맞춰 '정렬된' 주소(2바이트 halfword의 경우 2의 배수, 4바이트 word의 경우 4의 배수, ...)여야 한다는 제약이 존재해 정렬되지 않은 접근을 보조하기 위한 명령어(LWL, LWR, SWL, SWR, ...)가 별도로 존재하였다. Release 6에서는 정렬되지 않은 주소에 대한 접근을 허용하기 때문에 해당 명령어들은 삭제되었다. 단, 성능상의 이유로 메모리 주소를 정렬하는 것이 권장된다.
2.2. 연산 명령어[편집]
ADDI 명령어의 경우 ADDIU 명령어와 overflow 발생시 trap 여부에만 차이가 있어 Release 6에서 삭제되었다.
2.3. Jump/Branch 명령어[편집]
2.4. 기타 명령어[편집]
2.5. FPU 명령어[편집]
이 문서의 내용 중 전체 또는 일부는 2023-10-29 13:15:35에 나무위키 MIPS(ISA)/명령어 목록 문서에서 가져왔습니다.