2014-11-17 1 views
1

어셈블리 언어를 잃어 버렸고 MIPS를 사용하면서 실종 된 것을 깨닫고 기초부터 시작하여 실제로 이해하기로 마음 먹었습니다.MIPS/SPIM에서 li과 lw의 차이점은 무엇입니까?

분명히 MIPS 코드는 특정 목적을 가지고 있지만, 많은 것들이 비슷한 일을하는 것처럼 보입니다. 그리고 나는 그 차이점을 이해하는 데 어려움을 겪고 있습니다.

직접로드 (li)와 단어로드 중 (lw)의 차이점은 무엇입니까? "단어"가 무엇인지 나는 확신하지 못합니다. 또는 다음 작업은 무엇입니까?

li $t0,y 
lw $t0,0($t0) 

첫 번째 줄의 레지스터 $ t0에 y가로드되어 있습니까? 그리고 0 ($ t0)을 y로로드 하시겠습니까?

죄송합니다. 이것은 아마도 정말 바보 같은 질문입니다. 누구나 그 두 라인이하고있는 일과 li/lw의 차이를 설명 할 수 있다면, 나는 그것을 크게 고맙게 생각할 것입니다. 감사!

답변

2

word은 고정 길이 비트 시퀀스입니다.
MIPS32에서 word은 32 비트입니다.
lw $regA, offset($regB) 명령어는 offset($regB)으로 지정된 메모리 위치의 워드를 regA 레지스터에로드합니다.

반대로 li reg, immediate이 아니며 실제 지침이 아닙니다. MIPS cpu는 li을 실행할 수 없습니다. 32 비트의 상위 16 개 비트는 명령의 즉치 상수 등록

lui $reg, [most significant 16 bits of immediate] 
ori $regA, $regA, [least significant 16 bits of immediate] 

lui로드 (16) 하단의 설정 : 그것은 어셈블러에 의해 두 개의 명령어의 시퀀스로 전환하는 의사 명령어의 비트를 0으로 설정하십시오.
ori$regA의 내용을 취하고 명령에서 즉시 16 비트와 비트 논리 OR을 수행하여 결과를 $regA에 다시 저장합니다.

그래서, 요약하기 : li $reg, immediate 항상이 레지스터에 즉각적인 같은을 넣어 것, lw $regA, offset($regB)는 메모리 위치 offset($regB)에서 현재 값을로드하는 동안.