CS 3

[컴퓨터구조] RISC-V 피보나치 수열 어셈블리

컴퓨터구조 수업 프로젝트로 어셈블리 코딩을 진행했는데, 단순재귀는 할만했지만 메모이제이션을 사용하는게 꽤 힘들었던 기억이 난다. 너무 로우레벨이라 생각하는 방식을 평소 코딩이랑 다르게 해야해서 까다로웠다. 먼저 단순 재귀로만 구현한 피보나치# execute시 t5에 input, t6에 output 출력됨li x31, 0 # x31 = output = answeraddi x30, x0, 20 # x30 = input (유지) , 20 넣을시 0x1a6d(6765) 출력add x5, x0, x30 # N (계산을 위해 사용)jal fib # Call the fib functionj END # End of p..

CS/컴퓨터구조 2025.03.09

[Verilog] AES 128

Verilog 프로젝트로, 128비트 입력 및 키가 주어졌을 때의 AES 암호화 및 복호화 알고리즘을 구현했다. https://www.researchgate.net/publication/317615794_Advanced_Encryption_Standard_AES_Algorithm_to_Encrypt_and_Decrypt_Data AES 암호화란 간단하게 설명하자면 입력으로 암호화할 텍스트와 키를 받고, Subbyte - Shiftrows - Mixcolumns - Addroundkey라는 암호화 스테이지를 10번 반복해서 암호화하는 알고리즘이다. 그래서 각각의 암호화 스테이지를 함수(task 및 function)으로 미리 구현하여 사용하였다. 아래 코드는 Verilog로 작성하기 전, 먼저 C언어로 작성..

CS/Verilog 2025.03.08

[시스템프로그래밍] 리눅스 간단한 ls 구현

# 간단한 ls#include #include #include void do_ls(char []);int main(int ac, char *av[]) { if (ac==1) // 인자(목적 디렉토리)를 넣지 않았을 경우 do_ls("."); else while(--ac) // 인자를 넣었을 경우 { printf("%s:\n", *++av); do_ls(*av); } return 0;}void do_ls(char dirname[]){ DIR *dir_ptr; // 디렉토리를 열기 위한 포인터 struct dirent *direntp; // 파일의 정보를 받아오기 위한 구조체, 아래 dirent 구조체 참고 if((dir_ptr = opendir(dirname))==NULL) // 오류 처리 ..