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 |