2012-02-02 1 views
2

에서 변수를 저장 나는 기초의 가치를 계산의 내부에 저장합니까? 로드 및 저장에 대한 유일한 지침은 lwsw이며 프로토 타입은 레지스터 소스 -> 램 대상 또는 램 소스 -> 레지스터 대상에서만 사용됩니다.Mips에서 : MIPS에서</p> <pre><code>int base; int count; count = base; </code></pre> <p>, 방법은 것 : 나는이 같은 라인을 가지고 내 C 코드에서 MIPS 어셈블리 코드</p> <p>에 C 프로그램을 번역하려고 다른 변수

도움을 주시면 감사하겠습니다.

편집 나는이가

move base acc

처럼 단일 명령어에 뭔가를 수행하지만 분명히 그건 불가능하다 될 수 있다고 기대했다 (적어도 나는 그와 유사한 명령어의 예를 찾을 수 없습니다), 나는 이것을 선택했다 :

lw $t0, base //load base into $t0 
sw $t0, count //store the value of $t0 in count 

누군가가 알고있는 경우에 이것을하는 one-line 지시가있는 경우에.

답변

8

MIPS는 직접 메모리 - 메모리 이동을 지원하지 않습니다. (심지어 가장 일반적인 CPU도 아니며 실제로는 x86도 마찬가지입니다.) 데이터를 이동하려면 lw/sw을 사용해야합니다.

구조적으로 이것은 MIPS가주기 당 단일 메모리 액세스 만 수행하도록 설계 되었기 때문에 메모리 - 메모리 이동을 수행 할 때 두 개의 액세스 (읽기 하나, 쓰기)가 필요하거나 파이프 라인을 정지해야하기 때문입니다.

+0

'base'와 'counter'의 값은 레지스터에 없으므로 RAM에 저장됩니다. 그래서 이렇게하면 오류 메시지가 나타납니다. –

+0

아, 레지스터가 아닌 경우에는 다릅니다. 업데이트 중. – duskwuff

+0

lw/sw와 동등한 명령 행이 하나더라도 명령을 최적화 할 수 있다는 것이 좋을 것입니다. 좋은 1 시간 + 명령을 검색하는 데 보냈습니다. –

4

여기 MIPS

la $t0, base  // load the address of "base" 
la $t1, count // load the address of "count" 
lw $t2, 0($t0) // load the data at location "base" 
sw $t2, 0($t1) // store that data at location "count" 

하나의 명령으로 메모리 이동에 메모리를 할 수 없습니다 그것을 할 방법은 다음과 같습니다.

+0

'lw $ t0, base'와'sw $ t0, count'의 두 명령어로 실제로 할 수 있습니다. –

+0

'lw $ t0, base'는'lui $ at, % hi (base)의 MIPS 어셈블러 단축키입니다. ''lw $ t0, % lo (base) (at)'가 뒤 따른다. 로드 및 저장 순서는 여전히 총 ​​4 개의 기계 명령어입니다. – markgz

+0

이지만 두 개의 실제 명령어 만 사용합니다. –