혹시 이런 것도 할 수 있나?
2. int 형 숫자 배열이 주어졌을 때, 해당 숫자가 홀수면 그대로 출력하고, 짝수이면 해당 숫자를 제곱해서 출력하는 RISC-V 프로그램을 작성하세요. 스켈레톤 코드를 참고해서 작성하세요. 예를 들어, 숫자 배열이 1, 2, 3, 4 로 주어 진 경우 1, 4, 3, 16 을 출력하도록 작성하세요.
# DO NOT MODIFY
.data
src:
.word 1
.word 2
.word 3
.word 4
.word 0
.text
main:
# DO NOT MODIFY
addi t0, x0, 0
la t1, src
loop:
slli t3, t0, 2
add t4, t1, t3
lw t5, 0(t4)
beq t5, x0, exit
addi t0, t0, 1
jal x0, loop
exit:
jal ra, print_lists
addi a0, x0, 10
add a1, x0, x0
ecall # Terminate
print_lists:
addi sp, sp, -4
sw ra, 0(sp)
la a0, src
jal ra, print_list
addi a1, x0, '\n'
addi a0, x0, 11
ecall
lw ra, 0(sp)
addi sp, sp, 4
jr ra
print_list:
# Stop recursing when the value at 0(a0) is 0
lw t0, 0(a0)
bne t0, x0, printChar
jr ra
printChar:
# Print integer pointed to by address in a0
# CODE YOURSELF
## DO NOT MODIFY
# Print a space
addi a1, x0, ' '
addi a0, x0, 11
ecall
# Go to next array element
addi a0, t0, 4
jal x0, print_list
##
3. 문자열이 주어질 때, 목적지 배열에 소스 배열의 문자를 주어진 n 바이트만큼 복사하는 RISC-V 프로그램을 작성하세요. 아래 조건을 반드시 만족해야 함. 스켈레톤 코드를 참고해서 작성하세요 (단, 문자열 최대 길이는 20 을 넘지 않는다).
조건1. 목적지 배열은 Malloc을 활용해서 20byte만큼 할당하기
조건2. Malloc으로 할당한 배열은 반드시 0 (x0) 으로 초기화
조건3. 프로그램 종료 전, program exit (a0 = 10) ecall 호출하기
## DO NOT REMOVE
.data
src: .asciiz "IDS Lab"
n: .word 3
#########################
.text
strncpy:
# Bon Appetite! :)
어떻게 해야하냐?