2016-08-13 1 views
2

누군가 MARS가 의사 명령어를 두 명령어로 번역하는 이유를 설명 할 수 있습니까? lui & ori? 번역문이 하나의 명령어에만 적용되는 경우가 있습니까?MIPS "la"의사 명령어

답변

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

는 "유사"구조 명령은 그런 식으로 구성되어있다 : enter image description here

값에 저장되는 크기는 두 가지로 갈라 정말 문제/이유 다른 명령들.

값에서 가장 큰 유형 (I- 유형, 가장 낮은 유형)은 26 비트 만 있음을 볼 수 있습니다. 주소는 32 비트 값을 가지고 있습니다. 32 비트 값은 26 비트 명령에 맞지 않습니다. 그래서 그들은 두 단계로 스플릿 :

  • 첫번째 단계 : 사용자가 두 번째 구조는 도면에 상부 즉시 (LUI) 부하는 R 형 명령을 사용하여 레지스터의 상위 16 비트 어드레스를로드 . 상위 16 비트를 레지스터의 상위 16 비트에 복사하기 만하면됩니다.
  • 두 번째 단계 : 또는 명령어를 사용하여 주소의 하위 16 비트를 복사합니다. 따라서 주소의 아래 부분을 레지스터의 아래 부분에 "복사"합니다.