목차
제1장 첫째 프로그램의 작성
1.1 첫째 어셈블리 프로그램 = 20
1.2 첫째 프로그램의 실행 = 23
1.3 .COM 화일 만들기 = 24
1.3.1 프로그램 세그먼트 프리픽스(Program Segment Prefix:PSP) = 26
1.3.2 .COM 화일의 데이터 영역 = 28
1.3.3 .COM 화일의 프로시저(Procedure) = 30
1.3.4 프로그램의 종료 = 32
1.3.5 .COM 화일 내에서 여러 개의 프로시저를 사용하려면 = 33
1.3.6 코드 세그먼트의 종료 = 34
1.4 .EXE 화일과 .COM 화일의 비교 = 37
1.4.1 재배치 방법 = 38
1.4.2 .EXE 화일의 골격 = 39
1.4.3 .EXE 화일의 스택 = 41
1.4.4 AT 명령과 .COM 화일 = 44
1.5 Program Segment Prefix(PSP)의 구체적인 내용 = 48
1.5.1 디스크 전송 영역 = 53
1.5.2 .COM 화일 내의 코드 = 56
제2장 키보드를 다루는 방법
2.1 키보드 입력 = 58
2.1.1 INT 21H 서비스1: 반향(Echo)이 있는 한 문자 입력 = 58
2.1.2 SMALL.COM: 소문자로 변환 = 59
2.1.3 INT 21H의 서비스6: 기다리지 않고 키를 읽는다 = 62
2.1.4 REPEATER.COM: 입력한 내용 반복 = 62
2.1.5 INT 21H의 서비스7: 기다렸다가 키를 읽는다 = 63
2.1.6 HOLD.COM: 패스워드가 입력될 때까지 기다린다 = 64
2.1.7 INT 21H의 서비스8: 반향하지 않고 키를 읽는다 = 65
2.1.8 INT 21H의 서비스 0AH: 문자열 입력 = 65
2.2 문자열 명령 = 67
2.2.1 MOVS, MOVSB, MOVSW와 REP = 67
2.2.2 CMPS, CMPSB, CMPSW, REPE, REPNE = 70
2.2.3 SCAS, SCASB, SCASW = 72
2.2.4 LODS와 STOS = 75
2.2.5 INT 21H의 서비스 0BH: 키보드 버퍼를 조사한다 = 76
2.2.6 INT 21H의 서비스 0CH: 키보드 버퍼의 내용을 삭제하고 서비스를 수행한다 = 77
2.3 BIOS 인터럽트 = 78
2.4 BIOS INT 16H = 78
2.4.1 키보드 스캔 코드 = 79
2.4.2 확장된 ASCII 코드 = 80
2.4.3 INT 16H 서비스0: 키를 읽는다 = 80
2.4.4 INT 16H의 서비스1: 키보드를 검사하고 읽는다 = 80
2.4.5 INT 16H의 서비스2: 상태 바이트(StatusByte)를 읽는다 = 80
2.5 키보드 버퍼의 내부 = 82
2.5.1 원형 버퍼 = 84
2.6 키보드 인터럽트의 사용법 = 86
2.6.1 READEM.COM: 키보드로부터 직접 키를 읽는다 = 86
제3장 화면 조작
3.1 BIOS 화면 조작 서비스 = 94
3.1.1 서비스 2와 서비스3- 커서 위치의 지정과 읽기 = 94
3.1.2 화면 페이지 번호 = 95
3.1.3 화면 속성 = 96
3.1.4 화면 버퍼와 속성 바이트 = 98
3.1.5 PRINT_IT.COM: 가능한 모든 문자 출력 = 101
3.1.6 서비스 0EH- Teletype Write = 107
3.2 그래픽 = 108
3.2.1 INT 10H의 서비스0- 비디오 모드의 지정 = 108
3.2.2 흑백과 컬러 비교 = 110
3.2.3 팔레트 = 111
3.2.4 CGA 배경색 = 113
3.2.5 고해상도 CGA 모드 = 115
3.2.6 서비스 0초: 점을 찍는다 = 115
3.3 EGA = 117
3.3.1 서비스 10H의 함수(Function)들 = 118
3.4 VGA = 120
3.4.1 CGA에서 EGA/VGA까지 = 120
3.4.2 VGA의 DAC 레지스터 사용법 = 122
3.4.3 VGA의 16 컬러 모드 = 123
3.4.4 VGA-Only 256-컬러 모드 = 124
3.5 메모리에 직접 그래픽 이미지를 출력 = 128
3.6 CGA 모드에서 버퍼로 출력 = 128
3.6.1 CGA_PIXEL.COM- 직접 CGA 버퍼를 사용 = 129
3.7 EGA/VGA 버퍼에 출력하기 = 137
3.7.1 EGA와 VGA의 비트 평면 = 137
3.7.2 EGA_PIXEL.COM- 직접 EGA 버퍼를 사용 = 138
제4장 화일로부터 최상의 것 얻기
4.1 화일 제어 블록 = 154
4.2 화일 핸들 = 155
4.3 앤 화일 핸들 서비스 = 156
4.3.1 ROBOUT.COM의 화일 삭제 = 158
4.3.2 화일 에러 조사 = 161
4.3.3 DOS 에러 코드 = 162
4.4 BACK.COM: 화일을 복사 = 164
4.4.1 두 번째 화일명 = 166
4.4.2 FILE two로 데이터 출력 = 173
4.5 화일의 내부 = 179
4.5.1 화일 레코드 = 179
4.5.2 화일로부터의 데이터 검색 = 182
4.5.3 입·출력 포인터 = 182
4.5.4 입·출력 포인터의 사용 = 185
4.6 PHONE.ASM-데이터 베이스 프로그램 = 186
4.6.1 입·출력 포인터 지정 = 192
제5장 마우스의 사용
5.1 인터럽트 33H = 198
5.2 마우스에서 시작하기 = 199
5.3 마우스의 초기화 = 200
5.4 마우스 커서의 디스플레이 = 201
5.5 마우스 정보 얻기 = 202
5.6 마우스 큐 읽기 = 204
5.7 마우스 커서 다루기 = 207
5.8 영문/숫자 마우스 커서 = 209
제6장 디스크 사용
6.1 디스크 드라이브 = 214
6.1.1 디스크의 섹터 = 215
6.1.2 부트 레코드의 작동 = 215
6.1.3 FAT(File Allocation Table)의 작업 = 217
6.1.4 디스크상의 디렉토리 = 222
6.1.5 논리 섹터와 트랙 = 225
6.2 하드 디스크와 파티션(Partitions) = 226
6.2.1 DOSCHECK.COM: DOS의 부팅 여부 조사 = 228
6.3 서브디렉토리의 작업 방식 = 231
6.4 BIOS 디스크 지원 = 235
6.4.1 INT 13H의 서비스1: 마지막 조작의 상태 읽기 = 235
6.5 DOS 서비스 = 240
제7장 팝업 프로그램 작성
7.1 램상주 코드의 작성 = 247
7.2 인터럽트의 처리 = 249
7.2.1 인터럽트 벡터 가로채기 = 250
7.2.2 INT 21H의 인터럽트 벡터 서비스의 얻기/세트 = 252
7.2.3 원래의 인터럽트 벡터 얻기 = 253
7.3 인터럽트 벡터의 리셋 = 255
7.4 코드를 램상주로 만들기 = 256
7.5 인터럽트를 처리하는 프로그램의 작성 = 259
7.5.1 원래의 인터럽트 호출 = 261
7.5.2 간접 호출과 DD-LABEL 의사 명령 = 262
7.6 램상주 셀의 사용 = 266
7.6.1 프로그래머가 할 수 없는 일 = 267
7.6.2 프로그래머가 할 수 있는 일 = 268
7.7 키보드 인터럽트 가로채기 = 271
7.7.1 키를 가로채는 .COM 화일 셀 = 272
7.7.2 SWITCH.ASM: 램상주 핫키 프로그램 = 275
제8장 신속한 계산
8.1 부호 있는 수의 처리 = 280
8.1.1 부호 비트 = 281
8.1.2 부호 있는 수 만들기 = 281
8.1.3 2의 보수 = 282
8.1.4 NOT와 NEG 명령 = 284
8.1.5 부호를 갖는 수의 곱셈-IMUL = 288
8.1.6 캐리가 있는 덧셈 = 291
8.1.7 SBB 명령 = 294
8.1.8 큰 수의 곱셈 = 295
8.1.9 큰 수의 나눗셈 = 297
8.1.10 나눗셈 예의 계산 = 299
8.1.11 나눗셈 코드 작성 = 302
8.1.12 DX:AX와 BX:CX의 비교 = 304
8.2 비트 단위의 조작 = 307
8.2.1 SHR과 SHL = 307
8.2.2 SAR과 SAL = 309
8.2.3 로테이트: RCL, RCR, ROL, ROR = 310
8.2.4 캐리를 통한 로테이트 = 312
8.3 진법 변환 = 315
제9장 매크로와 진보된 의사 명령
9.1 테스트용 메시지의 출려 = 324
9.1.1 테스트용 메시지의 직접 출력 = 324
9.1.2 서브루틴 = 326
9.2 링크 = 328
9.2.1 링크된 서브루틴 = 332
9.2.2 FILE 2에서 데이터를 사용하는 방법 = 333
9.3 Group의 사용법 = 335
9.3.1 GROUP과 다른 세그먼트 = 339
9.4 라이브러리 = 340
9.4.1 라이브러리 명령어 = 342
9.5 매크로 작업 = 343
9.5.1 파라미터를 매크로에 전달하기 = 351
9.5.2 매크로에서 %와 &의 사용 = 352
9.5.3 매크로에서의 LOCAL 의사 명령 = 355
9.5.4 매크로 라이브러리 = 356
9.5.5 EXITM 의사 명령 = 357
9.5.6 IRP와 IRPC = 357
9.5.7 REPT = 358
9.5.8 매크로 의사 명령의 사용 예 = 358
9.5.9 PURGE = 360
9.5.10 자체 재정의 매크로의 사용 = 361
제10장 BASIC FORTRAN, C, Pascal과의 링크
10.1 호출 규정의 처리 = 366
10.2 Pascal에 링크하는 예 = 369
10.2.1 BP와 스택 프레임의 사용 = 371
10.2.2 함수와 서브루틴 = 373
10.2.3 함수로부터의 값 반환 = 374
10.2.4 C에서의 큰 수 반환 = 375
10.2.5 BASIC, FORTRAN, Pascal에서의 큰 값 반환 = 375
10.2.6 예제에서의 데이터 반환 = 376
10.3 BASIC-어셈블리 인터페이스 = 379
10.3.1 BASIC에서 파라미터 전달 = 381
10.3.2 BASIC에서의 축약 파라미터 전달 = 383
10.4 FORTRAN과 어셈블리의 인터페이스 = 385
10.4.1 FORTRAN에서의 파라미터 전달 = 388
10.4.2 FORTRAN에서의 축약 파라미터 전달 = 391
10.5 C와 어셈블리의 인터페이스 = 393
10.5.1 C에의 파라미터 전달 = 395
10.5.2 C에서의 축약 파라미터 전달 = 398
10.6 Pascal과 어셈블리의 인터페이스 = 399
10.6.1 Pascal에의 파라미터 전달 = 400
10.6.2 Pascal에의 축약 파라미터 전달 = 402
10.6.3 일반적인 고급 언어 = 403
제11장 80×87의 사용
11.1 연산용 코프로세서의 실행 = 407
11.2 80×87의 정수 덧셈 = 408
11.3 80×87의 정수 뺄셈 = 412
11.4 80×87의 정수 곱셈 및 나눗셈 = 414
11.5 80×87의 정수 포맷 = 417
11.6 80×87의 부동 소수점 수 포맷 = 419
11.6.1 정규화된 80×87 포맷 = 419
11.7 80×87 명령어 = 423
11.7.1 F2XMI: $2^X-1$ = 423
11.7.2 FABS: 절대값 = 424
11.7.3 FADD: 덧셈 = 424
11.7.4 FBLD: BCD 수 로드 = 425
11.7.5 FBSTP: BCD 수 저장 = 425
11.7.6 FCHS: 부호 변경 = 425
11.7.7 FCLEX: 예외 클리어 = 426
11.7.8 FCOM: 비교 = 426
11.7.9 RECORD/MASK 의사 명령 = 427
11.7.10 FDIV: 나눗셈 = 431
11.7.11 FIADD: 정수 덧셈 = 431
11.7.12 FICOM: 정수 비교 = 432
11.7.13 FIDIV: 정수 나눗셈 = 432
11.7.14 FILD: 정수를 로드 = 432
11.7.15 FIMUL: 정수 곱셈 = 433
11.7.16 FINIT: 80×87을 초기화 = 433
11.7.17 FIST: 정수를 저장 = 433
11.7.18 FISTP: 정수를 저장하고 스택을 팝 = 433
11.7.19 FISUB: 정수 뺄셈 = 434
11.7.20 FLD: 실수를 로드 = 434
11.7.21 FMUL: 곱셈 = 434
11.7.22 FNCLEX: 예외 클리어- 대기하지 않음 = 435
11.7.23 FNOP: 기능 없음 = 436
11.7.24 FNSTSW: 상태를 저장- 대기하지 않음 = 436
11.7.25 FPATAN: Arc Tangent = 436
11.7.26 FPREM: 부분적 나머지 = 437
11.7.27 FPTAN: Tangent = 437
11.7.28 FSQRT: 제곱근 = 438
11.7.29 FST: 실수를 저장 = 438
11.7.30 FSTSW: 상태를 저장 = 438
11.7.31 FSUB: 뺄셈 = 439
11.7.32 FTST: 0을 테스트 = 439
11.7.33 FWAIT: 대기 = 440
11.7.34 FXAM: 조사 = 440
11.7.35 FXCH: 레지스터 교환 = 441
11.7.36 FXTRACT: 지수와 유효 숫자 추출 = 442
11.7.37 FYL2X: Y·LOG2X = 442
11.8 80×87의 에러 및 에러 조사 = 443
11.8.2 에러 조사의 실행 = 445
제12장 마이크로소프트 윈도우즈의 사용
12.1 윈도우 메시지 = 456
12.2 WinMain- 주윈도우 함수 = 458
12.3 DecodeMessages- 실행되는 위치 = 470
12.4 윈도우 정의 화일 = 511
12.5 MYWINDOW.EXE의 작성 = 512
제13장 OS/2에 대하여
13.1 OS/2는 많이 다르지 않다 = 517
13.2 80×87 = 520
13.2.1 세그먼트 선택자(segment selector) = 520
13.2.2 하드웨어 게이트(Hardware Gate) = 521
13.2.3 보호 링(Security Ring) = 522
13.3 멀티 태스킹의 실행 방법 = 523
13.3.1 프로그램 간의 통신 = 523
13.4 OS/2 프로그램 작성 = 525
13.4.1 동적 링크(Dynamic Linking) = 526
13.5 DosExit가 있는 OS/2의 EXE 화일 셀 = 527
13.6 OS/2 출력(Vio와 DosWrite) = 532
13.6.1 DosWrite 서비스 = 532
13.6.2 VioPopUp- OS/2에서의 Pop-Up = 542
13.7 TAKE5.EXE- OS/2 TSR = 543
제14장 OS/2의 Presentation Manager
14.1 Presentation Manager에 대하여 = 552
14.1.1 OS/2와 마우스 = 552
14.1.2 Presentation Manager 프로그램의 작성 = 553
14.1.3 Presentation Manager의 상업성에 대한 경악 = 553
14.2 Presentation Manager의 시작 = 555
14.3 윈도우 함수 = 587
14.3.1 OS/2의 재진입 코드(Reentrant Code) = 588
제15장 Presentation Manager의 실제
15.1 Gpi 함수 = 602
15.2 GpiCharStringAt = 603
15.3 GpiSetColor = 616
15.4 Presentation Manager에서 키 읽기 = 626
15.5 Presentation Manager의 그래픽 = 639
15.5.1 GpiPolyLine = 652
15.6 윈도우 크기 변경 = 660
부록
부록A BIOS와 DOS = 671
부록B OS/2 = 731
부록C 장치 드라이버와 IOCTL = 745