2011-08-31 9 views
4

나는 혼자서 MIPS 어셈블리 언어를 배우려고한다. MARS 시뮬레이터.의사 명령어를 사용하지 않고 메모리 주소를로드하는 방법은 무엇입니까?

나는 교훈적인 이유 때문에 의사 명령어를 사용하지 않기로했습니다.

일부 데이터의 주소를 레지스터로 가져 오는 동안 la을 사용할 수 없기 때문에 문제가 발생했습니다. 의사 명령어없이,

.data 
arr: 
    .byte 0xa1 
    .byte 0xb2 
    .byte 0xc3 
    .byte 0xd4 
    .byte 0xe5 
    .byte 0xf6 
    .byte 0x7a 
    .byte 0x8b 
    .byte 0x9c 
    .byte 0xad 

.text 

    lui $s0, mem # <--- mars just gives me errors here :(
    ori $s0, mem # ?? ... 

이 행할 특히 MARS 를 사용하여 :

나는 아무 소용, ori와 함께 lui를 사용하여 내가 직접 숫자를로드 할 수 있다면 같은 시도? 방법?

미리 감사드립니다.

답변

5

"은 의사 명령어가없는 MARS를 사용하여 수행 할 수 있습니까?": MARS 설명서의 빠른 스캔에서 나타납니다. MARS는 교육적 목적으로 의도적으로 제한된 것으로 보입니다.

MIPS에서 실행되는 Linux OS를 시뮬레이트하고 gnu 툴체인으로 빌드 된 코드를 실행하는 전체 MIPS 시뮬레이터에서이 작업을 시도하려면 OVP Simulator을 살펴보십시오. 이것은 무료이며 Linux 및 Windows에서 실행되지만, 아마도 많은 이상 필요합니다.

+0

다시 줘! 통찰력에 감사드립니다. :) 그래, 가능하지 않다고 생각했지만, 디자이너가 의사 지침을 작성하는 것이 실제 지침으로 달성 할 수없는 일을하는 것이 주요 결함이라고 생각했습니다. 나는 OVP를 시험해보고 누군가가 해결책을 내놓는 지 알아보기 위해 며칠을 기다려야한다.) – Trinidad

+1

@ 트리니다드 : 방금 시도해 보았고'li $ t0, 2 + 2'이므로 markgz에 동의합니다. – user786653

2

lui 및 ori 지침의 데이터 섹션에있는 레이블을 참조해야합니다.

.data 
lab1: .byte 0xa1 
... 
.text 
    lui $s0, %hi(lab1) 
    ori $s0, %lo(lab1) 
    lw $s2, 0($s1) 
... 

을 % 안녕과 % 싸다 지시어는 기계 코드에 라벨 "LAB1"의 주소를 넣을 수 있도록, 무슨 일이 일어나고 있는지 링커에게 : 이것은 GNU 어셈블러 (같은) 작동합니다.

+0

내게 알려지지 않은 문자 오류 – robert

2

귀하의 ori 명령어는 작동하기 위해 또 다른 피연산자가 필요하며, 귀하의 코드를 검토 한 한, "mem"은 기존 레이블이 없습니다. 이 하나를 시도해보십시오 작동하지 않는 경우

.data 0x10000000 #or choose any other location 
     #pointer section 
     .word arr 
     #... 

     #pointed section 
arr: .byte #... only as tip, you can separate multiple values with comma 
       #behind .byte so that you don't need multiple .byte directives 
     #... 

.text 
     #... 
     lui $s0, 0x1000 
     lw $t0, 0($s0)   #get the value of "arr" 
     #... 

는 MARS 가능성이 의사의 지시없이 라벨 내용을 얻을 수 없습니다.