아래 모든 날짜는 시간대 입니다.
   열리는 날    닫히는 날
수강기간
2024-09-02 00:00:00 GMT
2024-12-15 23:59:59 GMT
수강신청기간
2024-08-19 00:00:00 GMT
2024-09-01 23:59:59 GMT

Great 프로그래머가 되려면 프로그램을 구성하는 가장 낮은 수준부터 가장 높은 수준까지 완벽하게 이해해야 합니다. 이를 통해 저수준과 고수준 사이의 어딘가에서 올바른 결정을 내려 미래에나 가능해 보이는 일을 지금 당장 이뤄낼 수 있으며, 그런 능력을 갖춘 사람이 바로 Great 프로그래머거든요. 하지만 시중에는 고수준 프로그래밍에 관한 강의가 넘쳐나는 반면, 저수준 프로그래밍에 대한 강의는 매우 부족한 상황입니다. 이를 해결하기 위해 POCU 아카데미가 차별화된 저수준 프로그래밍 강좌, 'COMP2300: 어셈블리 프로그래밍'을 선보입니다.

컴퓨터는 딱 한 가지 언어만 이해할 수 있습니다. 기계어, 즉 0과 1로 이루어진 이진수입니다. 마법처럼 보이는 어떤 언어와 도구를 사용하든 간에 그 도구가 하는 일은 결국 기계어를 만들어내는 것이며, 컴퓨터는 그 기계어를 해석해서 실행할 뿐입니다. 따라서 컴퓨터의 동작원리를 이해하기에 기계어를 공부하는 것만큼 좋은 방법이 없죠. 하지만 기계어는 사람이 쉽게 읽을 수 없습니다. 따라서 각 기계어 명령어마다 별칭을 단 언어인 어셈블리어를 그 대신 배우곤 합니다.

본 강좌는 간단히 CPU 구조를 살펴본 뒤, 크게 다음과 같은 순서에 따라 진행됩니다.

  1. 8 비트 어셈블리 프로그래밍 (+컴퓨터 제작)
  2. 16 비트 어셈블리 프로그래밍 (+운영체제 서비스)
  3. 32/64 비트 인라인 어셈블리 프로그래밍 (+SIMD)

'Part 1: 8 비트 어셈블리 프로그래밍'에서는 MOS 6502 CPU를 사용해 기초적인 8 비트 컴퓨터를 제작하고, 그 컴퓨터에서 동작하는 기계어 및 어셈블리어 코드를 작성합니다. 이 부분에서는 CPU의 구조와 동작원리를 이해하고, 어셈블리어를 활용해 하드웨어를 직접 제어하는 제어기기 프로그래밍 패턴을 배울 수 있습니다.

'Part 2: 16 비트 어셈블리 프로그래밍'에서는 현재 데스크톱 CPU 점유율 1위인 x86 계열 CPU의 시초인 Intel 8086/8088 CPU에서 x86-16 어셈블리어 코드를 작성합니다. 이 부분에서는 많은 프로그램에 공통적인 연산(예: 콘솔 출력)을 운영체제의 도움을 받아 처리하는 법을 배우며, 이는 시스템 프로그래밍 패턴을 익히는 좋은 계기가 될 것입니다.

'Part 3: 32/64비트 인라인 어셈블리 프로그래밍'에서는 고수준 언어인 C에서 성능에 중요한 일부 코드만 어셈블리어로 작성하는 인라인 어셈블리 프로그래밍 패턴에 대해 배워봅니다. 또한 한 번의 명령으로 다수의 데이터를 한 번에 처리하는 SIMD(Single Instruction Multiple Data)에 대한 지식도 함께 습득하게 됩니다.

이 과목의 목표는 어셈블리어를 화려하게 구사하는 것이 아닙니다. 이 과목을 성공적으로 끝마친 학생이 기대할 수 있는 효과는 다음과 같습니다.

  1. 프로그래밍의 근본적인 구조와 원리를 깊이 이해하며, 저수준 프로그래밍을 통해 고수준 프로그래밍의 효율성과 높은 수준의 성과를 이끌어 낼 수 있는 Great 프로그래머로 거듭날 것입니다.
  2. 기존에 알고 있던 프로그래밍 언어와 개념에 대한 이해가 더욱 깊어질 것입니다. 특히 어셈블리어를 배우는 것은 최적화된 코드를 작성하는 데 큰 도움이 되며, 높은 수준의 언어와 저수준의 언어 사이에서 발생하는 성능 상의 이슈를 파악하고 해결할 수 있는 능력을 기를 수 있습니다.
  3. 향후에 다양한 플랫폼과 환경에서 동작하는 프로그램을 개발하고 최적화할 때 중요한 역할을 하는 저수준 프로그래밍에 대한 실질적인 이해를 갖추게 될 것입니다. 이는 더욱 전문적이고 성공적인 프로그래머로 성장하는 데 필수적인 역량입니다.
  4. 이 과목에서 얻은 지식과 경험을 바탕으로 프로젝트를 구성하고 관리하는 데 있어 보다 합리적이고 전략적인 결정을 내릴 수 있게 될 것입니다. 이로 인해 프로젝트의 효율성과 성공률이 크게 향상되는 것은 물론, 속한 조직이나 개인적인 경력에서도 큰 도약을 이룰 것입니다.

POCU 아카데미의 독창적이고 철저한 커리큘럼을 통해 하드웨어의 본질을 깊이 이해하고, 기초 컴퓨터 구조 및 운영체제의 세계를 완벽하게 습득하세요. 지금 바로 POCU 아카데미의 어셈블리어 강좌를 통해 프로그래머로서 한 단계 더 도약할 수 있습니다. 저수준 프로그래밍의 흥미로운 세계로 함께 떠나 볼 준비가 되셨나요? 지금 바로 참여하세요!

