Self-Improvement
** MIPS Instruction ** 본문
틀린점이 있다면 지적 바랍니다.
sw (store word)
ex)
sw $zero, 0xC8+var_8($fp)
// var_8에 값 0을 저장
sh (store halfword)
ex)
sh $t8, 0x70+var_32($sp)
// var_32에 $t8의 값 2byte 할당 ex) socket의 port 부분
lw (load word)
ex)
lw $v0, 0xC8+arg_4($fp)
// $v0에 arg_4에 저장된 값 4byte를 저장
slti, sltiu (set less than immediate, set less than immediate unsigned)
ex)
sltiu $v0, 9
// $v0의 값이 9보다 작으면 $v0=1 아니면 $v0=0
beqz (branch on equal zero)
ex)
beqz $v0, def_40420C
// $v0 = 0이면 def_40420C로 jmp
// if( $v0 == 0 ) go to def_40420C
bnez (branch on not eaqual zero)
ex)
bnez $v0, loc_4043AC
// $v0 = 0이 아니면 loc_4043AC로 jmp
// if( $v0 != 0 ) go to loc_4043AC
bne (branch on not equal)
ex)
bne $v1, $v0, loc_404490
// $v1과 $v0이 같지 않으면 loc_404490로 jmp
// if( $v1 != $v0 ) go to loc_404490
sll (shift left logical)
ex)
sll $v1, $v0, 2
// $v0의 값을 왼쪽 쉬프트 연산 2번하여 $v1에 저장
// $v1 = $v0 *4, $v1 = $v0 << 2
srl (=sra, shift right logical)
ex)
srl $v1, $v0, 2
// $v0의 값을 오른쪽 쉬프트 연산 2번하여 $v1에 저장
// $v1 = $v0 * 1/4, $v1 = $v0 >> 2
la (load address)
ex)
la $v0, loc_470000
// $v0에 loc_470000 주소를 저장
sb (store byte)
ex)
sb $zero, 0xC8+var_A0($fp)
// 0의 값을 var_A0의 1바이트에 저장
lb (load byte)
ex)
lb $v0, 0x11($v0)
// $v0의 값에 + 0x11를 더한 값의 1바이트를 $v0에 저장
li (load immediate)
ex)
li $gp, 0x98490
// $gp에 0x98490값을 저장
lui (load upper immediate)
ex)
lui $v0, 0x47
// $v0 값은 0x00470000
addu (add unsigned)
ex)
addu $gp, $t9
// $gp에 $gp + $t9의 값을 저장
addiu (add immediate unsigned)
ex)
addiu $v0, $v1, $v0
// $v0에 $v1 + $v0의 값을 저장
blez (Branch on Less Than or Equal to Zero)
ex)
blez $s4, loc_4030B4
// $s4가 0보다 같거나 작으면 분기
// if( $s4 <= 0 ) go to loc_4030B4
bltz (Branch on Less Than Zero)
= 0 보다 작을 경우 분기한다
// if( $v0 < 0 ) go to ~~
bgez (Branch on Greater Than or Equal to Zero)
= 0 보다 크거나 같을 경우 분기한다
// if( $v0 >= 0 ) go to ~~
bgtz (Branch on Greater Than Zero)
= 0 보다 크면 분기
// if( $v0 > 0 ) go to ~~
ldc1, sdc1
= 단순히 lw, sw와 동일하며 double형 값을 사용할때 이용된다.
SWR
ex) $a1 = 0x2D505452
swr $a1, 0($t8)
$t8
[0] [1] [2] [3] [4] [5] ....
2d 50 54 52
= $a1에 저장된 값을 $t8의 0번지 부터 저장하며 4byte씩 끊는다
swr $a1, 2($t8)
[0] [1] [2] [3] [4] [5] ....
2d 50
SWL
ex) $a1 = 0x2D505452
swl $a1, 3($t8)
$t8
[0] [1] [2] [3] [4] [5] ....
2d 50 54 52
swl $a1, 2($t8)
$t8
[0] [1] [2] [3] [4] [5] ....
50 54 52
slt(sltu) (Set on Less Than)
slt $t8, $s0, $t8
= $s0이 $t8보다 작으면 $t8의 값은 1, 아닐 경우 0
'MIPS' 카테고리의 다른 글
MIP의 함수 포인터(Function pointer) 예제 및 확인 $t9 (0) | 2021.01.12 |
---|---|
mips의 pointer(포인터) 사용 예제 ($v0) (0) | 2021.01.11 |
ARM, MIPS의 socket TYPE 차이 (0) | 2020.12.29 |
MIPS 기초분석 4 (Case, for 문) (0) | 2020.09.04 |
MIPS 기초 (레지스터) (0) | 2020.09.03 |