VEDA(한화비전 아카데미) 1기, 15주차 학습기록_Assembly & Register개념

파랑새·2024년 10월 27일

15주차를 마지막으로 교육주가 모두 끝났다. 짧다면 짧고 길다면 긴 교육기간 동안 빠르고 많은 지식을 배울 수 있었다. 교육전에 예상한 내 모습보다 교육에 열심히 참여한 모습에 자부심을 느낀다.
차주부터는 프로젝트 기간으로, 배정된 팀끼리 뭉쳐 한화비전의 카메라를 이용한 서비스 개발을 진행한다. 인생에 몇 없을 오롯이 학습에 집중하는 시간이 평생 기억날 듯 하다.

15주차 회고

마지막 주제는 Assembly programming이다. ARM CPU를 사용하는 raspberryPi에서 c언어로 어셈블리 파일을 제작하고, 분석하며, 프로그래밍하며 최적화와 cpu register에 대한 개념을 배웠다.
이번 주제는 강사님과 한화비전에서 특별히 언급하는 만큼 카메라 최적화와 고급프로그래머로 성장하기에 꼭 알아야하는 개념이다. 한번더 복습하고 일상에서 자연스럽게 떠오르게 만들자.
FizzBuzz 프로그램을 Assembly로 작성해보면서 동작하는 방식을 익힌다.

    .data
    str: .asciz "i:%d\n"
    str2: asciz "%s\n"
    fmtA: .asciz	"FizzBuzz\n"
    fmtB: .asciz	"Fizz\n"
    fmtC: .asciz	"Buzz\n"
    	.global main
        .text
    
    main:
    	stp x29, x30, [sp, -16]!
        mov x19, xzr
        
    1:
    	cmp	x19, 100
        bgt	10f
        mov x20, x19
    2:
    	cmp	x20, #15
       	blt 3f
        add x20, x20, #-15
        
        cmp x20, #0
        beq printBizzBuzz
        bgt	2b
    3:
    	mov x20, x19
    4:
    	cmp x20, #5
        blt 5f
        add	x20, x20, #-5
        
        cmp x20, #0
        beq printBuzz
        bgt 4b
    5:
    	mov x20, x19
    6:
    	cmp x20, #3
        blt end2
        add x20, x20, #-3
       
       	cmp x20, #0
        beq printBizz
        bgt 6b
    end2:
    	ldr x0, =str
        mov x1, x19
        bl printf
    end1:
    	add x19, x19, #1
      	bl 1b
    10:
    	ret
        
    printBizzBuzz:
    	ldr x0, =fmtA
        bl	printf
        bl	end1
    printBuzz:
    	ldr x0, =fmtC
        bl	printf
        bl	end1
    printBizz:
    	ldr x0, =fmtB
        bl	printf
        bl	end1

새로 배운 내용

  • 알고리즘: 난이도가 올라가면서 DFS, BFS 문제의 최적화를 배운다. 응용문제다 보니, 아이디어는 쉽지만 바로바로 못푸는 문제들이 많다. 감을 잃지 않기위해 매일 한문제씩 꾸준히 풀자.
  • ARM Register: ARM CPU는 0번부터 31까지의 32개의register를 사용한다. x31은 SP(stack Pointer)로 예약되어 다음 명령어 주소를 가르키는데 사용하고, x0~x7은 함수호출시 매개변수로 사용한다. 개념을 알고 CPU 최적화에 대해 계속 생각하자.
  • Assembly: 다양한 어셈블리 명령어를 배웠다. mov, ldr, cmp, bl, add 등의 명령어와 비교연산 명령어(bgt, blt, beq)를 배웠고 어셈블리 언어로 프로그래밍을 해보자.
  • RTCP: 동기가 자료조사후 발표한 RTCP 프로토콜. Realtime Transport Control Protocol로 세션관리를 위해 보통 TCP기반으로 동작하며 가변길이의 헤더를 가진다. 권고사항 (RTP포트+1) 번의 포트를 주로 사용한다.
  • RTSP: 동기가 자료조사후 발표한 RTSP 프로토콜. Realtime Transport Streaming Protocol로 세션관리 및 미디어 제어를 목적으로 한 Server/Client 구조의 프로토콜이다.
    제어를 위한 Option들을 제공하고, HTTP형태로 미디어를 제어할 수 있다. 폐쇄망인 CCTV와 같은 장비에선 아직도 많이 사용하며 발전된 프로토콜로는 RTMP, SRT, HLS등이 있다.

앞으로 해야할 내용

  • 최종 프로젝트 준비: 차주부터 최종 프로젝트에 들어간다. 아직 팀 배정이 되지 않아 할수있는건 별로 없지만 장비Spec을 외우고, 저장소, 프로젝트 워크스페이스를 준비하자.
  • RTCP, RTSP 개념정리: 동기들이 RTCP와 RTSP에 대해 교육을 해줬다. 배운 개념을 정리하고 모르는게 있으면 질문해 교육해준 기회를 잘 살리자.
profile
게으름뱅이

0개의 댓글