수강 시작 날짜 : 2024-09-02 00:00:00 GMT

수업 내용
  • 과목 설명
  • 아날로그와 디지털
  • 트랜지스터, 논리 게이트, ALU
  • 튜링 기계
  • 폰 노이만 구조
  • 6502 컴퓨터 제작 시작
  • 브레드 보드, CPU, 클럭, PWM

동영상 강의 범위(총 4시간 26분): 훌륭한 프로그래머와 어셈블리어 ~ 클럭 속도 늦추기

과제 및 실습
  • 실습 1

  • 과제 1  (제출 마감: 2024-09-22 22:00:00 GMT)

수업 내용
  • 스파이더 연결
  • 리셋 벡터(reset vector)
  • 메모리 주소 매핑
  • ROM과 RAM 설치하기
  • 타이밍 다이어그램

동영상 강의 범위(총 2시간 14분): 스파이더 연결하기 ~ 정리

과제 및 실습
  • 실습 2

  • 과제 1  (제출 마감: 2024-09-22 22:00:00 GMT)

수업 내용
  • 헬로 월드
  • 6502 명령어의 구성
  • 기본 주소지정 모드
    • A 주소지정 모드
    • 즉시 주소지정 모드
    • 절대 주소지정 모드
    • zp 주소지정 모드
  • 6502의 레지스터
  • 묵시적 주소지정 모드와 nop

동영상 강의 범위(총 2시간 43분): 어셈블리어의 언어적 분류 ~ 정리

과제 및 실습
  • 실습 3

  • 과제 1  (제출 마감: 2024-09-22 22:00:00 GMT)

수업 내용
  • 산술 연산
  • 논리 연산
  • 비트 연산
  • 상태 플래그
  • 조건문
  • 색인 주소지정 모드
  • 상대 주소지정 모드

동영상 강의 범위(총 3시간 44분): 정수의 덧셈 ~ 정리

과제 및 실습
  • 실습 4

  • 과제 2  (제출 마감: 2024-10-13 22:00:00 GMT)

수업 내용
  • 반복문
  • 배열
  • 간접 참조(indirection)
  • 함수 호출과 회귀
  • zp를 이용한 인자 전달

동영상 강의 범위(총 2시간 15분): 반복문 ~ zp를 이용한 인자 전달

과제 및 실습
  • 실습 5

  • 과제 2  (제출 마감: 2024-10-13 22:00:00 GMT)

수업 내용
  • 스택을 이용한 인자 전달
  • 함수 반환값 전달
  • 함수 호출 오버헤드
  • 간접 주소지정 모드

동영상 강의 범위(총 2시간 13분): 스택을 통한 인자 전달 ~ 정리

과제 및 실습
  • 실습 6

  • 과제 2  (제출 마감: 2024-10-13 22:00:00 GMT)

수업 내용
  • 매크로
  • 주변기기 연결

동영상 강의 범위(총 1시간 2분): 코드 중복의 문제 ~ 정리

과제 및 실습
  • 과제 3  (제출 마감: 2024-11-10 22:00:00 GMT)

수업 내용
  • 수업 및 실습/과제 제출 없음 (이유: 중간고사 주간)
과제 및 실습
  • 과제 3  (제출 마감: 2024-11-10 22:00:00 GMT)

수업 내용
  • x86 아키텍처
  • MS-DOS의 부팅 순서
  • Hello x86
  • 8088의 레지스터와 데이터 형
  • 피연산자 종류
  • x86-16 니모닉

동영상 강의 범위(총 3시간 12분): x86 아키텍처 소개 ~ 정리

과제 및 실습
  • 실습 7

  • 과제 3  (제출 마감: 2024-11-10 22:00:00 GMT)

수업 내용
  • 콘솔 입출력
  • 문자열
  • cdecl 호출 규약
  • 구조체
  • 메모리 세그먼테이션

동영상 강의 범위(총 2시간 44분): 콘솔 출력 ~ 정리

과제 및 실습
  • 실습 8

  • 과제 3  (제출 마감: 2024-11-10 22:00:00 GMT)

수업 내용
  • 8087 FPU 프로그래밍

동영상 강의 범위(총 1시간 25분): 8086과 8087 ~ 정리

과제 및 실습
  • 실습 9

  • 과제 4  (제출 마감: 2024-12-01 22:00:00 GMT)

수업 내용
  • x86-32 아키텍처
  • 인라인 어셈블리
  • 호출 규약
  • SIMD 프로그래밍의 소개와 발전 역사

동영상 강의 범위(총 2시간 24분): CPU 성능의 비약적 발전 ~ 요즘 컴파일러와 SIMD 코드

과제 및 실습
  • 실습 10

  • 과제 4  (제출 마감: 2024-12-01 22:00:00 GMT)

수업 내용
  • SIMD 프로그래밍 개념
  • MMX
  • SSE
  • AVX

동영상 강의 범위(총 1시간 55분): MMX 소개 ~ 정리

과제 및 실습
  • 실습 11

  • 과제 4  (제출 마감: 2024-12-01 22:00:00 GMT)

수업 내용
  • x86-64
  • 컴파일러 내장 함수
  • 마이크로소프트 x64 호출 규약

동영상 강의 범위(총 43분): 64 비트 CPU 타임라인 ~ 에필로그

과제 및 실습
  • 없음

수업 내용
  • 수업 및 실습/과제 제출 없음 (이유: 기말고사 주간)
과제 및 실습
  • 없음

