C++

· C++/기초
함수 함수라는 이름은 여러 언어에서 다른 이름으로 불린다. 어셈블리에서는 프로시저, C#은 메소드, 루틴 등등으로 다양한 이름으로 불린다. 함수는 특정 코드의 묶음이다. 우리가 알고 있는 수학에서의 함수랑 동일하다고 볼 수 있다. 하지만 다른 점은 입력값이 없을 수도 있고 출력값이 없을 수도 있다. 함수를 만들 때는 input으로 무엇을 받고, ouput으로 무엇을 뱉을지 정해줘야한다 반환 타입 함수이름([인자타입 매개변수]) { 함수 내용 return ~~~; } 와 같은 형식을 가진다. 만약 hello world를 출력하는 함수를 만든다고 해보자. input : 없음 / output : 없음 타입 : void -> 반환값없음 #include using namespace std; void PirintH..
· C++/기초
가위 바위 보 이전 포스팅에서 사용한 코드를 전부 다 이용해서 가위 바위 보 프로그램을 만들어보자. #include using namespace std; int main() { srand(time(0)); const int SCISSORS = 1; const int ROCK = 2; const int PAPER = 3; while (true) { int input; cout input; int computer = 1 + (rand() % 3); switch (input) { case SCISSORS: if (computer == SCISSORS) cout
· C++/기초
분기문 데이터를 메모리에 할당하고 가공하는 방법에 대해 알아 봤다. 그런데 가공한 데이터를 이용해서 무언가를 하고 싶다면?? 어떤 방법을 써야할까?? 가령 예를 들어서 플레이어가 몬스터를 죽였을 때, 경험치를 획득하는 코드를 짠다고 해보자. #include using namespace std; // 데이터를 메모리에 할당하고 가공하는 방법에 대해 알아봄 // 가공한 데이터를 이용해서 무언가를 하고 싶다면?? int main() { #pragma region 분기문 int hp = 100;// 몬스터 Hp int damage = 100; // 플레이어 데미지 hp -= damage;// 피격 판정 bool isDead = hp
· C++/기초
데이터 연산(산술 연산) 데이터를 가공하는 것이나 다름없다. 산술 연산자는 대입 연산과 사칙 연산 등이 있다. 대입 연산 int a = 0; int b = 1; a = b; a라는 이름의 바구니를 할당하고 안에 0을 넣는다. b라는 이름의 바구니를 할당하고 안에 1을 넣는다. a=b;는 a를 b에 대입하고 b를 반환하라는 의미이다. 이 말의 의미는 b 라는 바구니 안에 있는 값을, a 라는 바구니 안에다가 복사한다는 의미가 된다. 즉, 저 코드를 전부 실행하면 둘 다 1이라는 값을 가지게 된다. 프로그래밍을 하면서 가장 많이 사용하는 산술 연산자 이다. 그렇다면 사칙 연산은 언제 사용할까?? 데미지를 계산한다던지, 체력이 닳는다던지 등등 우리가 생각하는 모든걸 사칙 연산을 통해 계산한다. a = b + ..
· C++/기초
C++ 공부에 앞서 우리가 C++을 공부하기 이전에 어셈블리에 대해 포스팅하고 공부했다. 그게 왜 중요했는지 잠깐이나마 얘기한다. #include int main() { std::cout 2 바이트 (-32768 ~ 32767) int c; => 4 바이트 (-21.4억 ~ 21.4억) __int64 d; => 8 바이트(long long으로 쓰기도 함.) 어마어마 하게 큰 숫자 우리가 대부분 정수를 사용한다고 하면 int 타입을 떠올리고 사용한다. 그리고 타입을 선언할 때 signed는 생략되며 선언이 된다. 즉, 부호가 있다는 의미다. 하지만 반대로 unsigned를 사용하게 되면 부호가 사라진 양수가 되기 때문에 범위가 넒어진다. unsigned char a; unsigned short b; uns..
· C++/기초
배열 배열은 동일한 타입의 데이터 묶을을 의미한다. 배열을 구성하는 각 값을 배열 요소(element)라고 하고 배열의 위치를 가리키는 숫자를 인덱스(index)라고 한다. 어느 프로그래밍이나 존재한다. 어셈블리어에는 배열을 선언하기 쉽다. 변수를 선언할 때, 나열하면 그것이 배열이된다. 또는 times 키워드를 사용해 반복해서 만들어 줄 수도 있다. a는 1 byte씩 5개를 생성해서 총 5 byte의 메모리를 사용한다. b는 word 이므로 2 byte씩 5개, 총 10 byte를 사용하여 메모리에 할당하게된다. 실제로 이 값들이 제대로 동작하는지 프로그램을 실행해 확인해보자. a를 보게되면 1, 2, 3, 4, 5까지 총 5 byte가 잘 들어간 모습을 볼 수 있다. 그리고 b는 01 씩 잘 들어간..
· C++/기초
분기문 특정 조건에 따라서 코드 흐름을 제어하는 것, 그것이 분기문이다. ex) 스킬 사용 버튼을 눌렀는가? yes -> 스킬 사용 ex) 제한 시간 내에 던전 입장 수락 버튼을 눌렀는가? yes -> 입장, no -> 던전 취소 분기문과 밑에 나올 반복문만 사용해도 어느정도 프로그램을 만들 수 있다. 조건이란 곧 흐름인 것이다. 이걸 명심하자 어셈블리어에서 비교를 하기 위해서는 CMP 명령어를 사용한다.(CMP dst, src (dst가 기준)) SASM - 1 포스팅에서 말했듯이 CPU에는 A,B,C,D 레지스터가 있다고 말했다. 레지스터가 그것만 있는 것은 아니다. 바로 Flag Register 가 있다. (물론 이것 말고도 더 있다.) 비교한 결과물은 Flag Register에 저장한다. 저장한 ..
· C++/기초
사칙연산 사칙연산에 앞서 어셈블리어는 아닌 운영체제에서 제공하는 입출력 api에 대해 간단히 알고 넘어가자. GET_DEC = 숫자를 입력 받겠다. PRINT_DEC = 숫자를 출력하겠다. NEWLINE = 개행 사용 법은 밑에 사진과 같다. GET_DEC 1, al 은 1 byte 만큼 input을 받아서 al에 저장하겠다는 의미이며, GET_DEC 1, num은 1 byte 만큼 input에서 받아서 num 변수에 저장하겠다는 의미이다. 여기서 data를 사용하지 않고 bss를 사용한 것은 데이터를 입력 받을 것이기 때문에 초기화를 하지 않아도 되기 때문이다. 더하기 더하기는 add 라는 명령어로 사용된다. add a, b 형식으로 이루어져있다. 여기서 주의해야할 점은 a는 메모리 or 레지스터 만 ..
· C++/기초
지난 포스팅에는 어셈블리어가 무엇이고, 레지스터가 어떤 방식으로 동작하는지 간단하게 가지고 놀아봤다. 이번 포스팅에서는 메모리와 레지스터를 핑퐁하는 전반적인 얘기를 다뤄볼까 한다. Memory(메모리) 우리가 어떤 실행 파일을 만들고 난 후 실행하게 되면 그 파일이 메모리에 올라가게된다. 메모리에 올라갈 때는 여러가지 정보들이 함께 올라가는데 우리가 지정한 값들은 data 영역에 속하게 된다. 메모리에 무언가를 가장 쉽게 올리는 방법은 바로 data와 bss를 사용하는 것이다. 바로 어셈블리어를 통해 알아보자. 변수라는 것은 그냥 데이터를 저장하는데 쓰이는 바구니라고 생각하면 된다. data 변수를 선언하고 사용하기 위해서는 먼저 바구니를 사용하겠다고 알려주어야한다. (이름과 크기를 지정) data 변수..
· C++/기초
어셈블리어란? 어셈블리어란 C나 JAVA 와 같은 사용자와 가까운 고급언어보다 기꼐어와 더 가까운 언어이다. 즉, Low Langague라는 말이다. 기계어와 명령어가 1:1로 대응하고, 기계어는 CPU 종류에 따라 달라지기 때문에 호환성이 없는 언어이다. 주로 임베디드나 커널 프로그래밍 등에 쓰인다. 특징은 다음과 같다. 동일한 종류의 프로레서만 실행된다. 프로세서에 대한 사전지식이 필요한다. 메모리나 입출력장치, 레지스터 등의 구성요소를 직접 다룰 수 있다. 컴퓨터에서 실행하는 과정 등을 이해하기 쉽다. 마지막 특징이 매우 중요하다. 나는 C++를 배우기 이전에 앞서 컴퓨터에서 언어가 어떻게 실행되는 과정을 미리 알아보고 C++의 동작을 연결해보기 위해 먼저 어셈블리어에 대해 다룰 예정이다. SASM..
Mintriever
'C++' 태그의 글 목록 (4 Page)