Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

학부생 CS/컴퓨터 시스템 설계

Computer System Design - 2 : arm & simple instruction

sm_amoled 2019. 3. 14. 12:49

assembly를 배우면서 하드웨어의 작동에 대해 배우는 이유?

하드웨어 ( CPU, Memory, I/O ) 위에서  OS가 작동하고, 이 OS 위에서 프로그램이 동작한다. C, JAVA 등의 고급언어로 작성된 프로그램들은 컴파일러에 의해 binary파일이나 execute파일로 번역되어 OS/HW에 전달되기 때문에 작동방식이나 과정에 대해서는 개발자가 알지 못해도 프로그램을 동작시키는데 아무런 무리가 없다. 그러나, Assembly같은 기계어는 HW를 직접 건드리는 명령어를 사용하기 때문에, CPU, Memeory등이 어떻게 동작하는지에 대한 방식과 사용 방법을 알고 있어야 한다.


Carry Flag & Overflow Flag

Unsigned a = 5, b = 3 이라 할 때, if ( a > b ) 의 조건 state는 a - b 의 값이 +/-인지로 검사한다. 


a - b = a + ( -b ) = a + ( 2’s complement of b )

계산한 result에서 carry out이 1이면 a > b, 0이면 a < b 이다.

b를 2’s complement로 만들어주어 ADDER가 SUBTRACTOR의 역할까지 수행하기 위해 MUXs를 이용한다. ( + 이면 그대로, - 이면 1’s complement로 만들고, Carry in을 1을 넣어준다 ) 


ARM Instructions

ARM은 32bit의 instruction들을 수행하는 RISC machine이다.

대부분의 Instruction들은 조건에 따라 수행될 수 있다. ( ex - addeg r1, r2, r3 -> CPU에서 eg에 대한 조건 체크 후 실행 ) 

NZCV Flag가 해당 조건문의 state로 들어가게된다  ( 4bit 조건 - 15가지 condition ( ex) 1100 -> True ))

Instruction은 크게 Arithmetic, Logic / Memory Access / Branch 등으로 구분할 수  있다.


Arithmetic Instruction - ADD

ADD r0, r1, r2 [ r1 + r2 의 값을 r0에 대입 ]

Register에서 r0은 Rd에, r1은 Rn, r2는 R3 ( shifter operand ) 에 저장된다.


ADD r0, r1, r2, LSL #1 [ r1 + r2 << 1 의 값을 r0에 대입 ]


ADDS - Register의 S값이 1이면 ( ADDS instruction을 쓰면 ) 명령 수행 후 CPSR의 NZCV Flag들을 초기화시킨다.


Arithmetic Instruction - SUB

SUB r0, r1, r2 [ r1 - r2 의 값을 r0에 대입 ]

Register에서 r0은 Rd에, r1은 Rn, r2는 R3 ( shifter operand ) 에 저장된다.


SUB r0, r1, r2, LSL #1 [ r1 - r2 << 1 의 값을 r0에 대입 ]


RSB r0, r1, #0 [ Reverse Sub, 거꾸로, 0에서 r1값을 뺀 값을 r0에 대입 ]






// 이 시리즈의 글들은 고려대학교의 Computer System Design 과목 ( COSE321 ) 을 수강하며 제가 공부한 내용입니다.

// 노트필기를 바탕으로 정리하여 올리고 있으므로, 부정확한 정보가 있을 수도 있습니다.

// 추후에 종강을 하면 워터마크를 삽입한 최종노트 PDF를 첨부할 계획입니다.


320x100