제목   공지일   제출 마감  
실습 1
2024-09-02 00:00:00 GMT (1주 차) 2024-09-08 22:00:00 GMT
실습 2
2024-09-09 00:00:00 GMT (2주 차) 2024-09-15 22:00:00 GMT
실습 3
2024-09-16 00:00:00 GMT (3주 차) 2024-09-22 22:00:00 GMT
실습 4
2024-09-23 00:00:00 GMT (4주 차) 2024-09-29 22:00:00 GMT
실습 5
2024-09-30 00:00:00 GMT (5주 차) 2024-10-06 22:00:00 GMT
실습 6
2024-10-07 00:00:00 GMT (6주 차) 2024-10-13 22:00:00 GMT
실습 7
2024-10-28 00:00:00 GMT (9주 차) 2024-11-03 22:00:00 GMT
실습 8
2024-11-04 00:00:00 GMT (10주 차) 2024-11-10 22:00:00 GMT
실습 9
2024-11-11 00:00:00 GMT (11주 차) 2024-11-17 22:00:00 GMT
실습 10
2024-11-18 00:00:00 GMT (12주 차) 2024-11-24 22:00:00 GMT
실습 11
2024-11-25 00:00:00 GMT (13주 차) 2024-12-01 22:00:00 GMT
과제 1
2024-09-02 00:00:00 GMT (1주 차) 2024-09-22 22:00:00 GMT
과제 2
2024-09-23 00:00:00 GMT (4주 차) 2024-10-13 22:00:00 GMT
과제 3
2024-10-14 00:00:00 GMT (7주 차) 2024-11-10 22:00:00 GMT
과제 4
2024-11-11 00:00:00 GMT (11주 차) 2024-12-01 22:00:00 GMT
2024-09-15 23:59:59 GMT 환불 신청 마감
  • 성적표에 기록되지 않음
  • 전액 환불 (처리 수수료 US$ 100 공제)
2024-11-03 23:59:59 GMT 수강 철회 신청 마감
  • 성적표에 "W"로 표시
수료하지 않은 선수과목에 대한 자가평가 질문
  1. COMP2200: 나는 포인터를 확실히 이해하고 사용할 수 있다.
  2. COMP2200: 나는 어떤 참고자료도 없이 C 표준 라이브러리의 문자열 함수를 직접 다 구현할 수 있다.
시험 응시 준비물
  1. 반드시 PC에서(모바일은 응시 불가) 크롬(Chrome) 브라우저를 사용해야 합니다.

  2. 시험을 볼 때 시험 감독 서비스를 사용하며, 서비스를 이용하기 위한 시스템 최소 사양은 다음과 같습니다.

윈도우 리눅스 크롬 운영체제
운영체제 윈도우 7+ 맥 OSX 10.9+ 우분투 18.04+ 크롬 58+
프로세서 인텔 펜티엄 이상 인텔 또는 ARM 인텔 펜티엄 이상 인텔 또는 ARM
사용 가능한 디스크 공간 250 MB 250 MB 250 MB 250 MB
램(메모리) 4 GB1 4 GB1 4 GB1 4 GB1
업로드 속도 0.092 Mbps - 0.244 Mbps
마이크 내장형 또는 독립형
웹캠 VGA 해상도 320x240 이상, 내장형 또는 독립형
1   메모리의 적어도 25%는 다른 응용 프로그램에서 사용되지 않는다고 가정할 때의 최소 용량입니다. 시험 도중에 시스템 크래시가 나는 일이 생기지 않도록 최소 용량의 50%를 확보해 두길 권장합니다.

통과 점수: 85%

  • 실습 1 (1.00 %)

  • 실습 2 (2.40 %)

  • 실습 3 (2.40 %)

  • 실습 4 (2.40 %)

  • 실습 5 (2.40 %)

  • 실습 6 (2.40 %)

  • 실습 7 (2.40 %)

  • 실습 8 (2.40 %)

  • 실습 9 (2.40 %)

  • 실습 10 (2.40 %)

  • 실습 11 (2.40 %)

  • 과제 1 (6.25 %)

  • 과제 2 (6.25 %)

  • 과제 3 (6.25 %)

  • 과제 4 (6.25 %)

  • 중간고사 (25.0%)

  • 기말고사 (25.0%)

학생 비율 점수
   열리는 날    닫히는 날
수강기간
2025-01-06 00:00:00 GMT
2025-04-20 23:59:59 GMT
수강신청기간
2024-12-23 00:00:00 GMT
2025-01-05 23:59:59 GMT

Great 프로그래머가 되려면 프로그램을 구성하는 가장 낮은 수준부터 가장 높은 수준까지 완벽하게 이해해야 합니다. 이를 통해 저수준과 고수준 사이의 어딘가에서 올바른 결정을 내려 미래에나 가능해 보이는 일을 지금 당장 이뤄낼 수 있으며, 그런 능력을 갖춘 사람이 바로 Great 프로그래머거든요. 하지만 시중에는 고수준 프로그래밍에 관한 강의가 넘쳐나는 반면, 저수준 프로그래밍에 대한 강의는 매우 부족한 상황입니다. 이를 해결하기 위해 POCU 아카데미가 차별화된 저수준 프로그래밍 강좌, 'COMP2300: 어셈블리 프로그래밍'을 선보입니다.

컴퓨터는 딱 한 가지 언어만 이해할 수 있습니다. 기계어, 즉 0과 1로 이루어진 이진수입니다. 마법처럼 보이는 어떤 언어와 도구를 사용하든 간에 그 도구가 하는 일은 결국 기계어를 만들어내는 것이며, 컴퓨터는 그 기계어를 해석해서 실행할 뿐입니다. 따라서 컴퓨터의 동작원리를 이해하기에 기계어를 공부하는 것만큼 좋은 방법이 없죠. 하지만 기계어는 사람이 쉽게 읽을 수 없습니다. 따라서 각 기계어 명령어마다 별칭을 단 언어인 어셈블리어를 그 대신 배우곤 합니다.

