누군가 MARS가 의사 명령어를 두 명령어로 번역하는 이유를 설명 할 수 있습니까? lui & ori? 번역문이 하나의 명령어에만 적용되는 경우가 있습니까?MIPS "la"의사 명령어
2
A
답변
1
이 간단한 프로그램
.data
msg: .asciiz "This is a string"
.text
la $a0, msg # pseudo-instruction to load the address of the label str
는 지시 AFAIK
Address Code Basic Source
0x00400000 0x3c011001 lui $1,0x00001001 4 la $a0, msg # pseudo-instruction to load the address of the label str
0x00400004 0x34240000 ori $4,$1,0x00000000
하고 항상이 두 가지 지침을 변환합니다. lui 명령은 즉시 값을 16 비트 왼쪽으로 시프트시키고 레지스터에 저장합니다. 하위 16 비트는 0입니다.
이렇게하면 32 비트 명령어로 32 비트 주소 (mips32)를로드 할 수 있습니다. 당신이 명령의 모든 유형을다시피
는
1
값에 저장되는 크기는 두 가지로 갈라 정말 문제/이유 다른 명령들.
값에서 가장 큰 유형 (I- 유형, 가장 낮은 유형)은 26 비트 만 있음을 볼 수 있습니다. 주소는 32 비트 값을 가지고 있습니다. 32 비트 값은 26 비트 명령에 맞지 않습니다. 그래서 그들은 두 단계로 스플릿 :
- 첫번째 단계 : 사용자가 두 번째 구조는 도면에 상부 즉시 (LUI) 부하는 R 형 명령을 사용하여 레지스터의 상위 16 비트 어드레스를로드 . 상위 16 비트를 레지스터의 상위 16 비트에 복사하기 만하면됩니다.
- 두 번째 단계 : 또는 명령어를 사용하여 주소의 하위 16 비트를 복사합니다. 따라서 주소의 아래 부분을 레지스터의 아래 부분에 "복사"합니다.