목차
제1장. IA(Intel Architecture) 계열 프로세서 변천
1.1 소개 = 14
1.2 어셈블리 언어를 배워야 되는 이유? = 14
1.3 어셈블리 언어의 응용분야 = 15
1.4 IA-32 프로세서 발전 개요 = 15
1.5 IA-32 프로세서 변천 = 16
1.5.1 Intel 8086/8088 = 16
1.5.2 Intel 80286(IBM PC-AT) = 17
1.5.3 Intel 80386 = 17
1.5.4 Intel 80486 = 18
1.5.5 Intel Pentium = 19
제2장. IA-32 프로세서의 기본은 Intel 8086/8088
2.1 Intel 8086/8088의 기본적인 구조 = 24
2.2 Intel 8086/8088의 메모리 = 25
2.3 Programming 모델 = 26
2.3.1 범용 레지스터 = 26
2.3.2 포인터와 인덱스 레지스터 = 27
2.3.3 명령어 레지스터 : IP(Instruction Pointer) = 28
2.3.4 세그먼트 레지스터(Segment Register) = 28
연습 문제 = 38
제3장. 프로그래머 관점에서 바라본 펜티엄4 프로세스
3.1 IA-32 프로세서의 기본 실행 환경 = 42
3.2 IA-32 프로세서 레지스터 = 43
3.2.1 IA-32 범용 레지스터 = 44
3.2.2 세그먼트 레지스터 = 46
3.2.3 명령어 포인터 레지스터 : EIP(Instruction Pointer Register) = 49
3.2.4 상태 제어 플래그(EFLAGS) 레지스터 = 50
3.2.5 시스템 플래그 = 51
3.3 IA-32 프로세서의 동작 모드 종류 = 52
3.4 메모리 구성 = 54
3.5 32비트 레지스터 모드에서의 특성 = 56
3.6 IA-32 프로세서 상에서의 실제 모드 = 57
3.6.1 실제 모드 IA-32 프로세서의 세그먼트와 세그먼트 레지스터 = 57
3.6.2 IA-32 프로세서 실제 모드에서 사용가능한 레지스터와 주소 지정 방식 = 58
3.7 메모리 주소지정의 개념 = 59
3.7.1 메모리 주소지정의 기구 = 60
3.7.2 실제 모드 IA-32 프로세서 상에서의 20비트 주소계산의 emulation = 63
연습 문제 = 64
제4장. IA-32 프로세서의 데이터 형식
4.1 기본 데이터 크기(Fundamental data size) = 66
4.2 표기법 = 67
4.3 수치 데이터 형(numeric data types) = 67
4.3.1 정수(Integers) = 68
4.4 문자열 데이터 형(string data types) = 71
4.5 BCD(Binary Coded Decimal) = 72
4.5.1 (unpack) BCD 및 pack BCD 정수 = 72
4.6 메모리 내의 데이터 저장 = 73
연습 문제 = 74
제5장. 프로그램 기초와 주소 지정 방식
5.1 IA-32 어셈블리 언어 형식 = 78
5.1.1 레이블(Label) 필드 = 78
5.1.2 OP 코드(umumonic)와 오퍼랜드 필드 = 79
5.1.3 설명문 필드 = 79
5.2 지시어(directive) = 80
5.2.1 리스트 지시어 : PAGE 및 TITLE = 80
5.2.2 세그먼트 지시어 = 81
5.2.3 프로세스와 실수연산 프로세스의 지정 = 85
5.2.4 스택 생성 = 85
5.3 단순 세그먼트 지시어 = 86
5.3.1 .MODEL = 86
5.3.2 .STACK 지시어 = 86
5.3.3 .DATA와 @DATA 지시어 = 86
5.3.4 .CODE 지시어 = 87
5.3.5 프로그램의 시작(.STARTUP)과 종료 지시어(.EXIT) = 88
5.4 어셈블리 언어로 원시 프로그램을 작성하기 위한 간단한 명령어 = 89
5.4.1 데이터 전송 명령어 = 89
5.5 원시 프로그램의 작성 = 91
5.6 원시 프로그램의 어셈블과 실행 과정 = 93
5.6.1 어셈블리 과정 = 94
5.6.2 링크 과정 = 94
5.6.3 실행 과정 = 95
5.6.4 ML 명령에 의한 어셈블과 링크 과정 = 95
5.7 정수 및 문자 데이터 정의 = 95
5.7.1 바이트 크기 데이터 정의 : DB = 96
5.7.2 워드 크기 데이터 정의 : DW = 99
5.7.3 더블 워드 크기 데이터 정의 : DD = 99
5.7.4 8바이트 크기 데이터 정의 : DQ = 99
5.7.5 10바이트 크기 데이터 정의 : DT = 100
5.7.6 문자열(string) = 1000
5.7.7 등호("=") 지시어 = 101
5.7.8 EQU 지시어 = 102
5.8 구조체(STRUC) 정의 = 104
5.9 시스템 호출(System call)을 이용한 INT 21h 함수 = 104
5.9.1 시스템 호출이란 = 106
5.9.2 시스템 호출의 종류 = 106
5.10 주소 지정방식(Addressing mode) = 109
5.10.1 즉치 주소 지정방식(Immediate Addressing) = 110
5.10.2 레지스터 주소방식(Resister Addressing) = 110
5.10.3 메모리 참조 주소 지정방식 = 111
5.10.4 메모리 위치를 가리키는데 사용되는 연산자들 = 118
5.11 16비트 레지스터와 32비트 레지스터의 혼용 = 122
연습 문제 = 123
제6장. IA-32 정수형 범용 명령어
6.1 MOV 이외의 데이터 전송 명령어 = 126
6.1.1 데이터 교환(Exchange) 명령어 = 126
6.1.2 BSWAP(Byte swap) = 127
6.1.3 주소를 목적지 레지스터로 옮기는 전송 명령어 = 128
6.1.4 XLAT/XLATB : Table Look-Up translation = 129
6.2 형 변환(주호 확장, ZERO 확장) 명령어 = 131
6.2.1 MOVSX 명령어 : [Signe-extend move 명령어 : MOVSX] = 132
6.2.2 MOVZX : [Zero-extend move 명령어 : MOVZX] = 133
6.2.3 NEG(NEGate) = 134
6.3 산술 명령어 = 135
6.3.1 INC와 DEC 명령어 = 135
6.3.2 덧셈 및 뺄셈 명령어 = 138
6.3.3 XADD : Exchange and ADD = 141
6.3.4 뺄셈 명령어 : SUB와 SBB = 142
6.4 형 변환 명령어 : CBW, CWD/CWDE, CDQ = 144
6.4.1 CBW/CWDE = 144
6.4.2 CWD/CDQ = 145
6.5 곱셈 = 146
6.5.1 부호 없는 정수의 곱셈 = 147
6.5.2 부호 있는 곱셈(IMUL) = 149
6.5.3 IMUL 곱셈 명령어 = 151
6.6 나눗셈 = 152
6.6.1 부호 없는 정수의 나눗셈 : DIV 명령어 = 153
6.6.2 부호 있는 정수 나눗셈 = 155
연습 문제 = 162
제7장. 제어문과 반복문
7.1 무조건 분기 명령어(JMP) = 166
7.1.1 Short JMP 명령어 = 167
7.1.2 Near JMP 명령어 = 169
7.1.3 far JMP 명령어 = 169
7.2 조건부 점프 명령어 = 171
7.2.1 비교 명령어(Compare) = 171
7.2.2 조건 분기류 명령어 = 173
7.2.3 Pretest Loops = 176
7.2.4 조건식의 결정구조 = 182
7.3 반복 수행문 카운터 제어 구조 = 187
7.3.1 LOOP/LOOPcc 명령어 = 187
7.3.2 LOOPE/LOOPZ = 191
7.3.3 LOONE/LOOPNZ = 192
7.3.4 JECXZ = 194
연습 문제 = 195
제8장. 배열과 문자열 처리
8.1 배열의 필요성 = 200
8.2 인덱스 주소 지정방식(Index Addressing) = 201
8.3 베이스 인덱스 주소 지정방식 = 203
8.4 베이스 상대 인덱스 주소 지정방식 = 206
8.5 스케일된 인덱스 주소 지정방식 = 207
8.6 데이터 저장을 위한 배열이 초기값 설정과 배열의 요소 액세스 = 210
8.7 Lengthof, Sizeof와 Type 연산자 = 212
8.8 문자열 처리 명령어(string instructions) = 220
8.8.1 문자열 동작의 특징 = 221
8.8.2 MOVS/MOVSB/MOVSW/MOVSD : 문자열 전송 명령어 = 222
8.8.3 REP : 반복 문자열 접두어 = 226
8.8.4 LODS/LODSB/LODSW/LODSD : Lode string 명령 = 231
8.8.5 STOS/SOSB/STOSW/STOSD : Store string : 문자열을 저장 = 232
8.8.6 CMPS/CMPSB/CMPSW/CMPSD : Compare String Operands : 문자열을 비교 = 233
8.8.7 SCAS(Scan string) : 문자열을 조사 = 237
연습 문제 = 240
제9장. 프로시저
9.1 스택(Stack) = 245
9.1.1 PUSH와 POP 명령 = 246
9.2 간단한 프로시저 = 252
9.2.1 PROC-ENDP 지시어 = 252
9.2.2 CALL 명령과 복귀명령 RET = 253
9.2.3 프로시저로 인수(parameters)를 전달하는 방법 = 256
9.2.4 스택 프레임(Stack Frame)과 EBP의 효율적 사용 = 259
9.2.5 스택 상에서의 지역 변수 사용 = 263
9.3 재귀 기법(Recursion) = 265
9.4 세그먼트간의 프로시저 호출 명령 = 269
9.5 세그먼트 오버라이트 프리픽스와 GROUP 의사 명령어 = 270
9.6 EXTRN, PUBLIC 선언 = 272
9.6.1 PUBLIC 지시어 = 273
9.6.2 EXTRN 지시어 = 273
9.7 인크루트(include) 파일의 사용 = 279
연습 문제 = 283
제10장. 어셈블리 언어와 Visual C++ 과의 연결
10.1 Visual C++상에서의 인라인 어셈블리 코드 = 287
10.1.1 인라인 어셈블리 코드 작성 특징 = 290
10.2 Visual C++과 어셈블리 언어 = 291
10.3 IA-32 프로세서 어셈블리 언어와 Visual C++ 6.0과의 연결 = 292
10.3.1 Visual Studio 상에서 C와 어셈블리 project 생성 = 292
10.3.2 C 언어로 작성된 소스 프로그램 작성 = 295
10.3.3 Visual Studio상에서 어셈블리 프로그램 작성 = 298
103.4 Visual Studio상에서 작성된 C와 어셈블리 프로그램의 실행 예 = 300
연습 문제 = 304
제11장. 매크로(Macro)
11.1 매크로 구조 = 309
11.2 매크로 내에 인수를 사용하는 경우 = 311
11.2.1 인수를 하나만 가지는 경우 = 311
11.2.2 인수를 2개 이상 가지는 경우 = 313
11.3 조건부 지시어 = 315
11.4 Local 지시어 = 317
11.5 블록 반복 지시어 = 322
11.5.1 REPT(REPEAT) 지시어 = 322
11.5.2 IRP(Indefinite RePeat) 지시어 = 323
11.5.3 IRPC(Indefinite RePeat Character) 의사 명령어 = 324
연습 문제 = 326
제12장. 비트별 논리 연산자
12.1 AND, OR, XOR, NOT, TEST = 330
12.1.1 AND : A∧B = 330
12.1.2 OR : A∨B = 332
12.1.3 XOR(Exclusive - OR) : A+B = 333
12.1.4 NOT : A' 혹은 BAR A = 335
12.1.5 TEST = 336
12.2 시프트 = 338
12.2.1 시프트명령 = 339
12.3 로테이트 : RCL, RCR, ROL, ROR = 343
12.3.1 RCL(Rotate through Carry Left) = 344
12.3.2 RCR(Rotate through Carry Right) = 346
12.3.3 ROL(ROtate Left) = 347
12.3.4 ROR(ROtate Right) = 349
연습 문제 = 351
제13장. 10진 보정 명령어
13.1 ASCII 코드와 10진 계산 = 354
13.2 ASCII 산술 연산 명령(ASCII arithmetic instruction) = 355
13.2.1 AAA(ASCII adjust AL after addition) = 355
13.2.2 AAS ; 뺄셈 뒤 ASCII 조정 = 358
13.2.3 AAM ; 곱셈한 뒤 ASCII 조정 = 359
13.2.4 AAD ; 나눗셈하기 전에 ASCII 조정 = 360
13.3 BCD 산술 연산 명령(DAA, DAS) = 362
13.3.1 DAA(Decimal Adjust AL after Addition) = 363
13.3.2 DAS(Decimal Adjust AL after Subtraction) = 365
연습 문제 = 368
제14장. 부동소수점 형(Floating Point : 실수)
14.1 부동소수점 수 = 370
14.2 부동소수점 수 연산 = 370
14.2.1 부동 소수점 형 데이터 표현의 필요성 = 370
14.2.2 컴퓨터에서 부동소수점 수 처리의 어려운 점 = 371
14.2.3 부동소수점 수 체계 표준 = 372
14.3 IA-32 FPU 내에서 데이터 표현 형식 = 372
14.3.1 데이터 형식 = 373
14.4 부동소수점 수 데이터의 초기화 선언 = 377
14.4.1 FPU 레지스터 스택의 구조 = 378
14.5 부동소수점 수 명령어 세트 = 381
14.6 FPU 명령어 형식 = 382
14.7 데이터 전송 명령 = 384
14.7.1 Load 명령어 = 385
14.7.2 저장(Store) 명령어 = 388
14.7.3 FIST/FISTP = 389
14.7.4 Register Exchange Instruction = 392
14.7.5 상수 값을 load하는 명령어 = 393
14.8 부동소수점 형 산술 명령어 = 396
14.8.1 덧셈 명령어 = 396
14.8.2 뺄셈 명령어 = 399
14.8.3 곱셈 명령어 = 403
14.8.4 나눗셈 = 405
14.9 그 외의 산술 명령어 = 411
14.10 비교와 제어 명령어 = 413
연습 문제 = 417
부록
부록 A = 420
부록 B = 425
부록 C : IA-32 프로세서 명령어 = 437
부록 D : DOS 인터럽트 21 = 485
부록 E : 아스키 코드 = 501