본 강좌는 간단히 CPU 구조를 살펴본 뒤, 크게 다음과 같은 순서에 따라 진행됩니다.

  1. 8 비트 어셈블리 프로그래밍 (+컴퓨터 제작)
  2. 16 비트 어셈블리 프로그래밍 (+운영체제 서비스)
  3. 32/64 비트 인라인 어셈블리 프로그래밍 (+SIMD)

'Part 1: 8 비트 어셈블리 프로그래밍'에서는 MOS 6502 CPU를 사용해 기초적인 8 비트 컴퓨터를 제작하고, 그 컴퓨터에서 동작하는 기계어 및 어셈블리어 코드를 작성합니다. 이 부분에서는 CPU의 구조와 동작원리를 이해하고, 어셈블리어를 활용해 하드웨어를 직접 제어하는 제어기기 프로그래밍 패턴을 배울 수 있습니다.

'Part 2: 16 비트 어셈블리 프로그래밍'에서는 현재 데스크톱 CPU 점유율 1위인 x86 계열 CPU의 시초인 Intel 8086/8088 CPU에서 x86-16 어셈블리어 코드를 작성합니다. 이 부분에서는 많은 프로그램에 공통적인 연산(예: 콘솔 출력)을 운영체제의 도움을 받아 처리하는 법을 배우며, 이는 시스템 프로그래밍 패턴을 익히는 좋은 계기가 될 것입니다.

'Part 3: 32/64비트 인라인 어셈블리 프로그래밍'에서는 고수준 언어인 C에서 성능에 중요한 일부 코드만 어셈블리어로 작성하는 인라인 어셈블리 프로그래밍 패턴에 대해 배워봅니다. 또한 한 번의 명령으로 다수의 데이터를 한 번에 처리하는 SIMD(Single Instruction Multiple Data)에 대한 지식도 함께 습득하게 됩니다.

이 과목의 목표는 어셈블리어를 화려하게 구사하는 것이 아닙니다. 이 과목을 성공적으로 끝마친 학생이 기대할 수 있는 효과는 다음과 같습니다.

  1. 프로그래밍의 근본적인 구조와 원리를 깊이 이해하며, 저수준 프로그래밍을 통해 고수준 프로그래밍의 효율성과 높은 수준의 성과를 이끌어 낼 수 있는 Great 프로그래머로 거듭날 것입니다.
  2. 기존에 알고 있던 프로그래밍 언어와 개념에 대한 이해가 더욱 깊어질 것입니다. 특히 어셈블리어를 배우는 것은 최적화된 코드를 작성하는 데 큰 도움이 되며, 높은 수준의 언어와 저수준의 언어 사이에서 발생하는 성능 상의 이슈를 파악하고 해결할 수 있는 능력을 기를 수 있습니다.
  3. 향후에 다양한 플랫폼과 환경에서 동작하는 프로그램을 개발하고 최적화할 때 중요한 역할을 하는 저수준 프로그래밍에 대한 실질적인 이해를 갖추게 될 것입니다. 이는 더욱 전문적이고 성공적인 프로그래머로 성장하는 데 필수적인 역량입니다.
  4. 이 과목에서 얻은 지식과 경험을 바탕으로 프로젝트를 구성하고 관리하는 데 있어 보다 합리적이고 전략적인 결정을 내릴 수 있게 될 것입니다. 이로 인해 프로젝트의 효율성과 성공률이 크게 향상되는 것은 물론, 속한 조직이나 개인적인 경력에서도 큰 도약을 이룰 것입니다.

POCU 아카데미의 독창적이고 철저한 커리큘럼을 통해 하드웨어의 본질을 깊이 이해하고, 기초 컴퓨터 구조 및 운영체제의 세계를 완벽하게 습득하세요. 지금 바로 POCU 아카데미의 어셈블리어 강좌를 통해 프로그래머로서 한 단계 더 도약할 수 있습니다. 저수준 프로그래밍의 흥미로운 세계로 함께 떠나 볼 준비가 되셨나요? 지금 바로 참여하세요!

수강 시작 날짜 : 2025-01-06 00:00:00 GMT

수업 내용
  • 과목 설명
  • 아날로그와 디지털
  • 트랜지스터, 논리 게이트, ALU
  • 튜링 기계
  • 폰 노이만 구조
  • 6502 컴퓨터 제작 시작
  • 브레드 보드, CPU, 클럭, PWM

동영상 강의 범위(총 4시간 26분): 훌륭한 프로그래머와 어셈블리어 ~ 클럭 속도 늦추기

과제 및 실습
  • 실습 1

  • 과제 1  (제출 마감: 2025-01-26 22:00:00 GMT)

수업 내용
  • 스파이더 연결
  • 리셋 벡터(reset vector)
  • 메모리 주소 매핑
  • ROM과 RAM 설치하기
  • 타이밍 다이어그램

동영상 강의 범위(총 2시간 14분): 스파이더 연결하기 ~ 정리

과제 및 실습
  • 실습 2

  • 과제 1  (제출 마감: 2025-01-26 22:00:00 GMT)

수업 내용
  • 헬로 월드
  • 6502 명령어의 구성
  • 기본 주소지정 모드
    • A 주소지정 모드
    • 즉시 주소지정 모드
    • 절대 주소지정 모드
    • zp 주소지정 모드
  • 6502의 레지스터
  • 묵시적 주소지정 모드와 nop

동영상 강의 범위(총 2시간 43분): 어셈블리어의 언어적 분류 ~ 정리

과제 및 실습
  • 실습 3

  • 과제 1  (제출 마감: 2025-01-26 22:00:00 GMT)

수업 내용
  • 산술 연산
  • 논리 연산
  • 비트 연산
  • 상태 플래그
  • 조건문
  • 색인 주소지정 모드
  • 상대 주소지정 모드

동영상 강의 범위(총 3시간 44분): 정수의 덧셈 ~ 정리

과제 및 실습
  • 실습 4

  • 과제 2  (제출 마감: 2025-02-16 22:00:00 GMT)

