IT/C_C++_Assembly2011. 12. 20. 18:10

  

이번글에서는 레지스터의 종류와 스택에 대해서 알아보도록 하겠습니다.

레지스터는 CPU내부의 대표적인 저장장치입니다. 레지스터는 CPU의 설계에 따라,또는 사용하는 용도와 목적에 따라 종류가 다양합니다. 이외에 스택이라는 저장장치가 있는데 일반적인 저장장치와 다르게 주소를 지정하는 방법과 읽고 쓰는 방법이 간단하다는 특징이 있습니다.

 
[표] 레지스터의 이름과 종류 

  

약 어

 

Accumulator(어큐뮬레이터)

Base Register(베이스 레지스터)

Count Register(카운트 레지스터)

Data Register(데이터 레지스터)

Base Pointer(베이스 포인터)

Instruction Pointer(인스트럭션 포인터)

Stack Pointer(스택 포인터)

Destination index

Source Index(소스 인덱스)

Data Segment Register(데이터 세그먼트 레지스터)

Extra Segment Register(엑스트라 세그먼트 레지스터)

Stack Segment Register(스택 세그먼트 레지스터)

Code Segment Register(코드 세그먼트 레지스터)

Flags Register(플래그 레지스터)

EAX

EBX

ECX

EDX

EBP

EIP

ESP

EDI

ESI

DS

ES

SS

CS

none

범용 레지스터

범용 레지스터

범용 레지스터

범용 레지스터

오프셋 레지스터

오프셋 레지스터

오프셋 레지스터

오프셋 레지스터

오프셋 레지스터

세그먼트 레지스터

세그먼트 레지스터

세그먼트 레지스터

세그먼트 레지스터

none

 

. EAX연산 결과를 저장하는 용도로 사용될 뿐만 아니라 데이터의 이동과 데이터의 일시적 저장 등 범용 레지스터의 기능을 담당.

. EBX데이터의 이동, 일시적 저장 등 범용 레지스터의 기능을 갖는다. 또한 간접 번지 지정에 사용. 베이스를 지정해 주는 레지스터

. ECX데이터의 이동, 일시적 저장 등 범용 레지스터의 기능을 갖는다. 반복적인 데이터의 연산, 논리 명령 등에 많이 사용.

. EDX데이터의 이동, 일시적 저장 등 범용 레지스터의 기능을 갖는다. 곱셈과 나눗셈에서 AX 레지스터의 범위를 초과할 경우에 많이 사용.

. ESI소스 색인을 위한 레지스터.

. EDI – ES(엑스트라 세그먼트 레지스터)와 조합을 이루어 사용되고 그 외에 연산에도 활용이 가능합니다. EDI역시 ESI와 같이 간접 주소 지정 방식에 많이 사용.

. EIP명령 포인터(Instruction Pointer)의 약자로서, 이 레지스터는 실행할 다음 명령의 번지를 가르키는데 사용됩니다.

. EBP레지스터는 스택에서 데이터를 다루기 위해 사용되는 레지스터. EBP레지스터는 스택 내에서 상대 주소 값(변위 또는 오프셋)을 저장하는데 많이 사용됩니다.

. ESP – SP(Stack Pointer) 스택 내의 포인터를 설정하기 위한 레지스터.

. 플래그 레지스터 플래그란 컴퓨터에서의 연산결과에 대한 정보를 얻기 위해서 마련한 표시판입니다. 플래그 레지스터에는 처리 결과(상태)에 대한 16가지 정보를 표시하는 비트가 있습니다. 즉 플래그 레지스터는 2바이트의 레지스터로 각 비트는 해당 연산 결과에 대한 정보 또는 상태를 보여줍니다.

 

그리고 스택에 대해 알아볼까요?

스택(Stack) CPU내부의 레지스터 집합에 존재하는 저장장치입니다. 레지스터와는 다른 특징이 있습니다. 우선 데이터가 순차적으로 저장되며, 요소의 개수와 스택의 길이는 가변적입니다. 그리고 한번에 하나의 요소에만 액세스가 가능합니다. 결과적으로 데이터 접근 방법은 나중 입력 먼저 출력(LIFO)의 특징을 갖습니다.

 

PUSH & POP

스택의 동작에서 데이터가 입력되고 출력되는 부분을 스택의 TOP이라고 합니다.

PUSH : 스택의 TOP에 새로운 요소를 추가 저장하는 동작을 PUSH라고 합니다.

POP  : 스택의 TOP에서 하나의 요소를 꺼내는 동작을 POP이라고 합니다.

Posted by 예영교육 연구소
IT/C_C++_Assembly2011. 12. 20. 14:59

