전공 62

[시스템 프로그래밍 6 -1] 어셈블리어 더하기 빼기 연산과 그에 따른 flag 세팅

더하기 빼기 (Addition and Subtraction)1. INC and DEC InstructionsINC (increment) instruction adds 1 to operandDEC (decrement) instruction subtracts 1 from operandoperand로 memory 또는 register사용 가능.data myWord WORD 1000h .code inc myWord ;myWord = 1001h (메모리 값 감소) mov bx,myWord dec bx ;BX = 1000h (bx레지스터 감소)연산을 통해서 flag가 세팅이 된다.Overflow, Zero, Sign, Auxiliary Carry, and Parity flags 들은 피연산자의 값에 따라 변화된다...

[시스템 프로그래밍 5-3] 데이터 전송지침 , 피연산자 유형(Operand Types)

데이터 Transfer Instruction (데이터 전송 지침)소개예를 들어 메모리에서 레지스터로 옮기는 예시고수준 언어에서는 컴파일러가 엄격한 데이터 타입 검사를 수행한다.변수 및 데이터 불일치와 같은 오류를 방지하는 데 도움이 된다.사실 기계 (CPU의 관점) 에서는 데이터의 타입은 의미가 없다.(다 같은 2진수이기 때문에) 따라서 CPU 관점에서는 타입은 생각하지 않고 size만이 중요하다.반면 어셈블러를 사용하면 프로세서 명령어 집합이 요청하는 작업을 수행할 수 있는 한 원하는 모든 작업을 수행 할 수 있다. ( 예 : float 형에 int 형으로 연산을 할 수도 있다. - 가능하지만 엉뚱한 결과가 발생)어셈블리 언어는 데이터 저장 및 머신별 세부 사항에 주의를 기울여야 한다.(프로그래머의 역..

[디지털 논리 4강] 논리 게이트, 트렌지스터 전압 파형 및 타이밍 다이어그램

연산자거의 모든 프로그래밍 언어(예: C/C++, Java, Python)는 비트 연산과 논리 연산을 지원합니다비트 연산자 & (비트 AND), | (비트 OR), ^ (비트 XOR), ~ (비트 NOT), ... 예: a = 5 & 7; // a = 5 논리 연산자(부울 연산자라고도 함) &&(논리 AND), ||(논리 OR), !(논리 NOT) 참고) 파이썬에서는 (논리적 NOT)이 아닌 (논리적 AND) 또는 (논리적 OR)을 사용합니다. 예: a = 5 && 7; // a = 1 예: is_valid_idx = (idx >= 0) && (idx < array_size);이상적인 로직 게이트 NOT gate, AND gate, OR gate1. NOT gate논리적 부정을 구현하는 논리적 게이트표기..

[시스템 프로그래밍 5-2] 어셈블리어 기호상수 Symbolic Constants

Symbolic Constants (기호 상수)C나 C++을 쓴 사람들은 #define PI 3.14 와 같이 해본 걸 볼 수가 있을텐데, 이것은 우리는 Symbolic Constants라고 불렀다. (전처리 과정을 거쳤다.) 즉 기호상수는 indentifier(Symbol)을 정수 표현식 또는 일부 텍스트와 연결하여 생성된다.별도의 저장공간을 예약하지 않는다.프로그램을 스캔할 때 어셈블러만 사용한다.런타임중에 변경할 수 없다.1. 동일 서명 지시문 (Equal-Sign Directive)심볼 이름이 정수 표현식에 연결된다.사용 : name = expression일반적으로 표현식은 32비트이 정수값이다.프로그램이 어셈블 될 때 전처리 단계에서 모든 이름 항복이 표현식으로 대체된다.이건 마이크로 소프트의 ..

[시스템 프로그래밍 5-1] 어셈블리 기본 데이터 타입

어셈블리어에서 데이터를 정의하는 방법기본 데이터 타입기본적으로 사이즈를 정의하는 형태이다.실제로 크기가 같아도 다른 용도로 쓰기위해서 각자 용도를 고려해서 자료형을 정의하지만 어셈블리어에서는 오로지 크기의 관점으로만 데이터 타입이 주어진다.C 언어를 예로 들면 float 과 int는 모두 4바이트 또는 int 와 unsigned int 예시즉 어셈블러는 피연산자의 크기만 평가한다.WORD는 16 비트 unsigned int SWORD 16 bit signed intDWORD (DOUBLE WORD) : 32bit unsigned int즉 크기만 같다면 뭘 쓰던지 동작에 전혀 상관은 없다.이런식으로 분류가 되어있긴 하지만 실제 CPU의 관점에서는 사이즈만을 생각하기 때문에 DWORD로 데이터를 만들던 SD..

[시스템 프로그래밍 4강] 어셈블리 언어 문법 및 구성요소

예제1. 숫자 2개를 더하는 프로그램main PROC ; main 프로그램의 시작점 mov eax,5 ; cpu안에 있는 eax 레지스터 안에 숫자 5 배치 add eax ,6 ; 숫자 6과 eax를 더해서 11이라는 새로운 값 젝ㅇ INVOKE ExitProcess ,0 ; INVOKE 는 함수호출의 개념. ;운영체제에서 제공(윈도우 서비스)하는 함수인데, 프로그램 종료할 때 필요. ;인자로 0을 줬다는 의미이다. main ENDP ;주 절차의 종료 마커이다.숫자 5와 6을 더해서 eax에 저장하는 프로그램2. 변수 저장하기.data ; data segment 라는 의미 sum DWORD 0 ; sum이라는 변수에 0이 들어갔다. 4바이트 공간을 sum이라 부르고 0이 들어감 ;sum은 주소 즉 오프셋..

[디지털 논리 3강] 문자 인코딩 방식(ASCII,Unicode,BCD 바이너리 인코딩,Gray Code,Parity Bit)

숫자 표현은 부동소수점과 sign비트등을 이용해서 공부하였다. 이번강에서는 문자 인코딩에 대해서 다뤄보겠다. 문자의 인코딩은 숫자를 문자로 일대일로 맵핑한다. 문자 인코딩 ASCII Code : 아주 오래된 미국의 표준이다. 아스키코드는 7비트 인코딩이다!! (시험문제 ox문제) 8비트 아니다! 33개의 컨트롤 문자와, 95개의 읽을 수 있는 문자를 가지고 있다. 컨트롤 문자들은 몇개를 제외하고는 거의 사용되고 있지 않다.(역사적 이유때문에 남아있다.) 아스키코드는 다른 문자 인코딩의 기본이다. (UTF-8은 아스키를 능가하지만 아스키 기반임) 사진을 보면 undefine가 있는데 이건 국가마다 다르다고 한다. Extended ASCII Code(확장 아스키) 8비트만 사용 (1바이트) - 부호비트 삭제..

[시스템 프로그래밍 3-6] 입출력 시스템

입출력 시스템 입출력을 위해서 현대적인 컴퓨터 시스템에서는 우리는 하드웨어에 직접적으로 접근할 필요는 없다. 입출력을 통제하는 시스템 즉 os가 제공하는 fuction 들을 사용함으로써 i/o들이 일어나는 것이 일반적이다 i/o 는 서로 다른 입출력 레벨을 가지고 있다. 하드웨어에 직접 액세스하여 I/O를 수행할 필요는 없습니다. 대신 OS에서 제공하는 함수를 호출할 수 있습니다. 3가지의 입출력 레벨 1. High-level language functions c/c++/java등 언어를 말하는 것인데 여기서 사용하는 input output을 위한 함수들을 사용을 한다.(ex : printf) 이렇게 언어에서 제공하는 함수를 활용해서 입출력을 할 수가 있다. 이런 함수들을 사용하면 대부분 이식성이 높다...

[시스템 프로그래밍 3-5] 전형적인 X86 컴퓨터의 구성요소(마더보드, 메모리)

1. Motherboard 마이크로 컴퓨터의 심장이라고 봐도 된다. 이 마더보드(메인보드)에 컴퓨터의 모든 부품들을 연결해서 쓰는데 그런 부품들을 연결해주는 역활을 한다고 봐도 된다. 다양한 컴포넌트들이 버스라는 이름으로 연결되어있다. A CPU socket : cpu에 있는 핀들을 꽂을 수 있는 구멍들있는 판 같은 느낌, 소켓에서 지원하는 프로세서 유형에 따라서 모양과 크기가 다르다. Memory slots : 메모리를 꽂는 용도 BIOS (basic input–output system) computer chips(기본 입출력 시스템) : 아주 기본적인 시스템 소프트웨어가 들어가있는 칩, 즉 홀드시스템 소프트웨어. CMOS RAM : 바이오스가 실행될 때 저장이 되는 기본적인것들 예를 들어 부팅순서라던..

[시스템 프로그래밍 3- 4] 64-Bit x86-64 Processors

64-Bit x86-64 Processors 이렇게 네이밍을 했지만, 사실 x86 프로세스를 32비트로 확장한 것이다. 만든 곳은 amd라서 x86을 만든 곳은 인텔이지만 amd가 만들어서 이름이 amd64라고 불린다. Intel 64 and AMD64 processor (x64) 패밀리 라는 이름으로 불린다. 사실상 amd 64 또는 x86-64 , x64 등으로 불린다. 이 녀석은 32비트를 64비트로 확장한 것을 의미한다. 특징 Backward-compatible: 기존의 명령어와 32비트 x86에서 동작하던 명령어들이 모두 그대로 x86-64에서도 동작을 한다. 우리 수업에서는 컴퓨터에서는 32비트를 기준으로 공부를 할 꺼긴 해요 그러니까 딸딸 외우진 마세용 레지스터가 64비트이다. 그 이야기는 ..

728x90