본문 바로가기

Programming/Assembly Language

(10)
[MIPS] QtSpim 예제 7 - 중첩 반복문(구구단) 사용 opcode : lw, beq, move, li, la, mul, add, j, bne 사용 system call : 1, 4, 10 1. 문제 2단 ~ 9단까지 구구단을 출력해라. 예시) 2×1=2 2×2=4 2. 정답 .data n : .word 2 i : .word 1 txt1 : .asciiz " X " txt2 : .asciiz " = " txt3 : .asciiz "\n" .text main : lw $s0, n lw $s1, i loop : beq $s1, 10, loop2 move $a0, $s0 li $v0, 1 syscall la $a0, txt1 li $v0, 4 syscall move $a0, $s1 li $v0, 1 syscall la $a0, txt2 li $v0, 4 sy..
[MIPS] QtSpim 예제 6 - 반복문 구현 사용 opcode : li, move, add, beq, j 사용 system call : 1, 4, 5, 10 1. 문제 정수 하나를 입력받는다. 이 정수보다 큰 정수 중 가장 작은 값의 정수를 5개 출력해라. 정수의 구분은 , 으로 한다. ex) 만약 5를 입력받았다면 6,7,8,9,10을 출력한다. 2. 정답 .data i : .word 1 std : .asciiz "," .text main: li $v0, 5 syscall move $t1, $v0 lw $t0, i la $s1, std loop: add $s0, $t1, $t0 move $a0, $s0 li $v0, 1 syscall add $t0, $t0, 1 beq $t0, 6, end move $a0, $s1 li $v0, 4 syscall..
[MIPS] QtSpim 예제 5 - 조건문 (두 수 크기 비교) 사용 opcode : li, move, slt, beq 사용 system call : 1, 5, 10 1. 문제 두 개의 정수를 입력받고 더 큰 값을 출력해라. 2. 정답 .text main : li $v0, 5 syscall move $t0, $v0 li $v0, 5 syscall move $t1, $v0 slt $s0, $t0, $t1 beq $s0, 1, function move $a0, $t0 li $v0, 1 syscall li $v0, 10 syscall function : move $a0, $t1 li $v0, 1 syscall li $v0, 10 syscall 3. 풀이 system call code 5번을 사용해 숫자를 입력받고 레지스터에 값을 복사해줍니다. 첫번째 숫자는 $t0에 두번째..
[MIPS] QtSpim 예제 4 - 값을 입력받아 곱셈 수행하기 사용 opcode : li, move, mul 사용 system call : 1, 5, 10 1. 문제 두 수를 입력받고 두 수의 곱을 출력해라. 2. 정답 .text main: li $v0, 5 syscall move $t0, $v0 li $v0, 5 syscall move $t1, $v0 mul $s0, $t0, $t1 move $a0, $s0 li $v0, 1 syscall li $v0, 10 syscall 3. 풀이 숫자를 입력받기 위해서는 system call code 5번을 사용하면 됩니다. system call 5를 호출해 값을 입력받은 후 move를 사용해 값을 t0레지스터에 복사해주세요. 숫자를 하나 더 입력받아야 하므로 다시 system call 5를 호출한 후 t1레지스터에 값을 복사..
[MIPS] QtSpim 예제 3 - 나눗셈(몫과 나머지 출력) 사용 opcode : lw, div, mflo, mfhi, li, move 사용 system call : 1, 10 1. 문제 55÷16의 몫과 나머지를 출력해라. 2. 정답 .data A: .word 55 B: .word 16 .text main: lw $t0, A lw $t1, B div $t0, $t1 mflo $s0 mfhi $s1 move $a0, $s0 li $v0, 1 syscall move $a0, $s1 li $v0, 1 syscall li $v0, 10 syscall 3. 풀이 숫자를 계산하기 위해서는 먼저 숫자를 저장할 공간이 필요합니다. 변수를 선언한 후 숫자를 할당해줍니다. .data A : .word 55 B : .word 16 나눗셈에 필요한 변수(A와 B)의 데이터를 레지스터..
[MIPS] QtSpim 예제 2 - 더하기, 빼기 사용 opcode : lw, add, sub, li, move 사용 system call : 1, 10 1. 문제 1+6-5를 계산하고 결과값을 출력해라. 2. 정답 .data A: .word 1 B: .word 6 C: .word 5 .text main: lw $t0, A lw $t1, B add $s0, $t0, $t1 lw $t2, C sub $s1, $s0, $t2 move $a0, $s1 li $v0, 1 syscall li $v0, 10 syscall 3. 풀이 숫자를 계산하기 위해서는 먼저 숫자를 저장할 공간이 필요합니다. 변수를 선언한 후 숫자를 할당해줍니다. .data A : .word 1 B : .word 6 C : .word 5 덧셈에 필요한 변수(A와 B)의 데이터를 레지스터에 로드..
[MIPS] QtSpim 예제 1 - 문자 출력하기 사용 opcode : la, li 사용 system call : 4, 10 1. 문제 Hello World!를 출력해라. 2. 정답 .data msg : .asciiz "Hello World!" .text main: la $a0, msg li $v0, 4 syscall li $v0, 10 syscall 3. 풀이 Hello World!를 출력하기 위해서는 Hello World!를 저장할 공간이 필요합니다. 따라서 새로운 변수를 선언해주어야 합니다. 이 변수의 이름을 msg라고 가정하겠습니다. 이를 어셈블리어 코드로 나타내면 아래와 같습니다. msg : .asciiz "Hello World!" 해당 코드는 msg라는 변수를 새로 선언하고 Hello World!라는 문자열을 할당해준다는 의미입니다. 변수와 ..
[MIPS] QtSpim 기본 문법 주석 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 =..