혹시 이런 것도 할 수 있나?

 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! :) 


어떻게 해야하냐?