1 / 62

4 장 어셈블리어

4 장 어셈블리어. 프로그래밍 언어 어셈블리어 개요 어셈블리 프로그래밍 MASM 사용법. 학습내용. 프로그래밍언어 계층. b =1; c= 2; a = b+c ;. 고급언어와 어셈블리어 예. mov dword ptr [ebp-8],1 mov dword ptr [ebp-0Ch],2 mov eax,dword ptr [ebp-8] add eax,dword ptr [ebp-0Ch] mov dword ptr [ebp-4],eax.

errol
Download Presentation

4 장 어셈블리어

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. 4장 어셈블리어

  2. 프로그래밍 언어 어셈블리어 개요 어셈블리 프로그래밍 MASM 사용법 학습내용

  3. 프로그래밍언어 계층

  4. b =1; c= 2; a = b+c; 고급언어와 어셈블리어 예 mov dword ptr [ebp-8],1 mov dword ptr [ebp-0Ch],2 mov eax,dword ptr [ebp-8] add eax,dword ptr [ebp-0Ch] mov dword ptr [ebp-4],eax

  5. 원시프로그램의 번역 과정 보조기억장치 주기억장치 운영체제 원시코드 컴파일러 프로 세서 목적코드 목적코드

  6. 고급언어와 저급언어에서 번역 고급언어 사용 저급언어 사용 (프로그래밍) (프로그래밍) 자연어 원시 코드 고급 언어 :1 원시 코드 :1 저급 언어 컴파일러 어셈블러 목적 코드 목적 코드 :n :1 기계어

  7. 고급언어 자연어와 가깝다 컴퓨터 동작에 대하여 알 필요가 없다 하나의 명령어는 다수의 기계어로 번역 프로세서에 호환 프로그램 이해가 용이하고 배우기 쉽다 고급언어와 어셈블리어

  8. 어셈블리어 기계어에 가깝다(대표적인 저급언어) 컴퓨터의 각 장치들의 구체적 동작 제어 기계어 하나에 하나의 니모닉 명령어 프로세서 마다 따로 정의 프로그램이 난해하며 배우기 힘들다 빠른 속도 주로 시스템프로그래밍에 사용 하드웨어 이해에 적합 고급언어와 어셈블리어

  9. [Lable:] Mnemonic [Operand] [;Comment] 빈칸을 이용하여 구분 레이블은 하나의 어셈블리 명령어에 대하여 어떤 이름을 부여하는 것 다른 명령어는 그 이름을 사용하여 연관된 어셈블리 명령 참조 31문자까지 가능, 콜론(:)으로 끝난다. 알파벳, 숫자, 특수문자(?,,,@,$) 첫문자로 숫자는 사용하지 않음, 마침표 사용시 반드시 첫자리에 레지스터 이름은 쓰지 않는다. 수행문의 구성

  10. 연상코드 : 어셈블리 언어를 배우는 것 연산항 : 명령어에 따라 다르다. 명령어가 작용하는 레지스터나 기억 장소의 위치 두 개 일 때 앞의 것은 목적지 연산항, 뒤의 것은 출발지 연산항 수행문의 구성

  11. 어셈블리 지시어 컴퓨터가 무엇을 하도록 지시하는 것이 아니고 어셈블러에 대한 지시 사항을 전달 기계어로 번역되지 않는다 어셈블리 명령어 컴퓨터로 하여금 무엇을 수행하라고 직접 명령 기계어로 번역 수행문의 성격

  12. 연산항을 갖지 않는 명령어 CLC 하나의 연산항을 갖는 명령어 DEC CX 두개의 연산항을 갖는 명령어 MOV AX,BX 명령어의 형식

  13. 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

  14. 정수 표시는 대문자 또는 소문자(b; o,q; d; h) 16진법 첫 숫자는 반드시 아라비아 숫자 abcH  0abcH 16진법에서 A,B,C,D,E,F는 대/소문자 아무 표시가 없으면 10진수 문자상수 ‘A’ ‘AB’ ‘Can’’t’ “Can’t” 실수 : 12.34, 1.234E1 DD,DQ,DT에 의해서만 정의가능 실수 자체가 명령어에서 직접 사용되지는 않는다. 상수

  15. 프로그램 출력 지시어 프로세서 관련 지시어 데이터 관련 지시어 어셈블리 지시어

  16. 프로그램 출력 지시어 PAGE [lines] [,columns] ; 프린트 될 페이지 결정 TITLE text(임의의 문장) SUBTTL text(임의의 문장) lines : 10~255 , default : 57 columns : 60~132, default : 80 TITLE의 text 내용은 각 페이지 둘째 줄 왼쪽 SUBTTL의 text 내용은 셋째 줄 오른쪽 프로그램 출력 지시어

  17. 프로세서 관련 지시어 .8086 .8087 .286 어떤 프로세서에서 쓰이는 명령어인지 어셈블러에게 지시 Default : .8086 프로세서 관련 지시어

  18. 데이터 관련 지시어 데이터 정의(DB, DW, DD, DT) 심볼 정의(EQU, =) 외부 프로그램 참조(PUBLIC, EXTRN, ICLUDE) 영역 정의(SEGMENT, ASSUME, PROC) 어셈블리 제어(END, EVEN, ORG) 데이터 관련지시어

  19. DB : 1 바이트 이상의 메모리 할당 DW : 2 바이트 메모리 할당 DD : 4 바이트 메모리 할당 DT : 10 바이트 메모리 할당 [name] DB expression[,…] 데이터 정의

  20. max DB 255 wmax DW 65535 table DB 0,1,2 table DB 0 DB 1 DB 2 table DW 3, 3, 3, 3, 8, 7, 7, 7 table DW 4 DUP(3), 8, 3 DUP(7) temp DB ? temp1 DW 12 DUP(?) 문자는 DB 사용 : msg DB ‘abcabc’ msg DB 2 DUP(‘abc’) 데이터 정의

  21. EQU : 프로그램 내에서 변경할 수 없다. sum EQU 2FFh sum EQU 3FAh; 재정의 오류 = : 프로그램 내에서 변경 가능하다. 심볼 정의

  22. 여러 프로그램을 연결 편집하여 하나의 수행 가능한 프로그램을 만들 때 각각의 프로그램 간에 서로 정보를 주고 받아야 한다. PUBLIC symbol[,…] 외부 사용자가 이 프로그램을 사용해도 좋다 EXTRN name : type[, …] 다른 곳에서 정의된 것을 사용하겠다 type : byte, word, dword, NEAR, FAR, ABS(EQU, =) 외부 프로그램 참조

  23. SEGMENT 프로그램의 영역을 구분하는데 사용 세그먼트란 한 세그먼트 레지스터 내의 주소를 참조 함으로서 찾아갈 수 있는 모든 명령문과 데이터의 집합 s_name SEGMENT … s_name ENDS ENDS ASSUME ASSUME s_reg : s_name 영역 정의

  24. END [entry_point name] 원시 프로그램의 끝을 정의 EVEN 메모리 주소를 짝수에 위치 시킴 어셈블리 제어

  25. 산술연산자(+, -, *, /, MOD, SHL, SHR) / : 몫, MOD: 나머지 abc EQU 00110010B SHL 1 def EQU abc SHR 1 논리연산자(AND, OR, XOR, NOT):비트단위 AND AH, 0FH 관계연산자(EQ, NE, LT, GT, LE, GE) mov ax, const EQ 20 const가 20이면 ax는 FFFFh가 저장 아나면 0 연산자

  26. MAIN SEGMENT ASSUME CS:MAIN 프로그램 블록 MAIN ENDS END 프로그램의 기본형태

  27. 1 MAIN SEGMENT 2 ASSUME CS : MAIN 3 MOV DL, ‘A’ 4 MOV AH, 2 5 INT 21H ;AH값에 따라 ;각기 다른 기능(부록 F) 6 MOV AH, 4CH 7 INT 21H 8 MAIN ENDS 9 END 문자 A를 출력하는 프로그램

  28. MOV 명령연산항의가능한조합 MOV <operand1>, <operand2> operand2 직 접 값 간접 operand1 범용r. 세그먼트r. 범용 r. 세그먼트 r. (CS는 제외) 간접:메모리주소 ○ ○ × ○ ○ ○ ○ × ○ ○ × ○

  29. MASM TEST.ASM LINK TEST TEST MASM

  30. 명령어의 조건적 분기 1:분기 JS JZ/JE JP/JPE JB/JNAE JO - 0:분기 JNS JNZ/JNE JNP/JPO JNB/JAE JNO JCXZ 1일때의 의미 보수표현으로 음수 결과가 0 1의 수가 짝수개 캐리플래그가 1 결과의 범위초과 CX레지스터가 0일때만 분기 플래그 SF ZF PF CF OF CX

  31. CMP AX,100 JA Loop1 *if AX>100 then Loop1으로 분기 JE Loop2 *if AX==100 then Loop2로 분기 조건적 분기 명령의 예

  32. 1 MAIN SEGMENT 2 ASSUME CS:MAIN, DS:MAIN 3 MOV AX, CS 4 MOV DS, AX 5 MOV CX, 1 6 MOV AX, 0 7 LOOP1: ADD AX, CX 8 INC CX 1~100 합을 구하는 프로그램

  33. 9 CMP CX, 100 10 JBE LOOP1 11 MOV SUM, AX 12 MOV AH, 4CH 13 INT 21H 14 SUM DW ? 15 MAIN ENDS 16 END 1~100 합을 구하는 프로그램

  34. 무조건 분기의 형태 기억장치 IP N JMP N-2 N OVER d = OVER-N . . . OVER

  35. 1 MAIN SEGMENT 2 ASSUME CS:MAIN 3 L1: MOV AH, 1 4 INT 21H 5 CMP AL, 1AH 6 JE FIN 7 CMP AL,‘a’ 8 JB L2 9 CMP AL,‘z’ 소문자를 대문자로 변환

  36. 10 JA L2 11 SUB AL, ‘a’-‘A’ 12 L2: MOV DL, AL 13 MOV AH, 2 14 INT 21H 15 JMP L1 16 FIN: MOV AH, 4CH 17 INT 21H 18 MAIN ENDS 19 END 소문자를 대문자로 변환

  37. 값 즉시 지정방식 직접 주소지정방식 레지스터 직접, 메모리 직접 간접 주소지정방식 레지스터 간접 주소지정 베이스 주소지정 인덱스 주소지정 베이스 인덱스 주소지정 주소지정방식(데이터지정방식)

  38. 1010H + 203CH의 예 1 ;값 즉시 지정방식의 예 2 MAIN SEGMENT 3 ASSUME CS:MAIN, DS:MAIN 4 MOV AX, CS 5 MOV DS, AX 6 MOV AX, 1010H 값 즉시 지정방식

  39. 7 ADD AX, 203CH 8 MOV RESULT, AX 9 MOV AH, 4CH 10 INT 21H 11 RESULT DW ? 12 MAIN ENDS 13 END 값 즉시 지정방식

  40. 실행전의 기억장소 상태 0A5C : 0000 0A5C : 0002 0A5C : 0004 0A5C : 0007 0A5C : 000A 0A5C : 000D 0A5C : 000F 0A5C : 0011 0A5C : 0013 MOV AX, CS MOV DS, AX MOV AX, 1010 ADD AX, 203C MOV AH, 4C MOV [0011] , AX INT 21 00 00

  41. 실행후의 기억장소 상태 0A5C : 0000 0A5C : 0002 0A5C : 0004 0A5C : 0007 0A5C : 000A 0A5C : 000D 0A5C : 000F 0A5C : 0011 0A5C : 0013 MOV AX, CS MOV DS, AX MOV AX, 1010 ADD AX, 203C MOV [0011] , AX MOV AH, 4C INT 21 4C 30

  42. 레지스터 직접지정방식 • MOV AL,BL AH AL 86 AX BL의 내용이 AL에 이동된다 BH BL BX 86

  43. 메모리 직접지정방식 • MOV AX,[0020] 데이터세그먼트 ×16 + 1010 DS 10100 10120 37 10121 AX B437 B4

  44. 직접주소지정의 실행과정 MOV AX,DATA1 ADD AX,DATA2 0012 AX 1010 0014 + AX 304C 1427:0012 DATA1 1427:0014 DATA2 1427:0016 RESULT 1427:0018 10 10 3C 20 0016 4C 30 MOV RESULT, AX

  45. 1 ;값 주소지정방식 예제 2 MAIN SEGMENT 3 ASSUME CS:MAIN, DS:MAIN 4 MOV AX, CS 5 MOV DS, AX 6 MOV AX, DATA1 7 ADD AX, DATA2 DATA1,DATA2에저장된값의합

  46. 8 MOV RESULT, AX 9 MOV AH, 4CH 10 INT 21H 11 DATA1 DW 1010H 12 DATA2 DW 203CH 13 RESULT DW ? 14 MAIN ENDS 15 END DATA1,DATA2에저장된값의합

  47. 유효주소(EA) = BR + INX + D BR:베이스 레지스터(BX,BP) INX:인덱스 레지스터(SI,DI) D:변위(8비트 또는 16비트 상수값) - 레지스터 간접지정 : BR - 베이스 주소 지정 : BR, D - 인덱스 주소 지정 : INX, D - 베이스 인덱스 주소 지정 : BR,INX,D 간접 주소지정의 유효주소

  48. DATA1+DATA2의 계산 1 ;레지스터 간접 주소지정 예 2 MAIN SEGMENT 3 ASSUME CS:MAIN, DS:MAIN 4 MOV AX, CS 5 MOV DS, AX 6 LEA BX, DATA1 7 MOV AX, [BX] 8 LEA BX, DATA2 레지스터 간접 주소지정의 예

  49. 9 ADD AX, [BX] 10 MOV RESULT, AX 11 MOV AX, 4CH 12 INT 21H 13 DATA1 DW 1010H 14 DATA2 DW 203CH 15 RESULT DW ? 16 MAIN ENDS 17 END 레지스터 간접 주소지정의 예

  50. 레지스터 간접 주소지정 ②MOV AX,[BX] ①LEA BX,DATA1 0018 0018 BX 0018 0018 001A 001C AX 1010 10 10 3C 20

More Related