컴퓨터구조 - CPU(중앙처리장치)
CPU 란?
컴퓨터 시스템 전체를 제어하는 장치입니다.
산술 , 논리 연산 장치와 제어 장치, 레지스터로 구성되어 있어
컴퓨터의 모든 행동과 제어,연산은 CPU에서 도맡아 하죠.
* 산술 . 논리 연산장치(ALU)
└ 사칙연산을 수행하는 산술연산과 참과 거짓을 판별하는 논리연산을 수행.
* 제어 장치
CPU 내부에서 일어나는 모든 작업을 통제하고 관리
적절한 순서로 명령을 꺼내고 명령을 해석하여 그 해석에 따라
컴퓨터 시스템의 적절한 부분으로 제어 신호를 전달합니다.
* 레지스터
CPU에서 사용하고 내장되있는 기억(저장)장치입니다.
이로써 컴퓨터 내부의 기억장치를 모두 소개 했습니다.
모든 기억장치의 비교
속도 종류 저장공간
High [레지스터(Register)] Low
↑ [캐시기억장치] ↓
↑ [주기억장치] ↓
Low [보조기억장치] High
'컴퓨터구조/정보기초' 카테고리의 다른 글
정보기초 - 데이터 표현방법(2) (0) | 2013.08.31 |
---|---|
정보기초 - 데이터 표현방법(1) (0) | 2013.08.28 |
컴퓨터구조 - 기억장치의 종류 (0) | 2013.08.25 |
컴퓨터구조 - 하드웨어 5대 장치 (0) | 2013.08.25 |
컴퓨터구조 - 하드/소프트웨어 (0) | 2013.08.25 |
어셈블리어 - CALL,CMP,JMP 함수
CALL! CMP!
이함수들은 잘 쓰면 정말 재밌는 함수입니다 ㅋㅋㅋ
그리고 어셈블리어를 쓰면서 자주 등장하는 요주의 인물들(?)입니다.
CALL
예제 : CALL 인자1(주소)
CALL 명령어는 인자를 하나만 받습니다.
CALL의 뜻인 '부르다'처럼 인자1를 불러 오는 명령어입니다.
예제
( 00402000 - ADD EAX,100 )
00401000 - CALL 00401000
00402000 주소엔 add 함수가 있고 00401000 주소엔 call 함수가 있습니다.
00401000 주소의 call 문을 실행할 경우 00402000 주소까지 갈 필요없이
00401000 주소를 call문으로 불러 냈으니 그위치의 함수를 실행하게 됩니다.
대충 C언어의 goto문과 비슷한 원리입니다.
CMP
예제 : CMP 인자1,인자2
인자 2개를 비교하는 역활을 합니다.
예제
CMP EAX,200
EAX 안에 들어있는 값이랑 200 이랑 비교를 합니다.
근데 여기서 비교만 하면 아무 의미가 없습니다.
비교 한 후 조건이 따라야하는데 그 조건으로 JMP 명령어가 항상 따라옵니다.
CMP 함수가 나올땐 JMP 함수는 항상 붙어있다 생각하시면 됩니다.
JMP 함수는 특정 지역으로 이동(점프)을 하는것입니다.
예제
CMP EAX,EDX
JE 00401000
(JE = 결과가 같을경우 점프 아닐경우 점프를 수행하지않음)
EAX의 값과 EDX의 값을 비교합니다. 그다음 JMP 함수 중 하나인
JE가 비교한 결과를 보고 점프 수행을 할지 안할지 판단 후 시행하게 되는겁니다.
JMP 함수의 종류
명령어 의미 부등호 플래그 조건 JA jump if (unsigned) above > CF = 0 and ZF = 0 JAE jump if (unsigned) above or eual >= CF = 0 or ZF = 1 JB jump if (unsigned) below < CF = 1 JBE jump if (unsigned) below or equal <= CF = 1 or ZF = 1 JC jump if carry flag set CF = 1 JCXZ jump if CX is 0 CX = 0 JE jump if equal == ZF = 1 JECXZ jump if ECX is 0 ECX = 0 JG jump if (signed) greater > ZF = 0 and SF == OF JZ jump if zero == ZF = 1
감사합니당
'어셈블리어' 카테고리의 다른 글
어셈블리어 - PUSH,POP 함수 (1) | 2013.08.27 |
---|---|
어셈블리어 - INC,DEC,NOP (3) | 2013.08.27 |
어셈블리어 - ADD,SUB 함수 (1) | 2013.08.27 |
어셈블리어 - MOV,LEA 명령어 (1) | 2013.08.27 |
어셈블리어 - 레지스터* (0) | 2013.08.27 |
어셈블리어 - INC,DEC,NOP
INC DEC NOP
이 함수 들은 뭔가 귀엽고(?) 재밌는 부분이 있습니다.
특히 NOP 함수는 리버스 엔지니어링 쉽게말하자면 크랙을 제작할때 가장 많이 쓰이는
함수명령어입니다.
INC
예제 : INC 인자1
인자1에다가 1을 더합니다.
C언어에서의 i++ 와 같습니다.
예제
EAX = 10
INC EAX
위 명령어를 실행하고 나서의 EAX 값은 INC 명령어로 인해 +1 이 되었으므로
EAX = 11 이 될 것입니다.
DEC
예제 : DEC 인자1
인자1에다가 1을 뺍니다.
C언어에서의 i-- 와 같습니다.
예제
EAX = 10
DEC EAX
위 명령어 실행 후 결과 값은 EAX = 9 가 되있을 것입니다.
NOP
예제 : NOP
이 함수는 유일하게 인자를 받지않습니다.
특정 자리에 NOP로 수정을 해버리면 그자리는 아무 이벤트를 발생시키지 않습니다.
명령어를 무효화 시킨다는 말도 되고 없에 버린단 말도 됩니다.
이 함수로 크랙,핵쉴드 바이패스 등등 아주 유용 나쁘게 쓰입니다.
'어셈블리어' 카테고리의 다른 글
어셈블리어 - PUSH,POP 함수 (1) | 2013.08.27 |
---|---|
어셈블리어 - CALL,CMP,JMP 함수 (1) | 2013.08.27 |
어셈블리어 - ADD,SUB 함수 (1) | 2013.08.27 |
어셈블리어 - MOV,LEA 명령어 (1) | 2013.08.27 |
어셈블리어 - 레지스터* (0) | 2013.08.27 |