수업 내용
  • 반복문
  • 배열
  • 간접 참조(indirection)
  • 함수 호출과 회귀
  • zp를 이용한 인자 전달

동영상 강의 범위(총 2시간 15분): 반복문 ~ zp를 이용한 인자 전달

과제 및 실습
  • 실습 5

  • 과제 2  (제출 마감: 2025-02-16 22:00:00 GMT)

수업 내용
  • 스택을 이용한 인자 전달
  • 함수 반환값 전달
  • 함수 호출 오버헤드
  • 간접 주소지정 모드

동영상 강의 범위(총 2시간 13분): 스택을 통한 인자 전달 ~ 정리

과제 및 실습
  • 실습 6

  • 과제 2  (제출 마감: 2025-02-16 22:00:00 GMT)

수업 내용
  • 매크로
  • 주변기기 연결

동영상 강의 범위(총 1시간 2분): 코드 중복의 문제 ~ 정리

과제 및 실습
  • 과제 3  (제출 마감: 2025-03-16 22:00:00 GMT)

수업 내용
  • 수업 및 실습/과제 제출 없음 (이유: 중간고사 주간)
과제 및 실습
  • 과제 3  (제출 마감: 2025-03-16 22:00:00 GMT)

수업 내용
  • x86 아키텍처
  • MS-DOS의 부팅 순서
  • Hello x86
  • 8088의 레지스터와 데이터 형
  • 피연산자 종류
  • x86-16 니모닉

동영상 강의 범위(총 3시간 12분): x86 아키텍처 소개 ~ 정리

과제 및 실습
  • 실습 7

  • 과제 3  (제출 마감: 2025-03-16 22:00:00 GMT)

수업 내용
  • 콘솔 입출력
  • 문자열
  • cdecl 호출 규약
  • 구조체
  • 메모리 세그먼테이션

동영상 강의 범위(총 2시간 44분): 콘솔 출력 ~ 정리

과제 및 실습
  • 실습 8

  • 과제 3  (제출 마감: 2025-03-16 22:00:00 GMT)

수업 내용
  • 8087 FPU 프로그래밍

동영상 강의 범위(총 1시간 25분): 8086과 8087 ~ 정리

과제 및 실습
  • 실습 9

  • 과제 4  (제출 마감: 2025-04-06 22:00:00 GMT)

수업 내용
  • x86-32 아키텍처
  • 인라인 어셈블리
  • 호출 규약
  • SIMD 프로그래밍의 소개와 발전 역사

동영상 강의 범위(총 2시간 24분): CPU 성능의 비약적 발전 ~ 요즘 컴파일러와 SIMD 코드

과제 및 실습
  • 실습 10

  • 과제 4  (제출 마감: 2025-04-06 22:00:00 GMT)

수업 내용
  • SIMD 프로그래밍 개념
  • MMX
  • SSE
  • AVX

동영상 강의 범위(총 1시간 55분): MMX 소개 ~ 정리

과제 및 실습
  • 실습 11

  • 과제 4  (제출 마감: 2025-04-06 22:00:00 GMT)

수업 내용
  • x86-64
  • 컴파일러 내장 함수
  • 마이크로소프트 x64 호출 규약

동영상 강의 범위(총 43분): 64 비트 CPU 타임라인 ~ 에필로그

과제 및 실습
  • 없음

수업 내용
  • 수업 및 실습/과제 제출 없음 (이유: 기말고사 주간)
과제 및 실습
  • 없음

제목   공지일   제출 마감  
실습 1
2025-01-06 00:00:00 GMT (1주 차) 2025-01-12 22:00:00 GMT
실습 2
2025-01-13 00:00:00 GMT (2주 차) 2025-01-19 22:00:00 GMT
실습 3
2025-01-20 00:00:00 GMT (3주 차) 2025-01-26 22:00:00 GMT
실습 4
2025-01-27 00:00:00 GMT (4주 차) 2025-02-02 22:00:00 GMT
실습 5
2025-02-03 00:00:00 GMT (5주 차) 2025-02-09 22:00:00 GMT
실습 6
2025-02-10 00:00:00 GMT (6주 차) 2025-02-16 22:00:00 GMT
실습 7
2025-03-03 00:00:00 GMT (9주 차) 2025-03-09 22:00:00 GMT
실습 8
2025-03-10 00:00:00 GMT (10주 차) 2025-03-16 22:00:00 GMT
실습 9
2025-03-17 00:00:00 GMT (11주 차) 2025-03-23 22:00:00 GMT
실습 10
2025-03-24 00:00:00 GMT (12주 차) 2025-03-30 22:00:00 GMT
실습 11
2025-03-31 00:00:00 GMT (13주 차) 2025-04-06 22:00:00 GMT
과제 1
2025-01-06 00:00:00 GMT (1주 차) 2025-01-26 22:00:00 GMT
과제 2
2025-01-27 00:00:00 GMT (4주 차) 2025-02-16 22:00:00 GMT
과제 3
2025-02-17 00:00:00 GMT (7주 차) 2025-03-16 22:00:00 GMT
과제 4
2025-03-17 00:00:00 GMT (11주 차) 2025-04-06 22:00:00 GMT
2025-01-19 23:59:59 GMT 환불 신청 마감
  • 성적표에 기록되지 않음
  • 전액 환불 (처리 수수료 US$ 100 공제)
2025-03-09 23:59:59 GMT 수강 철회 신청 마감
  • 성적표에 "W"로 표시
수료하지 않은 선수과목에 대한 자가평가 질문
  1. COMP2200: 나는 포인터를 확실히 이해하고 사용할 수 있다.
  2. COMP2200: 나는 어떤 참고자료도 없이 C 표준 라이브러리의 문자열 함수를 직접 다 구현할 수 있다.
