본문 바로가기

Language

포인터(Pointer) 포인터 : 메모리의 주소 값(시작 주소)을 저장하기(가리키기) 위한 4바이트 변수 (참고 : 포인터의 크기가 4바이트인 이유는 32비트 컴퓨터의 주소체계가 32비트(4바이트)이기 때문이다) 포인터 선언 : int *pa; // int형의 pa 이름의 포인터 (참고 : 변수명에 포인터임을 나타내기 위해 접두사로 포인터의 약자 p를 붙인다. ex. 변수 a를 가리키기 위한 포인터 : pa) 즉, int 형 변수의 메모리 주소를 가리키는 pa 포인터 (따라서 시작주소로부터 4바이트까지 참조한다) 주소 연산( & , * ) : & : 주소값 * : 해당주소의 값 참조 예) 1. int i = 5; 2. int *pi = &i; 3. printf("%d %d", i, &i); 4. printf("%d %d %d".. 더보기
1차원 배열(Array) 배열은 일반적인 변수와 달리 값을 여러 개 저장할 수 있다. 배열의 선언 : ex.) int array [10]; 배열요소 자료형 배열이름 배열길이 배열 길이([10]) : 변수 10개를 모아서 배열을 구성한다는 뜻이다. 10개의 변수 각각을 가리켜 '배열 요소' 혹은 '배열 원소'라 한다. 배열 요소 자료형(int) : 배열을 구성하는 각각의 요소는 int 형 변수 배열 이름(array) : 배열의 요소에 접근할 때 array 라는 이름을 사용하겠다. (참고 : 배열명은 포인터이다) 즉, int 형 변수 열 개로 구성된 array 라는 배열을 생성하겠다. int int int int int int int int int int array[0] array[1] array[2] array[3] array[4.. 더보기
클래스(Class) 클래스 개념 : 부류를 형성하는 데이터들을 하나로 묶으며 그 데이터를 조작할 루틴, 함수들을 포함한다. 클래스의 장점 : 1. 데이터 은닉(information Hiding) : 정보를 은닉할수 있다. 2. 데이터 캡슐화(Encapsulation) : 같은 부류의 데이터와 메소드들을 묶어서 프로그래밍 할 수 있다. 클래스의 구성 : 데이터(멤버변수) + 메소드(멤버 함수) 클래스의 접근 : 1. public : 어느곳에서의 접근도 허용한다. (멤버변수에 접근하는 검증된 메소드들을 public 로 선언한다) 2. private : 클래스 내부에서의 접근만 허용한다. 즉, 클래스 외부에서의 접근은 금지한다.(데이터 은닉을 위해 멤버변수를 private 로 선언한다) 클래스의 사용 : 클래스를 사용하기 위해선.. 더보기
함수(Function) 함수의 구성 : 리턴형 함수이름 입력의 형태 int main (void) { 함수시작 함수의 몸체 return ; 리턴 } 함수종료 #include using namespace std; int add(int num1, int num2) // 파라미터 두개를 받아 num1, num2 에 각각 저장하고 더한값을 { // 부른 대상에게 돌려주는 add 라는 함수를 정의한다. int result = num1 + num2; return result; } int main() { cout 더보기
자바(java)로 구현한 선택정렬(Selection Sort) class array { public static void main(String[] args) { int data[] = {5, 3, 8, 1, 2, 7}; // 초기배열 int min=0; // 최소값 for(int i = 0 ; i data[j+1]) // 두 수를 .. 더보기
반복문 (for, while) 반복문 : 지정한 부분을 반복시킨다. for 문 : 개념 : 초기문으로 시작해서 조건문을 검사하여 TRUE 면 실행하고 한번의 실행이 끝나면 증감문을 거쳐 다시 조건문 검사하는 것을 반복한다. FALSE 면 빠져나온다. 사용법 : 주로 반복의 횟수를 알때 사용한다. for ( 초기문 ; 조건문 ; 증감문 ) { 반복할 내용; } #include int main() { int num; printf("구구단입니다. 알고싶은 단을 입력하세요!\n"); scanf("%d", &num); for(int i = 1; i 더보기
Java(자바) EditPlus에서 프로그래밍 자바 프로그래밍을 할때 javac 로 컴파일하고 java 로 실행하는것이 사람을 엄청 귀찮게 만든다. 하지만 EditPlus를 이용하면 작성부터 컴파일 실행가지 EditPlus 하나로 모두다 가능하다. Java 소스 작성 : EditPlus 를 실행한 후 파일 -> 새파일 -> Java 를 선택한다. 기본적인 소스코드가 나오며 소스코드 작성을 시작하면 된다. class { public static void main(String[] args) { System.out.println("Hello World!"); } } Java Compile(컴파일) 하기 : 도구 -> 사용자 도구 구성 위와 같이 메뉴제목은 알기 쉽게 javac 명령은 javac.exe 를 선택해준다. 인수는 오른쪽에 ▼ 버튼을 눌러 파일이.. 더보기
분기문 ( if, if - else, switch ) 분기문 : 프로그램의 흐름을 조건에 따라서 분기시킨다. if 문 : 개념 : 조건식이 TRUE면 if 문 내의 문장을 실행한다. (FALSE 라면 건너뛴다) 사용법 : 예외처리, 단순조건검사(하나의 경우검사)에 쓰임. if(조건) { 실행할 문장; } #include void main() { int num; scanf("%d", &num); // 숫자를 입력받음 // cin>>num; (C++ 기반) if(num>0) { printf("입력하신 수는 양수입니다\n"); // 출력 // cout 입력하신 수는 음수입니다 , 1 입력 -> 입력하신 수는 양수입니다. if - else if - else 문 : 여러 경우로 흐름이 나뉠때 쓰임(경우에 따라 switch 와 바꿔쓸수 있다) 개념 : if -> 조건.. 더보기
자료형, 상수, 변수, 연산자 예) int main() { int a = 5 ; // 지역변수 자료형 변수 연산자 상수 } 자료형 : 선언할 변수들의 특징 자료형(data type) 할당되는 메모리 크기 표현가능한 크기 정수형 / char 1 byte -128 ~ +127 (문자) 정수형 / short 2 byte -32768 ~ +32767 정수형 / int 4 byte -2147483648 ~ +2147483647 (숫자) 정수형 / long 4 byte -2147483648 ~ +2147483647 실수형 / float 4 byte 3.4*10^-37 ~ 3.4*10^+38| 소수이하 6자리까지 정밀 실수형 / double 8 byte 1.7*10^-307 ~ 3.4*10^308 (실수) 소수이하 15자리까지 정밀 실수형 / l.. 더보기
C Hello World 출력 1 : /* 2 : HelloWolrd.c 3 : */ 4 : 5 : #include 6 : 7 : int main() 8 : { 9 : printf("Hello Wolrd"); // 줄 마칠시에 세미클론(';' 사용) 10 : return 0; 11 : } HelloWorld.c 의 구성 : 1. 함수 : int main ( ) 리턴형 함수의 이름 파라미터 { (함수의 시작) // } (함수의 끝) 함수 사용법(형식만 보자) : 1. 함수의 선언 (ex. void function(int a); ) (리턴형 : void 함수이름 : function 파라미터 int a) 2. 함수의 정의 (ex. void function(int a) { printf("%d", a); } ) 3. 함수호출 (ex. fuct.. 더보기
C++ Hello World 출력 /* HelloWorldpp.cpp */ 1 : #include 2 : 3 : int main() 4 : { 5 : std::cout 더보기
함수 호출 과정 스택 프레임(Stack Frame) : 함수 호출시 할당되는 메모리 블록(지역변수의 선언으로 인해 할당되는 메모리 블록) 함수 호출이 완료되면(return) 기존에 선언된 지역변수에 접근이 불가능하다.(할당된 메모리가 반환되기 때문) (ex. fct1() 함수가 호출되면서 함수 내부에 선언된 변수 c, d 가 스택에 할당되는데 이 메모리 블록을 fct1() 함수의 스택 프레임이라 한다. fct1() 함수가 반환되면 스택 프레임도 반환된다.) SP 레지스터 : 스택 프레임을 가리키는 레지스터 sp 레지스터 값은 변수가 하나 하나씩 할당될 때마다 증가하면서 다음 변수가 할당될 메모리 위치를 가리킨다. 호출한 함수가 종료될 경우, 스택 프레임 단위로 sp 레지스터 값을 이동시켜야 한다. (함수 안에서 선언된 .. 더보기
어셈블리 디자인을 통한 컴퓨터 구조의 접근 1. 레지스터 디자인 고려 사항 : 레지스터 용량 레지스터 갯수 레지스터 각각의 용도 예) 레지스터 용량 : 16비트, 레지스터 갯수 : r0 ~ r7 (8개) 레지스터 용도 : r0 ~ r3 (저장용), r4(ir : instruction register), r5(sp : stack pointer), r6(lr : link register), r7(pc : program counter) (참고 : ir 은 다음번에 실행하게 될 명령어를 미리 가져다 놓는 용도로 사용된다) 2. 명령어 구조 디자인 명령어의 구조는 레지스터의 용량, 갯수, 용도에 종속적으로 구성될수 밖에 없다. (예 : 레지스터가 4개 일때와 8개 일때 명령어 내부에 레지스터를 표현해야할 비트수가 달라진다) 따라서 어셈블리 언어로 구현된 .. 더보기
스택과 콜링컨벤션의 이해 Function(1, 2)라고 선언이 된 함수가 사용된다면 push 2 push 1 call 004017E0 이와 같은 어셈블리 코드가 되는데, 파라미터는 뒤에서부터 push가 된다. 그 이유는 스택(stack)에 값을 순서대로 쌓아놓고, 나중에 쌓인 값을 우선으로 해 빼서 사용하기 때문이다. 일반적인 메모리 구조는 그림과 같다. 프로그램이 실행되기 위해서는 실행에 필요한 모든 것들이 메모리에 적재되어야만 한다. Text : 컴파일된 프로그램 소스가 기계어의 형태로 위치 Data : 프로그램에서 초기화된 데이터들의 위치 BSS : 초기화되지 않은 변수들의 위치. 항상 0으로 초기화됨 Stack : 지역변수, Command Line arguments 위치 Heap : 동적으로 할당된 변수들이 위치 Stac.. 더보기
상황별 기초 어셈블리어 어셈블리 명령어를 상황별로 어떻게 사용되는지 정리해보며 공부해보자. 1. 데이터 이동 : 어셈블리에서 데이터를 옮기고자 할때는 MOV 명령어를 사용한다. MOV [복사될 곳], [읽어들일 곳] MOV EAX, EBX의 경우 EBX 레지스터를 EAX에 대입한다. MOV EAX, [EBX]로 표현되어 있는 경우에는 EBX가 가리키는 값을 EAX에 대입한다. MOV EAX, [EBP+10]의 경우 EBP의 주소에서 20만큼 증가한 주소지의 값을 EAX에 대입한다 MOV EAX, [EBP-10]의 경우 EBP의 주소에서 20만큼 감소한 주소지의 값을 EAX에 대입한다 [EBP+10]과 [EBP-10]의 경우에 함수 내부에 존재하는 명령이었다면 EBP를 기준으로 10 증가된 경우에는 파라미터로 넘어오는 값일 수 .. 더보기
기초 어셈블리어. 데이터 타입 : 타입 설 명 BYTE 8bit 부호 없는 정수 SBYTE 8bit 부호 있는 정수 WORD 16bit 부호 없는 정수 SWORD 16bit 부호 있는 정수 DWORD 33bit 부호 없는 정수 SDWORD 32bit 부호 있는 정수 FWORD 48bit 정수 QWORD 64bit 정수 TBYTE 80비트 정수 피연산자(operand) 타입 : 피연산자 설 명 r8 8bit 범용 레지스터 r16 16bit 범용 레지스터 r32 32bit 범용 레지스터 Reg 임의의 범용 레지스터 Sreg 16bit 세그먼트 레지스터 imm 8, 16, 32bit 즉시값 imm8 8bit 즉시값 imm16 16bit 즉시값 imm32 32bit 즉시값 r/m8 8bt 범용 레지스터, 메모리 r/m16 16b.. 더보기