Hello World라는 한줄 짜리 출력문이
어셈블리 언어로 뜯어보면은
어셈블리 한줄이 CPU instruction한개랑 (1ㄷ1 대칭)맞먹는다고 보면된다.
우리가 배웠던 문법들과 안 배운 문법들이 등장을 한다.
을 단순하게 생각하자.
적절한 데이터를 저장하고 가공하는 것
데이터 + 로직
-2 -1 0 1 2 .. 다포함 하는게 "정수"
0이 아닌 초기화 값이 있다면 -> .data 영역으로 올라감.
초기값이 0이거나, 초기값이 없는 변수라면 -> .bss 영역으로 올라감.
프로그램이 실행되고 종료될 때까지 남아아있는 메모리이다.
main함수 밖에 선언해놓은 hp는 전역변수라서 data영역에 올라가게 된다.
어셈블리에서 byte, word, dword, quad
했던것처럼
char a; == 1byte
short b; == 2byte
int c; == 4byte
__int64 == 8byte == long long
이다.
근데 이렇게 char, short 선언해놓으면 기본적으로 signed 생략되어있음.
signed라는 것은 "부호"가 있다는 것 == 최상위 비트를 음수로 사용하겠다.
메모리를 아끼는게 ㅈㄴ 중요하다.
레벨과 같은 부분에서 unsigned를 사용해야 할까?
스타일에 따라서 다르다 -> 버그를 빨리 잡기 위해서 안사용하는 스타일(경우)도 있다.
정수 오버플로우
정수 언더플로우
전역 변수로 b = 32767
b = b + 1;
=> -32768 나오는데
여기서 1 더해서 그럼.