시험 응시 준비물
  1. 반드시 PC에서(모바일은 응시 불가) 크롬(Chrome) 브라우저를 사용해야 합니다.

  2. 시험을 볼 때 시험 감독 서비스를 사용하며, 서비스를 이용하기 위한 시스템 최소 사양은 다음과 같습니다.

윈도우 리눅스 크롬 운영체제
운영체제 윈도우 7+ 맥 OSX 10.9+ 우분투 18.04+ 크롬 58+
프로세서 인텔 펜티엄 이상 인텔 또는 ARM 인텔 펜티엄 이상 인텔 또는 ARM
사용 가능한 디스크 공간 250 MB 250 MB 250 MB 250 MB
램(메모리) 4 GB1 4 GB1 4 GB1 4 GB1
업로드 속도 0.092 Mbps - 0.244 Mbps
마이크 내장형 또는 독립형
웹캠 VGA 해상도 320x240 이상, 내장형 또는 독립형
1   메모리의 적어도 25%는 다른 응용 프로그램에서 사용되지 않는다고 가정할 때의 최소 용량입니다. 시험 도중에 시스템 크래시가 나는 일이 생기지 않도록 최소 용량의 50%를 확보해 두길 권장합니다.

통과 점수: 85%

  • 실습 1 (1.00 %)

  • 실습 2 (2.40 %)

  • 실습 3 (2.40 %)

  • 실습 4 (2.40 %)

  • 실습 5 (2.40 %)

  • 실습 6 (2.40 %)

  • 실습 7 (2.40 %)

  • 실습 8 (2.40 %)

  • 실습 9 (2.40 %)

  • 실습 10 (2.40 %)

  • 실습 11 (2.40 %)

  • 과제 1 (6.25 %)

  • 과제 2 (6.25 %)

  • 과제 3 (6.25 %)

  • 과제 4 (6.25 %)

  • 중간고사 (25.0%)

  • 기말고사 (25.0%)

학생 비율 점수
   열리는 날    닫히는 날
수강기간
2025-09-01 00:00:00 GMT
2025-12-14 23:59:59 GMT
수강신청기간
2025-08-18 00:00:00 GMT
2025-08-31 23:59:59 GMT

Great 프로그래머가 되려면 프로그램을 구성하는 가장 낮은 수준부터 가장 높은 수준까지 완벽하게 이해해야 합니다. 이를 통해 저수준과 고수준 사이의 어딘가에서 올바른 결정을 내려 미래에나 가능해 보이는 일을 지금 당장 이뤄낼 수 있으며, 그런 능력을 갖춘 사람이 바로 Great 프로그래머거든요. 하지만 시중에는 고수준 프로그래밍에 관한 강의가 넘쳐나는 반면, 저수준 프로그래밍에 대한 강의는 매우 부족한 상황입니다. 이를 해결하기 위해 POCU 아카데미가 차별화된 저수준 프로그래밍 강좌, 'COMP2300: 어셈블리 프로그래밍'을 선보입니다.

컴퓨터는 딱 한 가지 언어만 이해할 수 있습니다. 기계어, 즉 0과 1로 이루어진 이진수입니다. 마법처럼 보이는 어떤 언어와 도구를 사용하든 간에 그 도구가 하는 일은 결국 기계어를 만들어내는 것이며, 컴퓨터는 그 기계어를 해석해서 실행할 뿐입니다. 따라서 컴퓨터의 동작원리를 이해하기에 기계어를 공부하는 것만큼 좋은 방법이 없죠. 하지만 기계어는 사람이 쉽게 읽을 수 없습니다. 따라서 각 기계어 명령어마다 별칭을 단 언어인 어셈블리어를 그 대신 배우곤 합니다.

본 강좌는 간단히 CPU 구조를 살펴본 뒤, 크게 다음과 같은 순서에 따라 진행됩니다.

  1. 8 비트 어셈블리 프로그래밍 (+컴퓨터 제작)
  2. 16 비트 어셈블리 프로그래밍 (+운영체제 서비스)
  3. 32/64 비트 인라인 어셈블리 프로그래밍 (+SIMD)

'Part 1: 8 비트 어셈블리 프로그래밍'에서는 MOS 6502 CPU를 사용해 기초적인 8 비트 컴퓨터를 제작하고, 그 컴퓨터에서 동작하는 기계어 및 어셈블리어 코드를 작성합니다. 이 부분에서는 CPU의 구조와 동작원리를 이해하고, 어셈블리어를 활용해 하드웨어를 직접 제어하는 제어기기 프로그래밍 패턴을 배울 수 있습니다.

'Part 2: 16 비트 어셈블리 프로그래밍'에서는 현재 데스크톱 CPU 점유율 1위인 x86 계열 CPU의 시초인 Intel 8086/8088 CPU에서 x86-16 어셈블리어 코드를 작성합니다. 이 부분에서는 많은 프로그램에 공통적인 연산(예: 콘솔 출력)을 운영체제의 도움을 받아 처리하는 법을 배우며, 이는 시스템 프로그래밍 패턴을 익히는 좋은 계기가 될 것입니다.

'Part 3: 32/64비트 인라인 어셈블리 프로그래밍'에서는 고수준 언어인 C에서 성능에 중요한 일부 코드만 어셈블리어로 작성하는 인라인 어셈블리 프로그래밍 패턴에 대해 배워봅니다. 또한 한 번의 명령으로 다수의 데이터를 한 번에 처리하는 SIMD(Single Instruction Multiple Data)에 대한 지식도 함께 습득하게 됩니다.

