[전광성의 어셈블리어 이해하기:5회] 프로시져(Procedure) (1) 저자: 전광성 | 날짜: 2005년 02월 23일 0 함수의 동작 원리 2 .0 프로시져(Procedure) 3 .0 USES 연산자 시작하기에 앞서... 아무리 저급언어라고 해도, 함수는 존재한다. 함수는 특정 코드가 반복될때, 이를 따로 떼어내어 만들어 두고 필요할 때 호출함으로써 코드의 길이를 줄일 수 있다. 또한 함수는 지나치게 긴 코드를 보기좋고 깔끔하게 만들어 주기도 하며, 함수의 이름을 잘 짓는다면 문서화에도 도움이 된다. 어셈블리어에서는 함수를 이용할 수 있는 직접적인 명령(Instruction)은 없지만, 디렉티브(Directive)를 갖고 있다. 하지만 그 이전에, 먼저 런타임 스택(Runtime Stack)을 알..
[전광성의 어셈블리어 이해하기:4회] 프로그래밍에 필요한 명령어와 디렉티브 (3) 저자: 전광성 | 날짜: 2005년 02월 16일 1 .0 여러가지 명령어(MOV, 다이렉트-오프셋 오퍼랜드, ADD, SUB) 2 .0 플래그와 연산자(OFFSET, PTR, TYPE, 인다이렉트 오퍼랜드) 및 배열 0 JMP, LOOP 명령과 예제 JMP 명령 JMP는 jump의 약자로, 코드의 특정 위치로 점프를 할 수 있다. C언어에서의 goto문과 정확히 일대일 대응이 되는 명령이다. "jmp 목적지의 코드레이블"와 같이 사용한다. 다음의 예를 보아라. L1: jmp L1 지금 보여주는 것은 무한루프가 된다. jmp 앞에 붙은 L1:은 코드상에 붙인 레이블이다. jmp L1 이렇게 하게 되면 L1으로 가서 코드를 ..
[전광성의 어셈블리어 이해하기:4회] 프로그래밍에 필요한 명령어와 디렉티브 (2) 저자: 전광성 | 날짜: 2005년 02월 04일 1 .0 여러가지 명령어(MOV, 다이렉트-오프셋 오퍼랜드, ADD, SUB) 0 플래그와 연산자(OFFSET, PTR, TYPE, 인다이렉트 오퍼랜드) 및 배열 3 .0 JMP, LOOP 명령과 예제 산술 연산에 영향을 받는 플래그 산술 연산을 하다 보면 최대값을 뛰어넘어 오버플로우가 발생하기도 한다. 이럴 때 어떻게 처리를 해주어야 할까? 플래그(Flags)를 이용하면 된다. 플래그는 산술연산을 수행한 후, 어떤 상태가 되었는지에 대해 알려준다. 단지 오버플로우 뿐만 아니라 계산 후 0이 되었는지, 부호가 붙었는지 등을 표시해 준다. 조심해야 할 것은 산술 연산을 두 번..
[전광성의 어셈블리어 이해하기:4회] 프로그래밍에 필요한 명령어와 디렉티브 (1) 저자: 전광성 | 날짜: 2005년 02월 02일 0 여러가지 명령어(MOV, 다이렉트-오프셋 오퍼랜드, ADD, SUB) 2 .0 플래그와 연산자(OFFSET, PTR, TYPE, 인다이렉트 오퍼랜드) 및 배열 3 .0 JMP, LOOP 명령과 예제 시작하기에 앞서... 시작한지 얼마 되지 않은 것 같은데 벌써 4회이다. 이번 회에서 배우게 될 내용은 다음과 같다. - 자료전송명령(C에서의 대입연산자(=)의 역할을 한다)의 사용 - 덧셈과 뺄셈과 이에 관련된 부수적인 내용의 이해 - 포인터와 배열의 사용 - jmp명령(C에서의 goto)과 루프사용 이제는 본격적으로 프로그래밍에 필요한 명령어와 디렉티브들을 배우게 될 것이..
[전광성의 어셈블리어 이해하기:3회] 어셈블리언어 기초 (3) 저자: 전광성 | 날짜: 2005년 01월 04일 1 .0 어셈블리언어 기초 (1) 2 .0 어셈블리언어 기초 (2) 0 어셈블리언어 기초 (3) DUP 연산자 연속된 여러 값들을 한꺼번에 초기화할 수 있게 해주는 연산자이다. 아까 한 데이터 레이블에 뒤이어 연속적으로 자료를 정의했던 것을 상기시켜보라. 만약 연속된 자료가 1000개 필요하다면 0을 1000개 써야 하므로 매우 귀찮을 것이다. 하지만 DUP연산자를 사용한다면 다음과같이 쓸 수 있다.BYTE 1000 DUP(0) ; 20 bytes, 모두 다 0이다. BYTE 4 DUP("ABC") ; 12 bytes: "ABCABCABCABC" 위와 같이 사용한다. DUP앞에 쓰는 숫자는 '..
[전광성의 어셈블리어 이해하기:3회] 어셈블리언어 기초 (2) 저자: 전광성 | 날짜: 2004년 12월 29일 1 .0 어셈블리언어 기초 (1) 0 어셈블리언어 기초 (2) 3 .0 어셈블리언어 기초 (3) 레이블(Label) 레이블이란 인스트럭션이나 데이터의 위치를 표시해 주는 것이다. 인스트럭션의 위치를 표시해 주는 것이라는 설명에 대해서는 C에서 goto문을 생각하면 가장 쉬울 것이다. C에서는 특정 문장 앞에 L1: 과같이 쓰고, 나중에 그 위치로 옮겨가고 싶을 때 goto L1;이라고 썼다. 어셈블리에서는 jmp이나 loop와 같은 인스트럭션을 쓸 때 사용하게 될 것이다. 이러할 때 쓰이는 레이블을 코드 레이블(Code Label)이라고 한다.데이터의 위치를 표시해 준다는 것은 무엇일까? 바로..
[전광성의 어셈블리어 이해하기:3회] 어셈블리언어 기초 (1) 저자: 전광성 | 날짜: 2004년 12월 22일 0 어셈블리언어 기초 (1) 2 .0 어셈블리언어 기초 (2) 3 .0 어셈블리언어 기초 (3) 강좌를 시작하며 이번 강좌에서는 어셈블리어로 프로그램을 작성하기 위해 필요한 기본 지식들을 배우게 될 것이다. 즉, 자료형과 간단한 명령어, 코딩할 때 알아야할 기반 지식들을 배우게 될 것이다. C언어를 처음 배울 때 #include 부터 배우듯이, 차근차근 밟아나갈 것이다. 참고로 우리는 앞으로 매크로 어셈블러를 사용할 것이다.여기에 나올 간단한 예제들을 직접 해보고 싶다면, 최신버젼을 구해서 해보기 바란다. 그리고 이 강좌 소개및 목차부분에서 언급한 책에서 제공하는 라이브러리도 사용하게 될 것이..
[전광성의 어셈블리어 이해하기:2회] IA-32 프로세서 아키텍쳐란? (3) 저자: 전광성 | 날짜: 2004년 12월 15일 1 .0 IA-32 프로세서 아키텍쳐란? (1) 2 .0 IA-32 프로세서 아키텍쳐란? (2) 0 IA-32 프로세서 아키텍쳐란? (3) 시스크(CISC)와 리스크(RISC) 명령어는 크게 CISC(Complex Instruction Set Computer) 방식과 RISC(Reduced Instruction Set Computer)방식으로 구분할 수 있다. 인텔의 초기 프로세서들은 시스크(CISC : Complex Instruction Set)접근 방식으로 성능 향상시키려고 시도 하였다.CISC 방식은 기본 명령어가 있고 필요에 따라서 뒤에 명령어의 길이를 늘리는 방식으로 명..