1 / 61

어셈블리어 (1) - 8086 매크로 어셈블리어

어셈블리어 (1) - 8086 매크로 어셈블리어. 시스템 프로그래밍 - Lecture #3. 프로그래밍언어 계층. 프로그래밍 언어 인간과 컴퓨터 사이에서 의사 전달을 하는 수단 컴퓨터 프로그램 작성 프로그래밍 언어 계층 (Fig.4-1 참조 ) 고급 언어 (High-level Language) 인간이 사용하는 자연어에 가까운 프로그래밍 언어 BASIC, ADA, FORTRAN, PASCAL, C++, JAVA 등 중급 언어 (Middle-level Language)

prisca
Télécharger la présentation

어셈블리어 (1) - 8086 매크로 어셈블리어

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 어셈블리어 (1)- 8086 매크로 어셈블리어 시스템 프로그래밍 - Lecture #3 신라대학교 컴퓨터공학과 시스템프로그래밍

  2. 프로그래밍언어 계층 • 프로그래밍 언어 • 인간과 컴퓨터 사이에서 의사 전달을 하는 수단 • 컴퓨터 프로그램 작성 • 프로그래밍 언어 계층(Fig.4-1 참조) • 고급 언어(High-level Language) • 인간이 사용하는 자연어에 가까운 프로그래밍 언어 • BASIC, ADA, FORTRAN, PASCAL, C++, JAVA 등 • 중급 언어(Middle-level Language) • 고급 언어와 저급 언어 사이의 프로그래밍 언어 • C, FORTH 등 • 저급 언어(Low-level Language) • 기계에 종속된 언어 • 기계어, 어셈블리어 등 신라대학교 컴퓨터공학과 시스템프로그래밍

  3. d.o a.c b.c d.c a.o b.o libs t.exe t.exe 소스 파일 - 소스 코드 Compiler linker loader 목적 파일 - 목적 코드 MainMemory 실행 파일(Loadable File) - Machine Code / Binary Code CPU 고급언어 & 중급언어 (1) • 고급언어로 작성된 프로그램은 기계어 코드로 번역되어 실행된다 신라대학교 컴퓨터공학과 시스템프로그래밍

  4. 고급언어 & 중급언어 (2) • 고급언어 프로그램의 번역 • 컴파일러(Compiler) • 원시 코드를 한꺼번에 번역하여 이진 코드를 생성하고 실행 • 컴파일 시간이 많이 요구 • 한번의 컴파일 과정을 통해 반복적으로 프로그램 실행이 가능  반복 실행 시에 실행 시간을 단축 • 인터프리터(Interpreter) • 원시 코드를 한줄씩 번역하면서 실행 • 번역과 실행을 동시에 실행 • 번역 시간이 짧다 • 반복 실행 시에 매번 번역하여 실행함에 따라 실행 시간이 길어진다 신라대학교 컴퓨터공학과 시스템프로그래밍

  5. 저급언어 • 어셈블리어(Assembly Language) • 2진수 형태의 기계어를 기호형식의 명령어로 표현한 언어 • Machine Code  Mnemonic Code e.g) in 8086 Processor 100010  MOV 000000  ADD 001010  SUB • 기계어 코드와 어셈블리어 코드 사이에는 1:1 대응 관계 • 어셈블러(Assembler) • 어셈블리어 프로그램을 기계어 명령어로 번역 • 컴파일러보다는 단순 신라대학교 컴퓨터공학과 시스템프로그래밍

  6. 고급언어와 저급언어에서의 번역 고급언어 사용 저급언어 사용 (프로그래밍) (프로그래밍) 자연어 고급 언어 원시 코드 원시 코드 :1 :1 저급 언어 어셈블러 컴파일러 목적 코드 목적 코드 :n :1 기계어 신라대학교 컴퓨터공학과 시스템프로그래밍

  7. 프로그래밍 언어의 선택 • 프로그래밍을 위한 언어 선택 • 작성하려는 응용의 특성을 적절하게 고려하여 선택 • 저급 언어 • 기계에 종속  호환성이 떨어짐 • 코딩이 어려움 • 최적화된 코드 작성이 가능  실행 시간이 짧아짐 • 시스템 프로그램 작성에 이용 • 고급 언어 • 소스수준의 호환성 • 배우기 쉽고 코딩이 용이 • 최적화된 기계어 코드로 번역이 어려움  실행 시간이 길어짐 신라대학교 컴퓨터공학과 시스템프로그래밍

  8. 8086 어셈블리어 개요(1) • 8086 어셈블리 언어의 문장 • 명령어(Instructions) • 니모닉 코드(Mnemonic Code) – 기계어 코드로 번역되어 CPU에서 실행되는 명령어 • 어셈블리 프로그램의 본체를 구성 • 지시어(Directives) • 의사 코드(Pseudo Code) – 어셈블러에게 프로그램과 관련된 정보를 제공하거나 특정 기능을 수행토록 지시하는 코드 • 어셈블리 프로그램의 틀을 구성 신라대학교 컴퓨터공학과 시스템프로그래밍

  9. 8086 어셈블리어 개요(2) • 어셈블리 문장의 구성 신라대학교 컴퓨터공학과 시스템프로그래밍

  10. 8086 어셈블리어 개요(3) • 명령어 : 종류에 따라서 1 ~ 6 Byte 신라대학교 컴퓨터공학과 시스템프로그래밍

  11. 8086 어셈블리어 개요(4) • 명령어(instruction)의 형식 • 연산항의 개수로 3가지로 분류 • 0 개의 연산항 • e.g) CLC • 1개의 연산항 • e.g) DEC CX • 2개의 연산항 • e.g) MOV AX, BX 신라대학교 컴퓨터공학과 시스템프로그래밍

  12. 2-번지 명령어 예 MOV AL,BL MOV AX,BX 16 8 7 0 16 8 7 0 1 2 3 4 1 2 3 4 출발항 실 행 전 BX BX BH BL BH BL 0 0 0 0 0 0 0 0 목적항 AX AX AH AL AH AL 1 2 3 4 1 2 3 4 BX 실 행 후 BX 출발항 BH BL BH BL 1 2 3 4 0 0 3 4 AX AX 목적항 AH AL AH AL 신라대학교 컴퓨터공학과 시스템프로그래밍

  13. 8086 어셈블리어 개요(5) • 8086 명령어 종류 • 데이터 전송 명령 – MOV • 산술연산 명령 – ADD, ADC, SUB, SBB, MUL, DIV, INC, DEC • 논리연산 명령 – AND, OR, XOR, NOT, NEG • 비트연산(시프트) 명령 – SHL, SHR, SAR, ROL, ROR, RCL, RCR • 비교 분기 명령 – CMP, TEST, JMP, JE, JNE, JAE, LOOP, LOOPE, LOOPNE, CALL, RET • 스트링 명령 – LODSB, STOSB, MOVSB, MOVSW • I/O 명령 – IN, OUT • 인터럽트 명령 – INT, IRET • CPU 제어 명령 – WAIT, ESC, LOCK, HLT, NOP • 그외 명령 – PUSH, POP, XCHG, XLAT 신라대학교 컴퓨터공학과 시스템프로그래밍

  14. 8086 어셈블리어 개요(6) • 주소 지정 방식(Addressing Mode) • 명령어의 연산항은 명령어 수행에 필요한 데이터를 표시하거나 데이터가 저장된 주소를 지정 • 데이터를 표시하는 주소 모드 • 상수값 지정(Immedimate data addressing mode) • 직접 주소 지정(Direct addressing mode) • 간접 주소 지정(Indirect addressing mode) • 레지스터 간접주소 지정 • 베이스 주소 지정 • 인덱스 주소 지정 • 베이스 인덱스 주소 지정 신라대학교 컴퓨터공학과 시스템프로그래밍

  15. 어셈블리 프로그램의 기본구성 MAIN SEGMENT ASSUME CS:MAIN 프로그램 블록 MAIN ENDS END 신라대학교 컴퓨터공학과 시스템프로그래밍

  16. 지시어 프로그램 본체: 어셈블리 명령어 지시어 문자 A를출력하는프로그램 1 MAIN SEGMENT 2 ASSUME CS : MAIN 3 MOV DL, ‘A’ 4 MOV AH, 2 5 INT 21H 6 MOV AH, 4CH 7 INT 21H 8 MAIN ENDS 9 END 신라대학교 컴퓨터공학과 시스템프로그래밍

  17. 지시어 (directives) (1) • 출력 제어 지시어 listing control directives • PAGE [length] [, width] • 디폴트: 50, 80 • “PAGE” 만 쓰면 다음 페이지로 넘어감 • TITLE text (60자까지), SUBTTL text (60자까지) • 예) PAGE 60, 130 • TITLE HEX TO BINARY CONVERSION • 프로시저 지시어 PROC directive • proc-name PROC [type] • 코드 세그먼트 내에서 서브루틴 구현 • 명령 CALL에 의해 진입. RET에 의해 돌아감 • type: NEAR(디폴트) | FAR • 지시어 ENDP로 끝남 신라대학교 컴퓨터공학과 시스템프로그래밍

  18. 지시어 (directives) (2) • 세그먼트 지시어 segment directive • seg-name SEGMENT [align combine 'class'] • 세그먼트의 시작 표시 • 정렬 유형(align type) : 시작 경계 • PARA: 패러그래프 경계(디폴트) • BYTE | WORD | DWORD | PARA | PAGE(100H) • 결합 유형(combine type) : 어셈블리 후 링크시 다른 세그먼트와의 결합 여부 • NONE(디폴트) | PUBLIC | STACK | COMMON | AT • 클래스 유형(class type) : 링크할 때 같은 클래스의 세그먼트끼리 합침 • code | stack | data • 지시어 ENDS로 끝남 신라대학교 컴퓨터공학과 시스템프로그래밍

  19. 지시어 (directives) (3) • 예) 세그먼트와 프로시져 Codename SEGMENT PARA 'code' subroutinename PROC FAR : subroutinename ENDP Codename ENDS 신라대학교 컴퓨터공학과 시스템프로그래밍

  20. 지시어 (directives) (4) • 기타 지시어 • ASSUME seg-reg:seg-name [, ...] • 세그먼트 이름과 세그먼트 레지스터를 연계시키도록 지시함 • seg-reg : CS | DS | ES | SS | FS | GS • seg-name : segment names | NOTHING | GROUPS • 예) ASSUME CS:CODESG, DS:DATASG, SS:STACK • END [proc name] • 전체 프로그램을 종료할 때 사용 • name GROUP seg-name [, segname] • 같은 유형의 여러 세그먼트를 하나의 이름하에 한 세그먼트에 위치하게 함 (통상 데이타) 신라대학교 컴퓨터공학과 시스템프로그래밍

  21. 지시어 (directives) (5) • 단순화된 세그먼트 지시어 • .CODE [name] - 코드 세그먼트 정의 (모든 실행 코드) • .DATA - 데이타 세그먼트 정의 (near data 용) • .STACK [size] - 스택을 정의 / 디폴트 값은 1KB • .MODEL memory-model • 디폴트 세그먼트, ASSUME 및 GROUP 문장을 생성 • memory models: (다음 쪽) TINY | SMALL | MEDIUM | COMPACT | LARGE | HUGE 신라대학교 컴퓨터공학과 시스템프로그래밍

  22. 지시어 (directives) (6) • Memory Model 신라대학교 컴퓨터공학과 시스템프로그래밍

  23. 지시어 (directives) (7) • 단순화된 세그먼트 지시어(계속) • .STARTUP : 세그먼트 레지스터를 초기화하는 명령 생성 • .EXIT : 프로그램을 마칠 때 • INT 21H function 4CH 명령 생성 • 예) .MODEL SMALL .STACK 100 .DATA [데이타 항목] .CODE [명령] END 신라대학교 컴퓨터공학과 시스템프로그래밍

  24. 지시어 (directives) (8) • 데이타 할당 지시어 data allocation directives • 데이타의 표현 • 문자열 : 작은 따옴표(' '), 따옴표(" ") 사용 character strings • 예) 'This converts ... ' "in 1950's ..." • 10진수 : 그냥 쓰거나 뒤에 D를 붙임 (MASM 6.0에서는 T도 사용) • 예) 578 혹은 578D • 16진수 : 처음 숫자가 A∼F일 때는 0을 붙임. 뒤에 H를 붙임 • 예) 3AH, 0C38DH • 2진수 : 뒤에 B를 붙임 (MASM 6.0에서는 Y도 사용) • 예) 00110010B • 실수 : 뒤에 R을 붙임 • DUP 연산자 : 반복된 데이타 표현 • 예) 10 DUP('K'), 2 DUP(?) 신라대학교 컴퓨터공학과 시스템프로그래밍

  25. 지시어 (directives) (9) • 데이타 할당 지시어 data allocation directives • ORG expression • 위치 카운터의 내용값을 바꿔줌. 예) ORG 0 • 프로그램의 시작 주소를 지정 • name EQU expression, name EQU <string> • 데이타 이름, 변수 등을 다른 이름이나 값으로 재정의함 • 주소 상수(constant)를 정의 • 예) FIVE EQU 5 SUM EQU TOTAL SUBJ EQU <'System Prog'> 신라대학교 컴퓨터공학과 시스템프로그래밍

  26. 지시어 (directives) (10) • 데이타 할당 지시어 data allocation directives • 데이타의 정의 • 데이터를 정의하거나 데이터 영역을 위한 메모리 확보를 위해 사용 • DB(Define Byte), BYTE • DW, WORD : 2 바이트 • DD, DWORD : 4 바이트(doubleword) • DF, FWORD : 6 바이트(farword) • DQ, QWORD : 8 바이트(quadword) • DT, TWORD : 10 바이트(tenbytes) • 데이타 정의 양식 • [name] directive (Dn) expression • [name] directive (Dn) repeat-count DUP(exp) 신라대학교 컴퓨터공학과 시스템프로그래밍

  27. 지시어 (directives) (11) • 데이타 할당 지시어 data allocation directives • 예) UNK DB ? ; 초기화되지 않은 항목 VALU BYTE 40 ; 초기화된 항목 SEQ DW 1000, 2000, 3000, ... A WORD 100 DUP(?) ; 초기화되지 않은 워드 100개 B BYTE 2 DUP(3 DUP(4)) ; ‘4’가 6 개 C DB 'Data definition' ; 문자열 신라대학교 컴퓨터공학과 시스템프로그래밍

  28. 지시어 (directives) (12) • 기타 연산자 • OFFSET operator • 해당 세그먼트로부터 레이블이나 변수의 거리를 반환 • 예) move bx,offset data_x ; bx points to data_x • SEG operator • 레이블이나 변수가 속한 세그먼트(의 주소)를 반환 • 예) push ds ; save DS, currently used segment mov ax,seg list ; set DS to segment of list mov ds,ax mov bx,offset list ; get the list’s offset … ; perform list processing pop ds ; restore DS 신라대학교 컴퓨터공학과 시스템프로그래밍

  29. 지시어 (directives) (13) • 기타 연산자(계속) • PTR operator • 피연산자의 크기를 명시 BYTE PTR, WORD PTR, DWORD PTR, … • 예) • dec [bx] 의 경우 bx가 가리키는 것이 바이트인지 워드인지 알 수 없을 수 있다 • dec word ptr [bx] 라고 하면 워드 타입의 데이터임을 명시 신라대학교 컴퓨터공학과 시스템프로그래밍

  30. low address byte0 67 word0 45 word1 byte1 41 byte2 20 high address 지시어 (directives) (14) • 기타 연산자(계속) • LABEL directive • 변수의 디폴트 타입을 재정의할(override) 때 사용 var_name label byte/word/dword/qword/tbyte • 예) • byte0 label byte • word0 dw 4567h • word1 label word • byte1 db 41h • byte2 db 20h • … • mov al,byte0 ; al  67h • mov bx,word1 ; bx  2041h 신라대학교 컴퓨터공학과 시스템프로그래밍

  31. 시스템 호출 (system call) • 시스템 호출 • 운영체제가 제공하는 서비스(기본 서비스 함수)을 사용하기 위한 방법 • e.g) 입출력을 위한 시스템 호출 • MS-DOS에서는 소프트웨어 인터럽트를 사용하여 시스템 호출을 제공 • 인터럽트 타입 21H • 예) 화면에 문자 ‘A’을 출력 MOV DL, ‘A’ ; 전달할 데이터를 DL 레지스터에 지정 MOV AH, 02H ; 서브커맨드(subcommand)를 AH 레지스터 지정 INT 21H ; 인터럽트 호출 • subcommand(or function number) • 01H : 키보드 문자 입력, 02H : 화면에서의 문자 출력 • 06H : 콘솔에서의 문자 입력, 09H : 화면에서의 문자열 출력 • 0AH : 콘솔에서의 문자열 입력 신라대학교 컴퓨터공학과 시스템프로그래밍

  32. 어셈블리 프로그램의 구조(1) • 어셈블리 프로그램의 구조 • 헤더부 • 페이지의 규격, 제목 등을 명시 • 예) PAGE 50, 120 신라대학교 컴퓨터공학과 시스템프로그래밍

  33. 어셈블리 프로그램의 구조(2) • 프로그램 실행의 종료를 위한 명령 • INT 21H • DOS 인터럽트 연산. AH 레지스터에 있는 function code가 수행할 액션을 지정 • function code 4CH • 프로그램 실행의 종료 요청. AL 레지스터에 리턴 코드 저장. "00"이면 정상적인 종료 • 일반적으로 MOV AH, 4CH ; request end MOV AL, retcode ; return code(optional) INT 21H ; exit to DOS • 정상적인 종료 • MOV AX, 4C00H 신라대학교 컴퓨터공학과 시스템프로그래밍

  34. 어셈블리 프로그램의 구조(3) • protected mode를 위한 초기화 • 80386 혹은 그 이상의 프로세서에 해당 • 세그먼트를 더블워드(DWORD)에 정렬(align) • 32 비트의 데이타 버스를 효율적으로 사용하여 메모리를 액세스함 • USE32 use type • 32-bit protected mode에 적합한 코드 생성 .386 segname SEGMENT DWORD USE32 • 데이타 세그먼트 레지스터의 초기화 MOV EAX,DATASG ; get address of data segment MOV DS,AX ; load 16-bit portion 신라대학교 컴퓨터공학과 시스템프로그래밍

  35. 어셈블리 프로그램의 구조(4) 예 1) skeleton of an .exe program {왼쪽의 번호는 참조용임. 실제는 사용하지 않음} 1 PAGE 60,132 2 TITLE P04ASM1 Skeleton of an .EXE Program 3 ;------------------------------------ 4 STACKSG SEGMENT PARA STACK 'Stack' 5 ... 6 STACKSG ENDS 7 ;------------------------------------ 8 DATASG SEGMENT PARA 'Data' 9 ... 10 DATASG ENDS (계속) 신라대학교 컴퓨터공학과 시스템프로그래밍

  36. 어셈블리 프로그램의 구조(5) 11 ;------------------------------------------ 12 CODESG SEGMENT PARA 'Code' 13 BEGIN PROC FAR 14 ASSUME SS:STACKSG,DS:DATASG,CS:CODESG 15 MOV AX,DATASG ;Get address of data segment 16 MOV DS,AX ;Store address in DS 17 ... 18 MOV AX,4C00H ;Request 19 INT 21H ;exit to DOS 20 BEGIN ENDP 21 CODESG ENDS 22 END BEGIN 신라대학교 컴퓨터공학과 시스템프로그래밍

  37. 어셈블리 프로그램의 구조(6) 예 2) TITLE P04ASM1 (EXE) Move and add operations ; .exe source program with conventional segments ;------------------------------------- STACKSG SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACKSG ENDS DATASG SEGMENT PARA 'Data' FLDA DW 250 FLDB DW 125 FLDC DW ? DATASG ENDS ; ----------------------------------- (계속) 신라대학교 컴퓨터공학과 시스템프로그래밍

  38. 어셈블리 프로그램의 구조(7) CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ASSUME SS:STACKSG,DS:DATASG,CS:CODESG MOV AX,DATASG ;Set address of DATASG MOV DS,AX ; in DS register MOV AX,FLDA ;Move 0250 to AX ADD AX,FLDB ;Add 0125 to AX MOV FLDC,AX ;Store sum in FLDC MOV AX,4C00H ;Exit to DOS INT 21H BEGIN ENDP ;End of procedure CODESG ENDS ;End of segment END BEGIN ;End of program 신라대학교 컴퓨터공학과 시스템프로그래밍

  39. 어셈블리 프로그램의 구조(8) 예 3) PAGE 60,132 TITLE P04ASM2 (EXE) Move and add operations ; .exe source program with simplified segment directives ; ----------------------------------- .MODEL SMALL .STACK 64 ;Define stack .DATA ;Define data FLDA DW 250 FLDB DW 125 FLDC DW ? ; ----------------------------------- (계속) 신라대학교 컴퓨터공학과 시스템프로그래밍

  40. 어셈블리 프로그램의 구조(9) .CODE ;Define code segment BEGIN PROC FAR MOV AX,@data ;Set address of DATASG MOV DS,AX ; in DS register MOV AX,FLDA ;Move 0250 to AX ADD AX,FLDB ;Add 0125 to AX MOV FLDC,AX ;Store sum in FLDC MOV AX,4C00H ;Exit to DOS INT 21H BEGIN ENDP ;End of procedure END BEGIN ;End of program 신라대학교 컴퓨터공학과 시스템프로그래밍

  41. 데이터 전송 명령 – MOV (1) • MOV 명령 • 레지스터 간에 또는 레지스터와 메모리간에 데이터를 전송할 때에 사용하는 명령어 • 예) MOV AH, 01H ; 레지스터에 상수값을 지정 MOV AX, BX ; 레지스터간에 데이터 전송 MOV AX, WORD PTR [BX] ; 메모리 데이터를 레지스터로 전송 MOV [BX], AL ; 레지스터 데이터를 메모리로 전송 신라대학교 컴퓨터공학과 시스템프로그래밍

  42. 데이터 전송 명령 – MOV (2) • MOV 명령 – 예제 #1 MAIN SEGMENT ASSUME CS:MAIN ; MOV DL, 41H MOV AH, 02H INT 21H MOV DL, ‘B’ MOV AH, 02H INT 21H ; MOV AH, 4CH INT 21H MAIN ENDS END 신라대학교 컴퓨터공학과 시스템프로그래밍

  43. 데이터를 코드 세그먼트 안에서 정의하여 사용하는 경우 데이터 전송 명령 – MOV (3) • MOV 명령 – 예제 #2 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; MOV AX, CS MOV DS, AX MOV DL, XXX MOV AH, 02H INT 21H MOV CX, YYY MOV DL, CH MOV AH, 02H INT 21H MOV DL, CL MOV AH, 02H INT 21H ; MOV AH, 4CH INT 21H ; XXX DB ‘X’ YYY DB 3456H ; MAIN ENDS END 신라대학교 컴퓨터공학과 시스템프로그래밍

  44. 데이터를 별도의 데이터 세그먼트 안에서 정의하여 사용하는 경우 데이터 전송 명령 – MOV (4) • MOV 명령 – 예제 #3 MAIN SEGMENT ASSUME CS:MAIN, DS:DATA ; MOV AX, DATA MOV DS, AX ; MOV BX, XXX MOV DL, BH MOV AH, 02H INT 21H MOV DL, BL MOV AH, 02H INT 21H ; MOV AH, 4CH INT 21H ; MAIN ENDS ; DATA SEGMENT XXX DB ‘AB’ MAIN ENDS END 신라대학교 컴퓨터공학과 시스템프로그래밍

  45. 레지스터를 이용한 간접 주소 지정 방식 데이터 전송 명령 – MOV (5) • MOV 명령 – 예제 #4 MAIN SEGMENT ASSUME CS:MAIN, DS:DATA ; MOV AX, DATA MOV DS, AX ; MOV BX, OFFSET XXX MOV DL, [BX] MOV AH, 02H INT 21H MOV DL, [BX+1] MOV AH, 02H INT 21H MOV DL, [BX+2] MOV AH, 02H INT 21H ; MOV AH, 4CH INT 21H ; MAIN ENDS ; DATA SEGMENT XXX DB ‘ABC’ MAIN ENDS END 신라대학교 컴퓨터공학과 시스템프로그래밍

  46. MOV WORD PTR [BX], ‘AB’ 데이터 전송 명령 – MOV (6) • MOV 명령 – 예제 #5 MAIN SEGMENT ASSUME CS:MAIN, DS:DATA ; MOV AX, DATA MOV DS, AX ; MOV BX, OFFSET XXX MOV AX, ‘AB’ MOV [BX], AX MOV CX, XXX MOV DL, CH MOV AH, 02H INT 21H MOV DL, CL MOV AH, 02H INT 21H ; MOV AH, 4CH INT 21H ; MAIN ENDS ; DATA SEGMENT XXX DW ? MAIN ENDS END 신라대학교 컴퓨터공학과 시스템프로그래밍

  47. MOV명령연산항의가능한조합 MOV <operand1>, <operand2> operand2 직 접 간접 값 operand1 범용 r. 세그먼트 r. 범용 r. 세그먼트 r. (CS는 제외) 간접:메모리주소 ○ ○ × ○ ○ ○ ○ × ○ ○ × ○ 신라대학교 컴퓨터공학과 시스템프로그래밍

  48. 29AB3H {EAX} m Memory ×10H register {DS} moved to points to {AL} HERE “value” 80x86 주소지정 모드 -단순한 방법simple addressing modes • 즉시 모드immediate addressing mode • 피연산자: register, constant • 간혹 어셈블러에 따라 상수 앞에 “#” 기호를 붙임 MOV AL, ‘Q’ MOV EAX, 29AB3H • 직접 모드 direct mode • 피연산자: offset address, register • MOV 명령에서 메모리와 레지스터(AL, AX, EAX) 사이의 데이터 이동에 사용 MOV AX, DATA5 MOV HERE, AL 신라대학교 컴퓨터공학과 시스템프로그래밍

  49. m {BX} {AX} M {DS} ×10H m {ES} p OFFDAT 80x86 주소지정 모드 – 레지스터 이용 방법register-based modes • 레지스터 모드 register mode • 피연산자: register, register MOV AX, BX • 변위 모드 displacement mode • 피연산자: 오프셋 주소, 레지스터 • 직접 모드와 같으나 거의 모든 명령에 적용 MOV ES, OFFDAT MOV NUM, BP 신라대학교 컴퓨터공학과 시스템프로그래밍

  50. {DS} ×10H m {CX} p {BX} ×10H {SS} m p {DL} {BP} 80x86 주소지정 모드 – 레지스터 이용 방법register-based modes • 레지스터 간접 모드 register indirect mode • 피연산자: [register], register • BX, DI, SI (or EBX, EDI, ESI): 레지스터 값이 데이터 세그먼트에 대한 오프셋 • BP (or EBP): 레지스터 값이 스택 세그먼트에 대한 오프셋 MOV [DI], [BX] (문자열 연산의 경우만 가능) MOV CX, [BX] MOV [BP], DL 신라대학교 컴퓨터공학과 시스템프로그래밍

More Related