반응형

Programming Tools 55

어셈블리어 정리노트 4 - 조건 분기 명령어

조건분기 JZ jmp [주소] 이명령어는 무조건분기다. jz [주소]의 경우, 이전 명령이 결과가 0이면 작동한다. 예를들면 mov eax, 1 inc eax // 2 jz 401005 // 작동ㄴ dec eax // 1 dec eax // 0 jz 401009 // 작동 ㅇ 상태 레지스터 ZF(Z FLAG) 더 정확히 표현하기 위해 상태레지스터를 소개한다. CPAZSTDO 등의 1비트 상태레지스터(플래그)를 이용해 조건을 이용하는 명령어들의 동작 여부를 결정한다. JZ의 경우, Z 플래그가 1이어야 작동한다. Z플래그는 연산의 결과가 0이 되었을 때 1이 된다. 인텔 CPU 기준으로 JE는 JZ와 같은 기계어를 공유한다. 따라서 둘다 Z플래그가 1일 때 동작한다. 모든 명령어가 플래그를 바꾸는 것은 아..

어셈블리어 정리노트 3 - 주소 참조 연산자 [], 오프셋, 인덱스 (dereference, offset, index)

주소 참조 연산자 [] 주소 참조 연산자 []는 레지스터에 주소값을 넣고, 그 레지스터에 []를 써서 해당 메모리에 접근하게 한다. C언어에서 dereference 연산자 *라고 생각하면 된다. mov eax, 00402000 // mov eax, offset 00402000으로 변환된다. mov dword ptr [eax], 10 // mov dword ptr ds:[eax], 10 // output // 00402000 메모리에 10이 들어간다.mov dword ptr ds:[eax], 10에서 ds는 data segment라는 의미이다. 데이터 세그먼트에 관한 어셈블리어 지시어 다른 참고할 만한 자료 이중 괄호([[]])는 안된다. 그래서 메모리에 다른 메모리의 주소를 담아 접근하려면 이렇게 범용레..

[코드 중심 C++] - STL(Standard Template Library)

STL Standard Template Library의 약어. C++에서 자체적으로 제공하는 자료구조 라이브러리이다. C++의 1/3이 문법이고, C++ 1/3이 탬플릿이고, 그 나머지가 STL일 것이라고... 누가 말했었는데 기억이 안난다. STL Container Adater 스택, 큐, 우선순위 큐 등의 기본적인 자료구조를 탬플릿형태로 제공한다. Stack stack 클래스의 멤버함수로 push, pop, top(조회), empty, size가 주어진다. #include #include // 이렇게 include해준다. using namespace std; int main(void){ stack s; // stack이 template로 구현되어있다. int형 데이터를 담는 stack이라 선언 s.p..

[Python] - 객체, 클래스, 추상화, 인스턴스화(Object, Class, Abstraction, Instantiation)

