본문 바로가기

프로그래밍

(13)
Win System Programming load eax, 0x0100 이런 명령어는 100이라는 주소가 너무 커서 피연산자 8bit로 표현이 불가하다. 그래서 다른 방법을 사용하는데 mul r0, 4, 4 mul r1, 4, 4 mul r2, r0, r1 //256(0x100) store r2, 0x30(메모리 주소) load r1, [0x30] //indirect 모드로 0x30 주소에 있는 값의 주소로 가서(0x100) 값을 가져온다. 프로세스 란 단지 메모리에 로딩된 실행중인 프로그램이 완벽한 설명은 아니며 프로세스 가상메모리 + 레지스터 가 더 좋은 설명이다. 프로세스에 종속적인 레지스터가 있기 때문인데 A라는 프로세스가 실행중인데 B라는 프로세스가 실행 되어야 한다면 A프로세스에서 사용중이던 레지스터들을 다른 메모리에 저장후 다시 B..
Win System Programming ALU에서 사칙연산 명령어를 해석할때는 피연산자에 메모리주소가 바로올수 없고 레지스터 가 와야한다. 이유는 메모리에 접근하기위해서는 항상 레지스터를 거치기 때문이다. Load(메모리에서 레지스터로 로드), Store(레지스터에서 메모리로 저장) 명령어는 피연산자에 주소가 올수 있다. ex) store eax, 0x20(메모리 주소)
Win System Programming win32 vs win64 32bit 컴퓨터는 bus, cpu가 한번에 처리할수 있는 명령어의 비트수가 32bit이다(64bit 컴퓨터는 64bit이다). 32bit컴퓨터에서 64bit의 포인터 주소를 같는다면 버스에서 주소를 보내는데 2번의 작업을 하므로 비효율적이다. 가상메모리에 대해서 알고싶다... 나중에 가면 배우는 듯 하다. 예스! 윈도우도 예외처리가 있나보다. 에러나면 전역구역에 에러코드가 저장된다. 바로 GetLastError( )를 호출하면 코드가 리턴된다.
Win System Programming 윤성우의 윈도즈 시스템 프로그래밍 유튜브 강의로 공부를 하고 있다. char 자료형으로 문자열을 많이 사용했는데 영어는 1바이트이고 한글은 2바이트임으로 안전성을 확보하기 위해 모든 문자를 2바이트로 표현하는 유니코드를 사용한다. SBCS(single byte character set) : 아스키 1바이트 MBCS(multi byte character set) : 한글 2바이트, 영문 1바이트 -> 우리가 평소에 썼던 것 WBCS(Wide byte character set) : 유니코드 문자 2바이트 사용 char str [ ] = "ABC한글"; int size = sizeof(str); -> 8 (1*3 + 2*2 + null문자) int len = strlen(str); -> 7 (한글은 2바이트라..
Win System Programming 가정 : HDD에서 메모리에 ADD 3 + 5를 로드한다 버스를 타고 CPU의 버스 인터페이스를 통해 접근해 레지스터에 ADD, 3, 5가 로드된다. 컨트롤 유닛은 레지스터에서 ADD를 불러와 해석하고 ALU에 ADD 명령을 내린다. ALU는 ADD 3 + 5를 수행하고 레지스터에 값을 저장한다. 컨트롤 유닛은 CPU의 전반적인 컨트롤을 담당한다. 버스 (control bus + address bus + data bus) 소스코드가 실행파일이 되는 과정 : 가정 : test.c 작성 -> 전처리기 작업 -> 소스를 컴파일러가 어셈블리언어로 컴파일 -> 어셈블러가 어셈블리어를 바이너리 코드로 변경 -> 링커가 바이너리 코드와 라이브러리를 합해 실행파일 생성 #include -> add 3, 5 -> 010..