1. data-addressing mode CHAPTER 6 Addressing Modes 2. use of data-address mode to form assembly language statements 3. op of program memory address mode 4. use of program memory address mode to form assembly language statements 5. appropriate address mode 6. stack operation - 1 -
Data-Addressing Modes MOV 데스티네이션, 소스 MOV AX, BX Register Addressing: MOV AX, BX MOV ECX, EDX 그림 6-1 MOV AX,BX 명령 Immediate Addressing: MOV AL, 22H copies the byte-sized 22H into register AL - 2 -
Data-Addressing Modes Direct Addressing: MOV CX, LIST copies the word contents of memory location LIST to register CX Register Indirect Addressing: MOV AX, [BX] copies the word contents of memory location (BX)+(DS)*10H to register AX Base-Plus-Index Addressing MOV [BX+DI], CL - 3 -
Data-Addressing Modes Register Relative Address MOV AX, [BX+4] MOV AX, ARRAY[BX] Base Relative-Plus Index Address MOV AX, ARRAY[BX+DI] MOV AX, [BX+DI+4] Scaled-Index Address MOV AL, [EAX+4*EBX] - 4 -
방식명령소스어드레스발생 BX 데스티네이션 AX 레지스터 MOV AX, BX 레지스터레지스터 3AH BL 즉치 MOV BL, 3AH 데이터레지스터 AX 11234H (Disp) + (DS x 10H) 직접 MOV 1234H, AX 레지스터메모리 1234H + 10000H AX 10300H 레지스터간접 MOV [BX], AX 레지스터 (BX) + (DS x 10H) 0300H + 10000H 메모리 AX 10500H 베이스플러스인덱스 MOV [BX+ SI], AX 레지스터 (BX) + (SI) + (DS x10h) 0300H + 0200H + 10000H 메모리 AX 10304H (BX) + 4 + (DS x 10H) 레지스터렐러티브 MOV [BX+ 4], AX 레지스터메모리 0300H + 4 + 10000H AX 11500H 베이스- 렐러티브- 플러스- 인덱스 MOV ARRAY[BX+ SI], AX 레지스터 (BX) + ARRAY + (SI) + (DS x 10H) 0300H + 1000H + 0200H + 10000H 메모리 (BX = 0300H, SI = 200H, ARRAY = 1000H, DS = 1000H) - 5 - 그림 6-2 데이터어드레싱모드
Register Addressing Never mix different sizes registers MOV AX, AL MOV BL, BX CS may not be changed by MOV - 6 -
AX BX CX 76AF 1234 1234 DX SP - 7 - 그림 6-3 MOV BX, CX 의실행
표 6-1 레지스터어드레싱의예 어셈블리언어 동 작 MOV AL,BL MOV CH,CL MOV AX,CX MOV SP,BP MOV DS,AX MOV DI,SI MOV BX,ES MOV ES,DS MOV BL,BX MOV CS,AX BL 을 AL 로복사한다. CL 을 CH 로복사한다. CX 를 AX 로복사한다. BP 를 SP 로복사한다. AX 를 DS 로복사한다. SI 를 DI 로복사한다. ES 를 BX 로복사한다. 허용되지않는표현 ( 세그먼트에서세그먼트 ) 허용되지않는표현 ( 레지스터의크기가틀림 ) 허용되지않는표현 ( 코드세그먼트는데스티 네이션레지스터로쓸수없다.) - 8 -
Immediate Addressing MOV AX, #3456H ( MOV AX, 3456H => ASM,TASM,MASM) MOV AL, 0FH MOV AL, 10H MOV BH, A MOV CL, 11001110B MOV CL, 11001110Y ; binary data MOV EAX, 100Y - 9 -
Immediate Addressing AX BX 레지스터배열 6291H 3456H B85634 프로그램 MOV AX, 3456H 그림 6-4 MOV AX,3456H 의실행 - 10 -
표 6-2 MOV 명령을이용한즉치어드레싱의예 어셈블리언어 동 작 MOV BL,44 MOV AX,44H MOV SI,0 MOV CH,100 MOV AL,'A' MOV AX,'AB' MOV CL,11001110B 십진수 44(2CH) 를 BL 에복사한다. 16 진수 44 를 AX 에넣는다. 0000H 를 SI 에넣는다. 100(64H) 를 CH 에넣는다. ASCII 문자 A(41H) 를 AL 에넣는다. ASCII 문자 BA*(4241H) 를 AX 에넣는다. 이진수 11001110 를 CL 에넣는다. * 주의 : ASCII 문자는저장될때 BA 형태로저장된다. 따라서워드 - 11 - 크인연속된두개의 ASCII 문자를사용할때는주의하여야한다. 기
Direct Data Addressing Direct Addressing - only allowed between accumulator and memory location within data segment - always 3 byte instruction - MOV AL, DATA copies the byte-sized content of the memory location DATA into AL DATA: a symbolic memory location - MOV AL, [1234H] not allowed by all assembler - 12 -
Direct Addressing 메모리 AX AH AL 12 12 12 11234H BX BH BL CX CH CL 그림 6-5 MOV AL,[1234H] 의실행 - 13 -
표 6-3 AX, AL 을이용할때가능한 4 가지직접어드레싱명령어셈블리언어동작 MOV AL,NUMBER 데이터세그먼트내에서 NUMBER 가지정하는 바이트를 AL 에복사한다. MOV AX,COW 데이터세그먼트내에서 COW 가지정하는워드 를 AX 에복사한다. MOV NEWS,AL AL 을데이터세그먼트내에서 NEWS 가지정하 는영역에복사한다. MOV THERE,AX AX 를데이터세그먼트에서 THERE 가지정하 는영역에복사한다. - 14 -
Displacement Addressing Displacement Addressing 4 byte instruction MOV CL, [2000H] within the memory device 예제 6-1 0000 A0 34 12 MOV AL,[1234H] 0003 8A 0E 00 20 MOV CL,[2000H] AX AH AL BX BH BL 메모리 CX CH CL 8A 8A 8A 12000H 그림 6-6 MOV CL,[2000H] 의실행 (DS=1000H) - 15 -
표 6-4 변위를이용한직접데이터어드레싱의예어셈블리언어동작 MOV CH,DOG 데이터세그먼트내에서 DOG 이지정하는내용을레지스터 CH 에복사한다. DOG 의실제옵셋어드레스는어셈블러에 의해서계산된다. MOV CH,[1000H] 데이터세그먼트내에서 1000H 에위치한내용을레지스터 CH 에복사한다. MOV ES,DATA6 데이터세그먼트내에서 DATA6 이지정하는내용을 ES 에복 사한다. MOV DATA,BP BP 를데이터세그먼트내의메모리영역 DATA 에복사한다. MOV NUMBER,SP SP 를데이터세그먼트내의메모리영역 NUMBER 에복사 한다. - 16 -
Register Indirect Addressing Register Indirect Addressing addressing by BP, BX, DI, SI MOV AX, [BX] BX=1000H, DS=0100H AH <= (2001H), AL <= (2000H) BX, DI, SI => address data in the data segment BP => address data in the stack segment the contents of 32bit register must never exceed 0000 FFFFH in the real mode - 17 -
MOV AL, [DI] MOV [DI], 10H ===> byte or word? MOV BYTE PTR [DI], 10H 메모리 AX BX 레지스터배열 6A42 1000 6A42 + 01000H (DS x 10H) 6A 42 02001H 02000H - 18 - 그림 6-7 MOV AX,[BX] 의실행 (DS=0100H)
표 6-5 레지스터간접어드레싱을이용한명령의예어셈블리언어동작 MOV CX,[BX] BX 에의해지정된데이터세그먼트내의메모리영역에저장된데이터를워드단위로레지스터 CX 에넣는다. MOV [BP],DL 레지스터 DL 의내용을 BP 에의해서지정된스택세그먼트내의메모리영역에저장한다. MOV [DI],BH 레지스터 BH 의내용을 DI 에의해서지정된데이터세그먼트내의메모리영역에저장한다. MOV [DI],[BX] 메모리간의데이터이동은문자열명령을제외하고는허용이되지않으므로이명령은잘못된것이다. MOV DI,[DI] 간접어드레싱에사용된레지스터는그명령에의해서바뀔수없으므로이명령은사용될수없다. - 19 -
Register Indirect Addressing 메모리 TABLE + 49 TABLE + 48 BX TABLE TABLE + 3 TABLE + 2 TABLE + 1 TABLE 그림 6-8 BX 레지스터로간접적으로지정된 50 바이트의데이터배열 TABLE - 20 -
0000 CODE SEGMENT ASSUME CS:CODE, DS:CODE ORG 0H 0000 BB 0050 R START: MOV BX, OFFSET TABLE ; 어드레스 TABLE 0003 B9 0020 MOV CX, 50H ;50H회반복 0006 AGAIN: 0006 8A C1 MOV AL, CL 0008 88 07 MOV [BX], AL ;TABLE에저장 000A 43 INC BX ; 다음어드레스 000B E2 F9 LOOP AGAIN ORG 50H 0050 TABLE: 0050 CODE ENDS END START 실행결과 0050 50 4F 4E 4D 4C 4B 4A 49-48 47 46 45 44 43 42 41 0060 40 3F 3E 3D 3C 3B 3A 39-38 37 36 35 34 33 32 31 0070 30 2F 2E 2D 2C 2B 2A 29-28 27 26 25 24 23 22 21 0080 20 1F 1E 1D 1C 1B 1A 19-18 17 16 15 14 13 12 11 0090 10 0F 0E 0D 0C 0B 0A 09-08 07 06 05 04 03 02 01-21 -
Register Indirect Addressing directive: OFFSET MOV BX, DATA MOV BX, OFFSET DATA copies the address of DATA to BX LOOP: decrement CX CX=!0 => jump to AGAIN CX=0 => no jump - 22 -
Base-Plus-Index Addressing Locating Data with Base-Plus-Index BP => SS*10H+BP MOV DX, [BX+DI] BX=1000H, DI=0010H, DS=0100H => 2010H DL <== (2010H),DH <== (2011H) MOV DX, [BX][DI]:Intel ASM,CPM86-23 -
메모리 레지스터배열 AX BX 1000 CX DX AB03 AB03 AB 03 02011H 02010H SP BP SI DI 0010 0010H + 1000H + 1000H DS x 10H - 24 - 그림 6-9 MOV DX,[BX+DI] 를이용한 베이스 - 플러스 - 인덱스모드의예
표 6-6 베이스-플러스-인덱스어드레싱명령어의예어셈블리언어동작 MOV CX,[BX+DI] BX, DI 를더한값이지정하는데이터세그먼트내영역에있는워드데이터를레지스터 CX 에복사한다. MOV CH, [BP+SI] BP, SI 를더한값이지정하는스택세그먼트내영역에잇는바이트데이터를레지스터 CH 에복사한다. MOV [BX+SI],SP SP 의내용이 BX, SI 합이지정한데이터세그먼트내영역에저장된다. MOV [BP+DI],CX CX 의내용이 BP, DI 합이지정한스택세그먼트내영역에저장된다. - 25 -