li srl sll or nor zero

li - load immediate. 변수를 넣을 때 사용한다. 두 번의 연산을 진행한다.

..text

li $s0,1000

li $s1,-1000

li $s2,8

#shift right logical을 통하여 값이 절반줄음

srl $t0,$s0,1

#음수에 srl. logical로 미룰시 값이 완전 상이한값이 나온다.

srl $t1,$s1,1

#srav는 shift register arithmatice variable 로 변수만큼 이동시킨다.

srav $t2,$s0,$s2

or을 통하여 겹치는 숫자 출력 가능하다,(2진수이다.동일하게 and 가능하다. )

.text

li $s1,100

li $s2,1

or $s3,$s1,$s2(101저장)

nor 과 $zero를 통하여 보수를 만들 수 있다.

la lw

int형 배열 및 숫자 메모리에 저장하는 방법

.data

<메모리명> : .word word[0],word[1],word[2]

ex)

.data

memA :.word 1,2,3,4,5

memB :.word "hihi“

la 와 lw 사용 방법

la:load address-->메모리의 주소를 레지스터에 load한다.

la <레지스트리명>,<메모리명>

ex)

la $s0,memA

#그냥 memA가 가리키는 address 에 +1해주기

la $s1,memA+1

lw:load word-->메모리에 저장된 값을 레지스트리에 load 시켜주기

ex)

lw $s2,memA

#메모리의 단위는 4바이트이므로 4씩 띄워줘야 배열을 한칸씩 점프할 수 있다.

lw $s2,memA+4

lh lb

lh : load half word 로 해당 메모리에 있는 숫자 8개중 가운데를 쪼개서뒷부분을 쓴다.

사용방법 -> lh <레지스트리명>,(<레지스트리명>)-->(<레지스트리명>)을 좌측과 같이 () 안에 들어간 레지스트리명안에는 메모리의 주소가 담겨있어야 한다. 그리고 그메모리주소 안에 있는값을 가져오는 것이다.

즉 레지스트리명->메모리->메모리안 숫자 이다. 따라서 lh는 반드시 la와 동반되어야한다.

하기쉬운 오류

.text

li $s1,0x12345678

lh $s2,($s1)

이렇게하면 오류가 걸린다. 이유는 ()안에 는 메모리 주소를 사용하는것인데, $s1을 해버리면 0x12345678라는 메모리로 찾아가게 되기 때문이다.

lb-->load byte.바이트 단위로 저장시켜주겠다는 의미. 즉 4바이트 2개씩 저장한다는 의미이다.

사용 방법 ->lb <레지스트리명>,(메모리 주소가 저장된 레지스트리명)

*이역시 la와 함께 사용되어야한다.

ex)

.data

mem : .word 0x12345678

.text

la $s1,mem

#78저장

lb $s2,($s1)

#34저장

lb $s3,2($s1)

'언어 > mips' 카테고리의 다른 글

mips_example2  (0) 2017.12.26
mips_example1  (0) 2017.12.26
Branch_jump_jr_매크로&함수_for문_if문  (0) 2017.12.26
기본구조_보수_데이터_immediate  (0) 2017.12.26

+ Recent posts