객체, 클래스, 추상화, 인스턴스화 객체(Object) : 실제로 존재하는 구체적인 대상 또는 시스템. 객체는 유일하고 다른 객체와 구별된다. 객체는 상태(속성, 멤버 변수)와 행위(메소드, 멤버 함수)를 가진다. (attribute, method) : (member variable, member function 이라고도 불린다.) 클래스(Class) : 새로운 자료형을 만든다. 구조체랑 비슷하다. 추상화(Abstraction) : 동일 유형 객체를 하나의 자료형으로 묶음. 즉 각 객체를 하나의 클래스로 묶음. 객체 -> 클래스 인스턴스화(Instantiation) : 클래스를 하나의 객체로 표현. 추상화와는 반대. 클래스 -> 객체 예시1 class C1 : a = 1 print(C1.a) print(..

어셈블리어 정리노트 3 - JMP, INC, DEC, ADD, SUB

JMP 명령어 명령어가 있는 메모리로 이동하게 해주는 jmp JMP (SHORT) 00401005 // 00401005 메모리로 이동한다.EIP는 실행할 곳의 주소를 담는 레지스터이다. EIP에 들어있는 주소로 이동해서, 해당 메모리 주소에 있는 명령어를 RAM에서 가져온다. 그러고 나서 그 명령어를 실행한다. 그리고 EIP는 읽어온 주소값의 크기만큼 증가한다. JMP의 경우, MOV EIP 00401005가 들어간다고 생각하면 됨 단 EIP는 범용 레지스터가 아니므로 MOV가 아니라 JMP를 이용하는 것이다. 00401000 - MOV EAX, 0 00401005 - MOV EBX, 0 0040100A - MOV ECX, 0 0040100F - JMP (SHORT) 00401005의 각각의 기계어는 B..

[코드 중심 C++] - 스마트 포인터(Smart Pointer : unique_ptr, share_ptr, weak_ptr)

스마트 포인터 C++의 스마트 포인터는 메모리 누수(Memory Leak)을 방어하기 위한 수단이고, 포인터처럼 동작하는 클래스 템플릿이다. C#이나 파이썬은 가비지 콜렉터와 같은 기술들로 사용하지 않는 메모리를 자동으로 수거해간다...만 C++은 그딴 거 없고 스마트 포인터로 스스로 해결해야만한다. 다만 C에서는 반드시 free()를 써서 처리해야하는 번거로움이 있었지만, C++에서는 스마트 포인터로 더 간편하게 해결할 수 있는 장점이 있다. 동적할당은 new, 해제는 delete. 동적할당은 힙영역의 메모리에서 수행한다. new로 할당 후 스마트 포인터에 넣어서 사용한다. 스마트 포인터는 다쓰고 소멸자에서 delete 키워드를 사용한다. 자동으로 해제하는 기능을 수행하게 된다. unique_ptr: ..

[Python] - 반복문, 함수의 정의, 동적타이핑 (Loop, Defining Function, Dynamic Typing)

반복문 반복문에서 나오는 조건문에는 반드시 :(콜론)이 들어간다는 것에 주의하자. while # 형식 while 조건식 : 문1 for # 형식 for 변수 in range함수/list/tuple : 문1 range() range(숫자) => 0부터 숫자-1 range(숫자1, 숫자2) => 숫자1 부터 숫자2 - 1 range()는 숫자 범위 리스트를 반환한다. 한개의 숫자만 받으면, 그 숫자를 end offset으로 정하고, 두개의 숫자를 받으면 첫 숫자는 start offset, 두번째는 end offset으로 처리한다. 함수 정의하는 법 :(콜론)과 indent(TAB 키)를 잊지 말자 # 형식 def function name (parameter) : 문장 이때 parameter의 형태를 정하지 ..

[코드 중심 C++] - 일반화, 탬플릿, 명시적 특수화, 암시적 구체화 (Generic Programming, Template, Explicit Specialization, Implicit instantiation)

일반화 : generic programming template를 이용해서 generic programming을 할 수 있다. template는 parameter의 별도의 함수/클래스를 만들지 않고 단 하나의 객체로 사용가능하게 해준다. 이는 곧 재사용성 극대화로 이어진다. 탬플릿 Template 탬플릿 template란, 함수나 클래스를 개별적으로 다시 작성하지 않아도, 여러 자료 형으로 사용할 수 있도록 하게 만들어 놓은 틀. function template을 이용해서 이렇게 다양한 자료형에 대응할 수 있다. 다만 배열이나 구조체는 에러가 잘 발생한다. 구조체 연산 . ->을 연산자오버로딩을 통해 다시 정의해야한다고는 하는데 뭐 명확히 알려주진 않는다... 이렇게 함수에 대해서 탬플릿을 사용하면 함수 ..

Python - 조건문, 자주 사용하는 함수

조건문 if condition: #do something elseif condition: #do something else: #do something # indent를 해야한다. # condition에 괄호는 필요없다. condition이 false만 되지만 않으면 된다. # 콜론(:)빼먹지 마라. 사용자의 입력받기 a = input("입력해주세요"); print(a) ## output: ## 입력해주세요공부하기싫다 ## 공부하기싫다 input(string) string을 콘솔에 출력하고, 그 후 사용자의 입력을 받는다. input함수는 입력받는 값은 모두 문자열로 인식한다. 그래서 같이 쓰이는 것이 이 함수들이다. int(arg) str(arg) 자세한 것은 이 링크에 잘 정리되어있다. 삼항연산자 x ..

반응형