목록2022/07 (8)
연습장
주제: 데이터 연산 / 데이터를 가공하는 방법에 대해 알아보자. int a = 1; : 1이라는 데이터를 a라는 바구니(메모리)에 할당한다. int b = 2; : 2라는 데이터를 a라는 바구니(메모리)에 할당한다. 산술연산자 대입연산 a = b; : a에 b를 대입하고 b를 반환하라. (b라는 바구니 안에 있는 값을 a라는 바구니 안에 복사한다. 사칙연산 a = b + 3 덧셈 add a = b - 3 뺄셈 sub a = b * 3 곱셈 mul a = b / 3 나눗셈 div a = b % 3 나눗셈(나머지) div 사칙연산이 필요할 때: 데미지를 계산할 때, 체력을 깎을 때, 루프문에서 카운터를 1증가 시킬 때 등 a += 3 a = a + 3 a -= 3 a = a - 3 a *=3 a = a * ..
주제: 문자와 문자열 bool은 그냥 정수지만, 참/거짓을 나타내기 위해 사용한다 했었다. 사실 char도 마찬가지이다. 그냥 정수지만 '문자'의 의미를 나타내기 위해 사용한다. char : 알파벳, 숫자, 문자를 나타낸다. wchar_t : 유니코드 문자를 나타낸다. (_t == _type의 약자) ASCII코드 (정보교환을 위한 미국표준 코드) : '문자'의 의미로 작은 따옴표 ' '를 사용한다. #include using namespace std; char ch1 = 97; char ch2 = 'a'; char ch3 = '1'; char ch4 = 'a'+1; int main(){ cout
주제: 불리언(bool)과 실수 불리언(boolean)은 참과 거짓 두가지만 갖고 있는 형식이다. bool isHighLevel = true; //고렙이 맞는지 bool isPlayer = true; //유저가 맞는지 bool isMale = false; //캐릭터가 남자가 맞는지 불리언은 그냥 1바이트 정수에 불과하다. true는 0, false는 1의 값을 가지고 있다. 그렇다면, 왜 정수 시간에 불리언을 다루지 않았을까? => 어셈블리에서 불리언이라는 것은 없음 불리언만 봐도 참/거짓 둘 중 하나라는 힌트를 준다(가독성) int main(){ // 아래처럼 표현해도 되지만 // 여성 갯수? 뭔 말이지? 하는 상황이 올수도 있음 if(isFemale != 1) { //TODO } } int main(..
주제: 정수 주석처리: Comment (Ctrl + K 누른 후 C) / UnComment(Ctrl + K 누른 후 U) ① //이렇게 주석을 달 수 있다. ② /*주석이 여러줄이면 이렇게 달 수 있다. */ 변수 선언 방법 (귀찮지만 적절하게 잘 골라줘야 함) ① [타입][이름]; ② [타입][이름] = [초기값]; char형 1바이트 (-128~127) short형 2바이트 (-32,768~32,767) int형 4바이트 (-21.4억~21.4억) __int64형 / long long형 8바이트 (어마어마하게 큼) signed / unsigned 변수 앞에는 항상 signed가 생략되어 있다. unsigned char형 1바이트 (0~255) unsigned short형 2바이트 (0~65,536) ..
7. 시프트(shift)연산과 논리(logical)연산 시프트 연산 한칸씩 밀겠다 10진수 기준으로 보면(부호가 음수가 아니라는 가정하에) 곱하기2를 한 것과 똑같음 mov eax, 0x12345678 PRINT_HEX 4, eax shl eax, 8 PRINT_HEX 4, eax shr eax, 8 PRINT_HEX 4, eax 시프트 연산 : 왼쪽이나 오른쪽으로 한 칸씩 밀어주는 부호가 음수가 아니라는 기준 하에 시프트 연산으로 왼쪽으로 당기는 행동 자체는 곱하기 2를 한것과 동일함 곱셈 나눗셈을 시프트 연산으로 빠르게 처리할 수 있음(간접적으로 사용) 게임서버에서 objectID를 만들어 줄 때 (직접적으로 사용) 논리 연산 not and or xor 비트 논리 연산자 조건 A : 잘생겼다 조건 B..
4. 변수와 레지스터 *메모리 레지스터 mov rax, a ; a라는 바구니의 주소값을 rax에 복사 mov rax, [a] ; a라는 바구니 안에 있는 값을 rax에다 복사 *변수의 선언 및 사용 변수: 데이터를 저장하는 바구니 처음에 바구니를 사용한다고 선언(이름과 크기 지정) * 메모리에는 구분할 수 있도록 주소(번지수)가 있다 고정적X 실행할 때 마다 변화O **초기화 된 데이터 변수이름, 크기, 초기값 크기 db(1) dw(2) dd(4) dq(8) section .data a db 0x11 b dw 0x2222 c dd 0x33333333 d dq 0x4444444444444444 **초기화 되지 않은 데이터 변수이름, 크기, 개수 크기 resb(1) resw(2) resd(4) resq(8)..
어셈블리어를 기초로 배우는 이유 : C++ 코드 실행을 하며 수많은 에러를 발견하는데에 도움이 됨 1. 환경 설정 SASM * 코드 실행, 실행파일로도 저장 가능 * C++ / 어셈블리(가장 low함) * 컴파일러, 어셈블러 == 번역기 * Section.text :코드에 대한 정보 Section.data :데이터에 대한 정보 -컴퓨터 3총사 : CPU, 메모리, 하드디스크(SSD) 메모리와 하드디스크의 큰 차이점은 전기가 나가면 메모리보존이 하드디스크는 되지만 메모리는 안됨 %include "io64.inc" section .text global CMAIN CMAIN: ;write your code here PRINT_STRING msg xor rax, rax ret section .data msg d..
변수: 변할 수 있는 수 상수: 변할 수 없는 수 정수형: 소수부가 없는 수 실수형: 소수부가 있는 수 음의 정수, 0, 양의 정수 short(2바이트), int(4바이트), long(8바이트), long long(8바이트) 작은 문자열>작은 따옴표('') 큰 문자열> 큰 따옴표("") 문자형 자료형: char bool형 자료형: 0(false) 혹은 1(true) 데이터형 변환 1. 특정 데이터형의 변수에 다른 데이터형의 값을 대입했을 때 2. 수식에 데이터형을 혼합하여 사용했을 때 3. 함수에 매개변수를 전달할 때 산술연산자 +: 합 -: 차 *: 곱 /: 나누기 >>: 몫 %: 나머지 사용자 입력과 string strlen 함수: 문자열의 길이를 반환하는 함수 sizeof 함수: 변수의 바이트의 크..