이 과목의 목표는 어셈블리어를 화려하게 구사하는 것이 아닙니다. 이 과목을 성공적으로 끝마친 학생이 기대할 수 있는 효과는 다음과 같습니다.

  1. 프로그래밍의 근본적인 구조와 원리를 깊이 이해하며, 저수준 프로그래밍을 통해 고수준 프로그래밍의 효율성과 높은 수준의 성과를 이끌어 낼 수 있는 Great 프로그래머로 거듭날 것입니다.
  2. 기존에 알고 있던 프로그래밍 언어와 개념에 대한 이해가 더욱 깊어질 것입니다. 특히 어셈블리어를 배우는 것은 최적화된 코드를 작성하는 데 큰 도움이 되며, 높은 수준의 언어와 저수준의 언어 사이에서 발생하는 성능 상의 이슈를 파악하고 해결할 수 있는 능력을 기를 수 있습니다.
  3. 향후에 다양한 플랫폼과 환경에서 동작하는 프로그램을 개발하고 최적화할 때 중요한 역할을 하는 저수준 프로그래밍에 대한 실질적인 이해를 갖추게 될 것입니다. 이는 더욱 전문적이고 성공적인 프로그래머로 성장하는 데 필수적인 역량입니다.
  4. 이 과목에서 얻은 지식과 경험을 바탕으로 프로젝트를 구성하고 관리하는 데 있어 보다 합리적이고 전략적인 결정을 내릴 수 있게 될 것입니다. 이로 인해 프로젝트의 효율성과 성공률이 크게 향상되는 것은 물론, 속한 조직이나 개인적인 경력에서도 큰 도약을 이룰 것입니다.

POCU 아카데미의 독창적이고 철저한 커리큘럼을 통해 하드웨어의 본질을 깊이 이해하고, 기초 컴퓨터 구조 및 운영체제의 세계를 완벽하게 습득하세요. 지금 바로 POCU 아카데미의 어셈블리어 강좌를 통해 프로그래머로서 한 단계 더 도약할 수 있습니다. 저수준 프로그래밍의 흥미로운 세계로 함께 떠나 볼 준비가 되셨나요? 지금 바로 참여하세요!

수강 시작 날짜 : 2025-09-01 00:00:00 GMT

수업 내용
  • 과목 설명
  • 아날로그와 디지털
  • 트랜지스터, 논리 게이트, ALU
  • 튜링 기계
  • 폰 노이만 구조
  • 6502 컴퓨터 제작 시작
  • 브레드 보드, CPU, 클럭, PWM

동영상 강의 범위(총 4시간 26분): 훌륭한 프로그래머와 어셈블리어 ~ 클럭 속도 늦추기

과제 및 실습
  • 실습 1

  • 과제 1  (제출 마감: 2025-09-21 22:00:00 GMT)

수업 내용
  • 스파이더 연결
  • 리셋 벡터(reset vector)
  • 메모리 주소 매핑
  • ROM과 RAM 설치하기
  • 타이밍 다이어그램

동영상 강의 범위(총 2시간 14분): 스파이더 연결하기 ~ 정리

과제 및 실습
  • 실습 2

  • 과제 1  (제출 마감: 2025-09-21 22:00:00 GMT)

수업 내용
  • 헬로 월드
  • 6502 명령어의 구성
  • 기본 주소지정 모드
    • A 주소지정 모드
    • 즉시 주소지정 모드
    • 절대 주소지정 모드
    • zp 주소지정 모드
  • 6502의 레지스터
  • 묵시적 주소지정 모드와 nop

동영상 강의 범위(총 2시간 43분): 어셈블리어의 언어적 분류 ~ 정리

과제 및 실습
  • 실습 3

  • 과제 1  (제출 마감: 2025-09-21 22:00:00 GMT)

수업 내용
  • 산술 연산
  • 논리 연산
  • 비트 연산
  • 상태 플래그
  • 조건문
  • 색인 주소지정 모드
  • 상대 주소지정 모드

동영상 강의 범위(총 3시간 44분): 정수의 덧셈 ~ 정리

과제 및 실습
  • 실습 4

  • 과제 2  (제출 마감: 2025-10-12 22:00:00 GMT)

수업 내용
  • 반복문
  • 배열
  • 간접 참조(indirection)
  • 함수 호출과 회귀
  • zp를 이용한 인자 전달

동영상 강의 범위(총 2시간 15분): 반복문 ~ zp를 이용한 인자 전달

과제 및 실습
  • 실습 5

  • 과제 2  (제출 마감: 2025-10-12 22:00:00 GMT)

수업 내용
  • 스택을 이용한 인자 전달
  • 함수 반환값 전달
  • 함수 호출 오버헤드
  • 간접 주소지정 모드

동영상 강의 범위(총 2시간 13분): 스택을 통한 인자 전달 ~ 정리

과제 및 실습
  • 실습 6

  • 과제 2  (제출 마감: 2025-10-12 22:00:00 GMT)

수업 내용
  • 매크로
  • 주변기기 연결

동영상 강의 범위(총 1시간 2분): 코드 중복의 문제 ~ 정리

과제 및 실습
  • 과제 3  (제출 마감: 2025-11-09 22:00:00 GMT)

수업 내용
  • 수업 및 실습/과제 제출 없음 (이유: 중간고사 주간)
과제 및 실습
  • 과제 3  (제출 마감: 2025-11-09 22:00:00 GMT)

수업 내용
  • x86 아키텍처
  • MS-DOS의 부팅 순서
  • Hello x86
  • 8088의 레지스터와 데이터 형
  • 피연산자 종류
  • x86-16 니모닉

동영상 강의 범위(총 3시간 12분): x86 아키텍처 소개 ~ 정리

과제 및 실습
  • 실습 7

  • 과제 3  (제출 마감: 2025-11-09 22:00:00 GMT)

수업 내용
  • 콘솔 입출력
  • 문자열
  • cdecl 호출 규약
  • 구조체
  • 메모리 세그먼테이션

동영상 강의 범위(총 2시간 44분): 콘솔 출력 ~ 정리