이 글을 쓰는 이유는 어셈블러를 학습하기 전에 컴퓨터에 대한 기본적인 지식을 쌓기 위함입니다.

짧은 글로서 방대한 내용을 다 표현하기 보다 어셈블러를 학습하기 위한 기초적인 이해를 쌓는 것이 저의 가장 큰 목표입니다.

이 글에서 다룰 내용은 다음과 같습니다.

가.   컴퓨터 구조에 대해 이해합니다.

나.   CPU에 대해서 기본적인 이해를 합니다.

 


함께 그럼 가 보겠습니다.

컴퓨터는 무엇으로 구성되어 있을까요?



다음과 같이 하드웨어 + 소프트웨어로 구성되어 있습니다.

그럼 하드웨어의 소프트웨어는 이해는 가시지만 하드웨어에 대해서 간단하게 설명하고 넘어가겠습니다.

 

중앙처리장치(CPU) : 컴퓨터 시스템 전체를 제어하는 장치로서 입력장치에서 입력받은 데이터를 처리한 후 출력장치와 기억장치로 보내는 과정을 수행합니다.

기억장치 : 필요한 데이터를 저장하기 위해 기억장치를 이용합니다. 주기억장치로는 현재 RAM를 이용합니다. 보조기억장치로는 하드디스크, 플로피 디스크, CD-ROM등을 이용합니다.

입출력장치 : 컴퓨터에서 처리할 데이터를 외부에서 입력 받을 수 있게 해 줍니다.(입력장치), 컴퓨터 내부에서 처리된 데이터를 사용자가 보거나 할 수 있도록 출력매체를 이용해서 보냅니다. 마우스, 키보드, 스캐너, 모니터, 스피커 등이 여기에 해당됩니다.

 

자 그럼 여기까지는 문제없이 이해하셨죠.

 

자 그럼 이제 핵심이 되는 CPU에 대한 기초 지식을 쌓아보겠습니다.

CPU종류 : 속도를 더 높이기 위해 하나의 기판에 CPU 1(싱글), 듀얼(2), 쿼드(4)를 구현하고 있습니다. 최근에는 8개가지 하나의 기판 위에 구현하여 속도를 높이고 있습니다.(참고로 쿼드는 인텔과 AMD가 차이가 있습니다. 그리고 AMD에는 CPU 3,6,8개를 구현한 제품도 있습니다.)

쉽게 설명하면 일을 할 때 사람을 한 명을 둔 것을 2,3,…, 여러명으로 늘린 것으로 생각하면 되겠네요. 그만큼 속도는 빨리지겠죠.

 

컴퓨터 구조를 이해하기 쉽게 여러 권을 참고해서 그림을 그려보았습니다. 혹시 잘못된 부분이 있다면 과감한 지적을 부탁드리며 참고해 주세요.


CPU 내부에는 ALU(산술 논리연산장치), 제어장치, 레지스터로 구성됩니다. 그리고 CPU와 주기억장치(RAM), 기타 I/O장치는 Bus라 불리는 것에 의해 연결됩니다. 더 자세히 들어가면 좀 복잡해 질 듯 해서 여기까지 마무리짓겠습니다.

우리가 여기서 어셈블리어를 통해 다룰 부분은 CPU의 레지스터를 많이 다룰 것 같습니다. 이런 형식으로 컴퓨터가 되어 있다고 이해가 되면 다음 단계로 넘어가기가 수월해 지리라 믿습니다. 저는 처음에 어떻게 되는 건지 하나도 모르겠더라구요. 그래서 나름 학습하며 정리해 봅니다.

Posted by 예영교육 연구소
IT/information2011. 12. 20. 13:48
온라인 진단 서비스를 이용하면 20~30가지의 유명 백신을 이용하여 바이러스 진단이 가능합니다.
최근에는 하나의 백신만으로 잡을 수 없는 바이러스가 등장하기 때문에 의심이 가는 파일은 아래의 온라인 사이트를 이용해서 체크해 보는 것도 좋은 방법 중의 하나일 것입니다.

온라인 바이러스 진단 사이트는 다음과 같습니다.
VirSCAN.org(http://www.virscan.org)

Virustotal(http://www.virustotal.com)
Jotti's malware scan(http://virusscan.jotti.org) 


간단한 사용방법(VirScan.org 기준,36개의 백신이 있네요.)
가. [파일선택] 버튼을 클릭합니다. 의심이 가는 파일을 선택한 후 [열기]버튼 클릭합니다.
나. 옆에 있는 [업로드] 합니다.
다. 업로드가 끝나면 파일을 체크합니다.
라. 바이러스 발견되면 빨간색으로 기록이 뜹니다.

 

[그림] 초기화면

[그림] 바이러스 체크후 결과

Posted by 예영교육 연구소