- 주석
- opcode
- .data vs .text
- Register
- System Call
1. 주석
코드의 앞에 #을 쓰면 주석 처리를 할 수 있습니다.
2. opcode
opcode는 operations code의 약자로 어떤 연산을 수행할 것인가를 알려줍니다.
① Artithmetic Instructions
opcode | 뜻 | 예제 | 의미 |
add | 더하기 | add $s1, $t0, $t1 | $s1 = $t0 + $t1 |
sub | 빼기 | sub $s1, $t0, $t1 | $s1 = $t0 - $t1 |
mul | 곱하기 | mul $s1, $t0, $t1 | $s1 = $t0 × $t1 |
mult | 곱하기 | mult $t0, $t1 | Lo, Hi = $t0 × $t1 |
div | 나누기 | div $t0, $t1 | Lo = $t0 ÷ $t1의 몫 , Hi = $t0 ÷ $t1의 나머지 |
mflo | Lo의 값 불러오기 | mflo $s1 | $s1 = Lo |
mfhi | Hi의 값 불러오기 | mfhi $s1 | $s1 = Hi |
② Data Transfer Instructions
opcode | 뜻 | 예제 | 의미 |
lw | 단어를 로드 | lw $t1, A | 레지스터($t1)에 메모리(A)의 데이터를 로드 |
li | 바로 로드 | li $a0, 12 | 레지스터($a0)에 바로 12를 로드 |
la | 주소 로드 | la $a0, A | 레지스터($a0)에 A의 주소를 로드 |
sw | 저장 | sw $v0, A | 메모리(A)에 레지스터(v0)의 값을 저장 |
③ Logic Instructions
opcode | 뜻 | 예제 | 의미 |
beq | 두 값이 같을 경우 | beq $t0 $t1 A | $t0 == $t1 이라면 A 함수로 이동 |
bne | 두 값이 다를 경우 | beq $t0 $t1 A | $t0 != $t1 이라면 A 함수로 이동 |
slt | 크기 비교 | slt $s0, $t0, $t1 | $t0 < $t1 이라면 $s0는 1 아니면 $s0는 0 |
slti | 크기 비교 | slti $s0, $t0, 10 | $t0 <10 이라면 $s0는 1 아니면 $s0는 0 |
④ Branch and Jump-Related Instrutions
opcode | 뜻 | 예제 | 의미 |
j | 주소로 이동(점프) | j A | A 주소로 바로 이동(점프) |
jr | 레지스터로 이동(점프) | jr $s1 | $s1 레지스터로 바로 이동(점프) |
jar | 점프 후 다음 명령어 주소 전달 | jar A | A 주소로 이동 후 ra 레지스터에 다음 명령어 주소 전달 |
3. .data vs .text
.data는 static data를 쓰는 공간으로 주로 변수를 선언하는 데 사용합니다.
.text는 수행하고자 하는 code를 쓰는 공간입니다. main 함수를 비롯한 다양한 함수를 작성합니다.
.data #변수 선언 msg : .asciiz "Hello World!" .text #코드 작성 main : la $a0, msg li $v0, 4 syscall li $v0, 10 syscall |
4. MIPS Registers
번호 | 이름 | 용도 |
$0 | $zero | 고정된 값 0 출력. 변경 X |
$1 | $at | 어셈블러를 위해 예약된 레지스터 (의사 명령어 결과 저장) |
$2 ~ $3 | $v0 ~ $v1 | 함수로부터 반환된 값을 저장 시 사용 |
$4 ~ $7 | $a0 ~ $a3 | 함수 인수 저장 시 사용 |
$8 ~ $15 | $t0 ~ $t7 | 임시로 값을 저장할 때 사용 (자주 바뀌는 값) |
$16 ~ $23 | $s0 ~ $s7 | 자주 바뀌지 않고 오랫동안 사용하는 값을 저장할 때 사용 |
$24 ~ $25 | $t8 ~ $t9 | 임시로 값을 저장할 때 사용 (자주 바뀌는 값) |
$26 ~ $27 | $k0 ~ $k1 | OS Kernel을 위해 예약된 레지스터 |
$28 | $gq | global pointer 값 저장 시 사용 |
$29 | $sp | stack pointer 값 저장 시 사용 |
$30 | $fp | frame pointer 값 저장 시 사용 |
$31 | $ra | return address 값 저장 시 사용 |
5. System Call
시스템 콜은 복잡한 코드를 작성할 필요 없이 호출만으로 특정 기능을 사용하도록 편의성을 제공하는 기능입니다.
System Call Code Number | 수행 내용 | System Call Code Number | 수행 내용 |
1 | print int | 6 | read_float |
2 | print float | 7 | read_double |
3 | print double | 8 | read_string |
4 | print string | 9 | sbrk |
5 | read_int | 10 | exit |
1번 ~ 4번은 데이터의 출력을 담당합니다. 5번 ~ 8번은 데이터의 입력을 담당하며 사용자로부터 값을 입력받을 때 주로 사용합니다. 9번은 메모리 할당을 할 때 사용하며 10번은 코드의 끝을 알려주어 프로그램을 종료할 때 사용합니다.
'Programming > Assembly Language' 카테고리의 다른 글
[MIPS] QtSpim 예제 3 - 나눗셈(몫과 나머지 출력) (0) | 2020.11.07 |
---|---|
[MIPS] QtSpim 예제 2 - 더하기, 빼기 (0) | 2020.11.06 |
[MIPS] QtSpim 예제 1 - 문자 출력하기 (0) | 2020.11.05 |
[MIPS] QtSpim 사용법 (0) | 2020.11.03 |
[MIPS] QtSpim 설치 방법 (0) | 2020.11.02 |