과제 및 실습
  • 실습 8

  • 과제 3  (제출 마감: 2025-11-09 22:00:00 GMT)

수업 내용
  • 8087 FPU 프로그래밍

동영상 강의 범위(총 1시간 25분): 8086과 8087 ~ 정리

과제 및 실습
  • 실습 9

  • 과제 4  (제출 마감: 2025-11-30 22:00:00 GMT)

수업 내용
  • x86-32 아키텍처
  • 인라인 어셈블리
  • 호출 규약
  • SIMD 프로그래밍의 소개와 발전 역사

동영상 강의 범위(총 2시간 24분): CPU 성능의 비약적 발전 ~ 요즘 컴파일러와 SIMD 코드

과제 및 실습
  • 실습 10

  • 과제 4  (제출 마감: 2025-11-30 22:00:00 GMT)

수업 내용
  • SIMD 프로그래밍 개념
  • MMX
  • SSE
  • AVX

동영상 강의 범위(총 1시간 55분): MMX 소개 ~ 정리

과제 및 실습
  • 실습 11

  • 과제 4  (제출 마감: 2025-11-30 22:00:00 GMT)

수업 내용
  • x86-64
  • 컴파일러 내장 함수
  • 마이크로소프트 x64 호출 규약

동영상 강의 범위(총 43분): 64 비트 CPU 타임라인 ~ 에필로그

과제 및 실습
  • 없음

수업 내용
  • 수업 및 실습/과제 제출 없음 (이유: 기말고사 주간)
과제 및 실습
  • 없음

제목   공지일   제출 마감  
실습 1
2025-09-01 00:00:00 GMT (1주 차) 2025-09-07 22:00:00 GMT
실습 2
2025-09-08 00:00:00 GMT (2주 차) 2025-09-14 22:00:00 GMT
실습 3
2025-09-15 00:00:00 GMT (3주 차) 2025-09-21 22:00:00 GMT
실습 4
2025-09-22 00:00:00 GMT (4주 차) 2025-09-28 22:00:00 GMT
실습 5
2025-09-29 00:00:00 GMT (5주 차) 2025-10-05 22:00:00 GMT
실습 6
2025-10-06 00:00:00 GMT (6주 차) 2025-10-12 22:00:00 GMT
실습 7
2025-10-27 00:00:00 GMT (9주 차) 2025-11-02 22:00:00 GMT
실습 8
2025-11-03 00:00:00 GMT (10주 차) 2025-11-09 22:00:00 GMT
실습 9
2025-11-10 00:00:00 GMT (11주 차) 2025-11-16 22:00:00 GMT
실습 10
2025-11-17 00:00:00 GMT (12주 차) 2025-11-23 22:00:00 GMT
실습 11
2025-11-24 00:00:00 GMT (13주 차) 2025-11-30 22:00:00 GMT
과제 1
2025-09-01 00:00:00 GMT (1주 차) 2025-09-21 22:00:00 GMT
과제 2
2025-09-22 00:00:00 GMT (4주 차) 2025-10-12 22:00:00 GMT
과제 3
2025-10-13 00:00:00 GMT (7주 차) 2025-11-09 22:00:00 GMT
과제 4
2025-11-10 00:00:00 GMT (11주 차) 2025-11-30 22:00:00 GMT
2025-09-14 23:59:59 GMT 환불 신청 마감
  • 성적표에 기록되지 않음
  • 전액 환불 (처리 수수료 US$ 100 공제)
2025-11-02 23:59:59 GMT 수강 철회 신청 마감
  • 성적표에 "W"로 표시
수료하지 않은 선수과목에 대한 자가평가 질문
  1. COMP2200: 나는 포인터를 확실히 이해하고 사용할 수 있다.
  2. COMP2200: 나는 어떤 참고자료도 없이 C 표준 라이브러리의 문자열 함수를 직접 다 구현할 수 있다.
시험 응시 준비물
  1. 반드시 PC에서(모바일은 응시 불가) 크롬(Chrome) 브라우저를 사용해야 합니다.

  2. 시험을 볼 때 시험 감독 서비스를 사용하며, 서비스를 이용하기 위한 시스템 최소 사양은 다음과 같습니다.

윈도우 리눅스 크롬 운영체제
운영체제 윈도우 7+ 맥 OSX 10.9+ 우분투 18.04+ 크롬 58+
프로세서 인텔 펜티엄 이상 인텔 또는 ARM 인텔 펜티엄 이상 인텔 또는 ARM
사용 가능한 디스크 공간 250 MB 250 MB 250 MB 250 MB
램(메모리) 4 GB1 4 GB1 4 GB1 4 GB1
업로드 속도 0.092 Mbps - 0.244 Mbps
마이크 내장형 또는 독립형
웹캠 VGA 해상도 320x240 이상, 내장형 또는 독립형
1   메모리의 적어도 25%는 다른 응용 프로그램에서 사용되지 않는다고 가정할 때의 최소 용량입니다. 시험 도중에 시스템 크래시가 나는 일이 생기지 않도록 최소 용량의 50%를 확보해 두길 권장합니다.

통과 점수: 85%

  • 실습 1 (1.00 %)

  • 실습 2 (2.40 %)

  • 실습 3 (2.40 %)

  • 실습 4 (2.40 %)

  • 실습 5 (2.40 %)

  • 실습 6 (2.40 %)

  • 실습 7 (2.40 %)

  • 실습 8 (2.40 %)

  • 실습 9 (2.40 %)

  • 실습 10 (2.40 %)

  • 실습 11 (2.40 %)

  • 과제 1 (6.25 %)

  • 과제 2 (6.25 %)

  • 과제 3 (6.25 %)

  • 과제 4 (6.25 %)

  • 중간고사 (25.0%)

  • 기말고사 (25.0%)

학생 비율 점수