쾌락없는 책임 (공부)/시스템프로그래밍
-
시스템프로그래밍 08 - 어셈블리어에서 비트 연산쾌락없는 책임 (공부)/시스템프로그래밍 2021. 6. 1. 22:52
본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고 이해한 것들을 정리한 포스트입니다. - 강의자료는 올리지 않습니다 Shift and Rotate Instruction shift / rotate는 2진수의 비트를 이용한 연산으로 아래 표를 보면 이해가 잘 됩니다. 1 0 1 0 왼쪽으로 쉬프트 0 1 0 0 1 0 1 0 왼쪽으로 로테이트 0 1 0 1 위 표에서 나오는 연산이 기본적인 쉬프트와 로테이트고 이런 비트 단위의 연산들은 곱셈이나 나눗셈 등의 연산에 비해서 비용이 상당히 적은 편이라 비트 연산을 할 수 있을땐 비트를 이용하는게 좋습니다. 어셈블리어에서 쉬프트와 로테이트는 위 표의 연산을 기본으로 가져가지만 실제로는 살짝 다르게 작동을 합니다. - logical shift : 특정 방..
-
시스템프로그래밍 07 - Conditonal Processing(2)쾌락없는 책임 (공부)/시스템프로그래밍 2021. 5. 30. 21:59
본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고 이해한 것들을 정리한 포스트입니다. - 강의자료는 올리지 않습니다 시스템프로그래밍 06 - Conditional Processing (1) 본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고 이해한 것들을 정리한 포스트입니다. - 강의자료는 올리지 않습니다 Boolean / Comparision Instructions 상위 언어에 있는 불리언 연산과 husk321.tistory.com 이전 포스트에 이어서 나오는 내용들입니다. 위 and 등의 각종 연산들을 통해서 상위 언어에 있는 if, switch 등을 구현하는것이 이번 포스팅의 목표입니다. J로 시작하는 명령어들 (Jcond Instruction) 1. 플래그 레지스터에 따라서 J..
-
시스템프로그래밍 06 - Conditional Processing (1)쾌락없는 책임 (공부)/시스템프로그래밍 2021. 5. 30. 21:01
본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고 이해한 것들을 정리한 포스트입니다. - 강의자료는 올리지 않습니다 Boolean / Comparision Instructions 상위 언어에 있는 불리언 연산과 비교 연산을 하는 일입니다. 어셈블리어는 기계어 기반이다 보니 2진수의 bit 연산을 하게 되며 각종 연산들이 플래그 레지스터에 영향을 줘 이후 나오는 비교나 루프 등에 유용하게 사용됩니다. AND destination, source 역시나 destination에는 상수가 올 수 없으며 그 외에는 reg, mem, imm 등이 올 수 있습니다. 단 mem, mem 연산은 제공하지 않으며 두 operand간 크기가 같아야 합니다. 연산 결과를 통해서 destination와 source와 ..
-
시스템프로그래밍 05 - 조금 더 상위 연산들쾌락없는 책임 (공부)/시스템프로그래밍 2021. 5. 30. 20:14
본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고 이해한 것들을 정리한 포스트입니다. - 강의자료는 올리지 않습니다 서론 지금까지 배운 내용들을 본다면 단순한 값 대입같은 이야기들이라 상위 프로그래밍 언어로 되어 있는 것들이 어떻게 어셈블리어에서 동작하는지 알 수가 없습니다. 이번 포스팅부터는 루프문을 비롯한 조금 더 상위 개념들을 배운 뒤 정리한 내용들입니다. JUMP와 LOOP C언어에도 있는 내용으로 C의 점프와 루프와 하는 일이 같습니다. 대신 C에서는 다른 변수나 포인터 등을 통해서 이루어졌지만 어셈블리어에서는 다른 것들을 기준으로 해서 작동하게 됩니다. 1. JMP JMP destination destination에는 레이블 이름이 올 수 있으며 해당 레이블로 점프를 하게 됩니다. ..
-
시스템프로그래밍 04 - 어셈블리어 조금 더 맛뵈기02쾌락없는 책임 (공부)/시스템프로그래밍 2021. 4. 19. 20:14
본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고 이해한 것들을 정리한 포스트입니다. - 강의자료는 올리지 않습니다 이것들이 하는 역할은 메모리에서 레지스터로 데이터를 이동하는게 주요 역할이며 형식은 아래와 같습니다. (라벨) Nemonic (Operands - 최대 3개까지 가능) Operands는 아는대로 피연산자이며 최대 3개까지 가능, 맨 처음 들어온 Operands가 목적지가 됩니다. Direct Memory Operands 흔히 볼 수 있는 변수의 형태라고 할 수 있습니다. CPU의 입장에서는 어차피 변수명을 offset, 기계어로 번역된 주소로 인식하게 됩니다. + [] 으로 감쌀 수 있습니다. (in MASM) MOV mov destination, source source에 있는..
-
시스템프로그래밍 03 - 어셈블리어 조금 더 맛뵈기01쾌락없는 책임 (공부)/시스템프로그래밍 2021. 4. 19. 13:58
본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고 이해한 것들을 정리한 포스트입니다. - 강의자료는 올리지 않습니다 어셈블리어에서 데이터는 다른 언어와는 다르게 '크기'만 중요합니다. 음수도 two's complement로 되어있고 CPU는 애초에 기계어만 알아들으니 크기를 이용해 offset값 등을 알아내는게 중요합니다. (변수명) Directives 초기화 (, 초기화) ; Directives는 WORD같은 크기들 위 문법을 예시로 하나 만들어보면 A DWORD 0 같은 식으로 만들 수 있다. (, 초기화)는 한번에 여러번 선언이 가능하다는 이야기인데 이 구조가 굉장히 특이하다 변수명 값 메모리 주소 arr 10 0000 20 0001 30 0002 arr BYTE 10, 20, 30 과 ..
-
시스템프로그래밍 02 - 어셈블리어 들어가기쾌락없는 책임 (공부)/시스템프로그래밍 2021. 4. 18. 20:08
본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고 이해한 것들을 정리한 포스트입니다. - 강의자료는 올리지 않습니다 컴퓨터에서 입출력은 4단계(교수님은 3단계라 하셨는데 0~3이라 3단계인것 같습니다)를 가지고 있으며 각 레벨은 아래와 같습니다. 고수준 언어의 레벨 C, C++ 또는 그 이상 수준의 언어로 작성된 함수로 입출력을 제어하는 것. OS나 시스템에 의존적이지 않고 범용성이 아주 뛰어납니다. 대신 그만큼 하드웨어 제어권이 떨어지게 됩니다. 운영체제 레벨 운영체제의 라이브러리를 이용하는 것으로 키보드 문자열 입력 등등의 작업이 해당됩니다. BIOS 레벨 운영체제는 BIOS와 소통을 하는데 BIOS 레벨에서 작성된 입출력 제어는 하드웨어에 직접 접근이 가능합니다. 대신 같은 BIOS에서만..
-
시스템 프로그래밍 01 - 사실상 어셈블리어 공부쾌락없는 책임 (공부)/시스템프로그래밍 2021. 4. 18. 17:33
본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고 이해한 것들을 정리한 포스트입니다. - 강의자료는 올리지 않습니다 32비트의 경우 8개의 범용 레지스터(32bit), 6개의 세그먼트 레지스터(16bit), Flag 레지스터, EIP를 가지고 있습니다. 범용 레지스터 8개의 범용 레지스터는 32비트 x86 프로세서에서는 32bit의 용량을 가지고 있으며 이 안에 들어가 있는 데이터들은 각종 산술 연산에서 '피연산자'가 되어줍니다. 이전 16비트에서는 이런 역할을 하는 레지스터들이 16bit의 용량을 가지고 있었으며 이의 영향으로 16비트 버전 프로그램들의 하위호환을 위해서 32비트의 레지스터들은 16비트, 8비트로 나뉠 수 있습니다. 이런 식으로 레지스터를 나누어서 이전 버전의 프로그램들도 작..