Lecture #7 어셈블리어 (4) - 8086 매크로 어셈블리어 시스템프로그래밍.

Slides:



Advertisements
Similar presentations
1 Prof. Young Jin Nam, Daegu University 컴퓨터 구조 (Computer Architecture) 명령어 세트 : 특성과 기능 남영진
Advertisements

Family 의 개요 의 외부 Pin 기능과 내부 기능 Memory 구조 Timing 2 장 8051 의 구조.
DEBUG 상지대학교컴퓨터정보공학부. Debug 시작하기  Windows XP 에서 “ 시작 ” 버턴을 클릭한다.  시작메뉴에서 “ 프로그램 ” 을 클릭하고, 보조프로그램을 선택한다.  보조프로그램에 “ 명령 프롬프트 ” 를 클릭한다.  Window XP 에서.
ISA 심화 및 start.S code 분석 SIOR 15th 최재훈.
Basic of Buffer Over Flow
Shellcode 작성 김영성.
3 장 stack and queue.
9장 가로채기(Interrupt) Slide 1 (of 15).
4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의
제4장 어셈블리어.
제4장 어셈블리어.
기본 컴퓨터 프로그래밍 Lecture #6.
Lecture #12 인터럽트 Interrupt.
32비트 캐리 예측 덧셈기(CLA) RCA(Ripple Carry Adder)
Lecture #5 어셈블리어 (2) 매크로 어셈블리어 시스템프로그래밍.
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
제 7 장 링커와 로더 설계.
제 1 장 마이크로프로세서의 기본동작.
2 AVR ATmega128 소개 마이크로컨트롤러 AVR ATmega128.
Lecture # 어셈블러 설계.
3장 MPU 내부구조 Slide 1 (of 28).
논리의 표현 진법과 숫자 표현 2진수와 10진수 문자의 표현
2 80×86 시스템에 대한 이해.
7장 마이크로프로세서의 명령어수행과 주소지정 방식 Slide 1 (of 29).
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
어셈블리 문법 보강 4월 10일.
REVERSE ENGINEERING HeXA 1st
+ 가상 메모리 -> 물리 메모리 Selector Offset DIR Page Segmetatation
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
Chapter 06. 스택(Stack) Chapter 06-1: 스택의 이해와 ADT 정의.
4장 컴퓨터의 중앙 처리 장치 하 효 순.
제 5장 매크로 프로세서 설계.
제 5장 매크로 프로세서 설계.
리버스 엔지니어링 안녕하십니까? 리버스 엔지니어링 발표를 맡은 정창하입니다. 지금부터 리버스 엔지니어링 발표를
어셈블리어 및 실습 금 1,2 (314) / 금 3,4 (307) RTDCS 이 종 태
6 중앙처리장치의 조직과 기능 IT CookBook, 컴퓨터 구조와 원리 2.0.
Chapter 06 명령어와 번지지정 방식.
ARM 명령어 집합 Lecture #7.
제 6 장 8086 어셈블러 설계.
8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍.
제3장 8086 프로세서의 내부구조.
제 2장 컴퓨터동작의 기본 개념.
스택(Stack) 김진수
10장. 중앙처리 장치의 명령어 다루는 내용 어셈블리 프로그램의 이해 인터럽트(interrupt) 명령어 세트 주소 지정 방식.
명령어 구조 컴퓨터 하드웨어의 구성 프로그램 명령어 프로그램 실행 동작.
명품 C++ 프로그래밍 1장. C++ 시작.
Buffer Overflow
제 장 학습내용 C 언어에서의 인터럽트 사용 레지스터를 위한 자료구조 인터럽트를 수행하기 위한 명령어
6장 연산 장치 6.1 개요 6.2 연산장치의 구성요소 6.3 처리기 6.4 기타 연산장치.
어셈블리어 (2) 매크로 어셈블리어 시스템 프로그래밍 - Lecture #4
제10강 펑션블록 프로그램(1) 1. 펑션과 펑션 블록 1) 펑션 2)펑션 블록 구분 펑션 펑션블록 입력의 수 1개 이상
Computer System Architecture
6-1 중앙 처리 장치의 내부 구조 6-2 명령(instruction) 6-3 주소 지정 방식
제 3 장 연산자 (Operators).
Lecture #9 매크로 프로세서 설계 & 구현.
3-16. 디지털 시계.
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
11장. 마이크로 프로세서 내부 구조.
현대의 원자 모형에 의한 전자 배치의 원리 현대의 원자 모형
Layout XOR(LVS 후 출력 파형 검사) Rising delay: =0.837 nS
제4강 학습내용 인텔프로세서의 발전 과정 8086 프로세서와 80i86프로세서 개요 인텔 펜티엄 IV프로세서 개요
대한민국-스웨덴 수교 60주년 기념 행사 주 스웨덴 대한민국 대사관 (토)
청소년 댄스 경연대회 제35회 문화체육관광부장관大賞 전국레크리에이션대회
10장. 컴퓨터 구조에 대한 세 번째 이야기 작성자: 윤성우.
제 5 장 82C55를 이용한 포트 출력.
제 10 장  코드 생성.
Assembly 05 방호남 07 반지훈 09 박상욱.
4-1. 명령어 형식.
Presentation transcript:

Lecture #7 어셈블리어 (4) - 8086 매크로 어셈블리어 시스템프로그래밍

INCLUDE 의사 명령(1) 예제 프로그램 #1 AL 레지스터의 값을 ASCII 코드 16진수 값으로 화면에 출력하는 프로그램 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; ;--------------------------------------------------------- PUTAL: MOV BL, 10H MUL BL MOV LEVEL1, AH MOV AH, 0 MOV BL, 10H DIV BL MOV LEVEL2, AL MOV DL, LEVEL1 CALL PUTHEX MOV DL, LEVEL2 RET PUTHEX: CMP DL, 0AH JAE HEX2 ADD DL, ‘0’ JMP HEX3 HEX2: ADD DL, ‘A’-0AH HEX3: MOV AH, 2 INT 21H RET ;--------------------------------------------------------- LEVEL1 DB ? LEVEL2 DB ? ; START: MOV AX, MAIN MOV DS, AX MOV AL, 3FH CALL PUTAL MOV AH, 4CH MAIN ENDS END START 시스템프로그래밍

INCLUDE 의사 명령(2) 예제 프로그램 #1 설명 PUTAL 프로시저 – AL 레지스터의 값을 2자리의 ASCII 16진수로 출력하는 서브루틴 PUTHEX 프로시저 – DL 레지스터의 값에 해당하는 문자 (‘0’~’9, ‘A’~’F’)로 바꾸어 출력하는 서브루틴 END 명령에서 프로그램 시작 위치(START)를 지정 시스템프로그래밍

INCLUDE 의사 명령(3) 모듈별 분할 프로그래밍 (1) PUTAL 프로시저를 별도의 모듈(어셈블리 파일)로 작성한다 파일이름 – PUTAL.SUB ; MODULE – PUTAL.SUB ; PUTAL: MOV BL, 10H MUL BL MOV LEVEL1, AH MOV AH, 0 MOV BL, 10H DIV BL MOV LEVEL2, AL MOV DL, LEVEL1 CALL PUTHEX MOV DL, LEVEL2 RET ;--------------------------------------------------------- PUTHEX: CMP DL, 0AH JAE HEX2 ADD DL, ‘0’ JMP HEX3 HEX2: ADD DL, ‘A’-0AH HEX3: MOV AH, 2 INT 21H RET ;--------------------------------------------------------- LEVEL1 DB ? LEVEL2 DB ? 시스템프로그래밍

어셈블 과정에서 MASM 어셈블러에 의해 소스 확장이 이루어진 다음에 어셈블이 수행된다. INCLUDE 의사 명령(4) 모듈별 분할 프로그래밍 (2) 모듈 PUTAL.SUB을 이용할 경우 INCLUDE 의사 명령을 이용하여 예제 프로그램 #1을 다음과 같이 수정할 수 있다 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; INCLUDE PUTAL.SUB START: MOV AX, MAIN MOV DS, AX MOV AL, 3FH CALL PUTAL MOV AH, 4CH INT 21H MAIN ENDS END START 어셈블 과정에서 MASM 어셈블러에 의해 소스 확장이 이루어진 다음에 어셈블이 수행된다. 시스템프로그래밍

INCLUDE 의사 명령(5) 모듈별 분할 프로그래밍 (3) 장점 단점 프로그램을 기능별로 분할함으로써 이해가 용이 공동 및 병행 개발이 가능하여 효율적 한번 작성된 루틴을 효과적으로 반복 사용이 가능 단점 INCLUDE 의사 명령에 대한 소스 확장 과정이 필요 어셈블을 위한 전처리가 필요 시스템프로그래밍

레지스터 보존(1) 레지스터 보존 프로시저 호출을 사용하는 경우에 프로시저에서 호출 루틴에서 사용하는 레지스터 값을 변경하는 경우 프로시저에서 복귀하여 원래 루틴이 실행될 때에 오동작이 발생한다. 레지스터 보존(Register Housekeeping) 호출 루틴에서 프로시저가 사용하는 레지스터의 값을 보관한 다음, 프로시저 복귀 후에 레지스터 값을 원래대로 복구한다. 별도의 메모리를 이용한 레지스터 보존 스택을 이용한 레지스터 보존 시스템프로그래밍

PUTAL 프로시저에서 BX 레지스터를 사용하기 때문에 원래 값을 별도의 메모리에 저장해둔다 레지스터 보존(2) 예제 프로그램 #2 변수 NUM에 저장되어 있는 값들을 16진수로 출력하는 프로그램 PUTAL 프로시저에서 BX 레지스터를 사용하기 때문에 원래 값을 별도의 메모리에 저장해둔다 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; INCLUDE PUTAL.SUB START: MOV AX, MAIN MOV DS, AX MOV BX, OFFSET NUM MOV SI, 0 NEXT: MOV AL, [BX+SI] CMP AL, 0 JE EXIT MOV BXSAVE, BX CALL PUTAL MOV BX, BXSAVE INC SI JMP NEXT EXIT: MOV AH, 4CH INT 21H ; BXSAVE DW ? NUM DB 01H, 23H, 45H, 67H, 89H DB 0ABH, 0CDH, 0EFH, 00H MAIN ENDS END START 시스템프로그래밍

레지스터 보존(3) 예제 프로그램 #2 문제점 레지스터 보존을 위해 별도의 메모리 공간을 사용 레지스터 값을 메모리에 전송하고 레지스터 값을 복구하기 위해 다시 읽어오는 과정이 요구됨으로 실행시간이 늘어난다. 시스템프로그래밍

PUSH & POP 명령(1) 스택(Stack) LIFO(Last-In First-Out) 동작을 지원하는 메모리 공간 8086 CPU는 스택 세그먼트를 지원한다 레지스터 SS(Stack Segment), SP(Stack Pointer)에 의해 관리 PUSH / POP 명령에 의해 스택 메모리에 데이터 전송 프로그램 + 데이터 스택 메모리 프로그램 메모리 할당 시스템프로그래밍

PUSH & POP 명령(2) PUSH & POP 명령 PUSH/POP 세그먼트 레지스터 16 비트 메모리 PUSH 명령은 operand의 16 비트 데이터를 스택(SS:SP)에 저장한다 POP 명령은 스택(SS:SP)에서 16 비트 데이터를 읽어와 operand에 저장한다 SP 레지스터 값은 PUSH/POP 명령에 의해 자동적으로 2씩 증감한다 16 비트 범용 레지스터 PUSH/POP 세그먼트 레지스터 16 비트 메모리 시스템프로그래밍

PUSH & POP 명령(3) PUSH & POP 명령 PUSH AX POP AX PUSH SP POP 시스템프로그래밍 F002 F003 F004 F005 F006 F007 F008 F009 이전의 SP 새로운 SP PUSH AX 번지 FFF0 FFF1 FFF2 FFF3 FFF4 FFF5 FFF6 FFF7 FFF8 FFF9 FFFA SP PUSH POP F002 F003 F004 F005 F006 F007 F008 F009 새로운 SP 이전의 SP POP AX 시스템프로그래밍

PUTAL 프로시저에서 BX 레지스터를 사용한다는 사실을 알아야 레지스터를 보존할 수 있다. PUSH & POP 명령(4) 스택을 이용한 레지스터 보존 (1) 예제프로그램 #2을 스택을 사용하여 수정 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN, SS:MAIN ; INCLUDE PUTAL.SUB START: MOV AX, MAIN MOV DS, AX MOV SS, AX MOV BX, OFFSET NUM MOV SI, 0 NEXT: MOV AL, [BX+SI] CMP AL, 0 JE EXIT PUSH BX CALL PUTAL POP BX INC SI JMP NEXT PUTAL 프로시저에서 BX 레지스터를 사용한다는 사실을 알아야 레지스터를 보존할 수 있다. EXIT: MOV AH, 4CH INT 21H ; NUM DB 01H, 23H, 45H, 67H, 89H DB 0ABH, 0CDH, 0EFH, 00H MAIN ENDS END START 시스템프로그래밍

PUSH & POP 명령(5) 스택을 이용한 레지스터 보존 (2) PUTAL 프로시저에서의 레지스터 보존 MOV DL, AL ; MODULE – PUTAL.SUB ; PUTAL: PUSH AX PUSH BX PUSH DX MOV BL, 10H MUL BL MOV DL, AH CALL PUTHEX MOV AH, 0 DIV BL MOV DL, AL POP DX POP BX POP AX RET ;--------------------------------------------------------- PUTHEX: PUSH AX PUSH DX CMP DL, 0AH JAE HEX2 ADD DL, ‘0’ JMP HEX3 HEX2: ADD DL, ‘A’-0AH HEX3: MOV AH, 2 INT 21H POP DX POP AX RET ;--------------------------------------------------------- 시스템프로그래밍

PUSH & POP 명령(6) 스택을 이용한 레지스터 보존 (3) 시스템프로그래밍 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN, SS:MAIN ; INCLUDE PUTAL.SUB START: MOV AX, MAIN MOV DS, AX MOV SS, AX MOV BX, OFFSET NUM MOV SI, 0 NEXT: MOV AL, [BX+SI] CMP AL, 0 JE EXIT ; PUSH BX CALL PUTAL ; POP BX INC SI JMP NEXT EXIT: MOV AH, 4CH INT 21H ; NUM DB 01H, 23H, 45H, 67H, 89H DB 0ABH, 0CDH, 0EFH, 00H MAIN ENDS END START 시스템프로그래밍

PUSH & POP 명령(7) 스택을 이용한 레지스터 보존 (4) 프로시저를 구현할 때에 프로시저 내에서 사용하는 레지스터는 스택에 보존하도록 한다 프로시저 시작 부분에서 레지스터를 스택에 PUSH 프로시저에서 반환하기 전에 레지스터 값을 스택에서 POP 호출 루틴에서 레지스터 보존에 대한 부담 없이 프로시저를 호출할 수 있도록 지원 시스템프로그래밍

논리 연산 명령(1) 비트 연산 명령 논리 연산 명령 비트 단위 연산을 수행하는 명령 논리 연산 명령 / 시프트 연산 명령 비트 단위로 논리 연산(and, or, not 등)을 수행하는 명령 AND / OR / NOT / XOR / TEST / NEG 시스템프로그래밍

논리 연산 명령(2) AND 명령 OR 명령 주로 비트 마스크(mask) 연산에 사용 예) AL 레지스터의 하위 4비트 값만 구하기  AND AL, 0FH OR 명령 주로 임의의 비트를 1로 세트하는 연산에 사용 예) AL 레지스터 최상위 비트를 1로 설정하기  OR AL, 80H 시스템프로그래밍

논리 연산 명령(3) XOR 명령 TEST 명령 주로 임의의 비트를 반전시키는 연산에 사용 예) AL 레지스터의 상위 4비트을 반전하기  XOR AL, 0F0H TEST 명령 AND 명령과 유사하나 operand 값을 변경하지 않고 연산 결과에 대해 플래그 레지스터의 상태 비트를 설정한다 주로 임의의 비트가 1인지를 검사하는 연산에 사용 예) AL 레지스터 최상위 비트를 1인지를 검사하기  TEST AL, 80H 시스템프로그래밍

논리 연산 명령(4) NEG 명령 부호있는 데이터에 대한 부호 반전(양수  음수) 예) AL 레지스터의 2의 보수 구하기 2의 보수 연산 NOT 명령을 실행한 후에 1을 더하여 결과를 없음 예) AL 레지스터의 2의 보수 구하기  NEG AL 시스템프로그래밍

논리 연산 명령(5) 예제프로그램 AL 레지스터에 대해 여러 가지 논리 연산을 수행한 후에 2진수 형태로 출력하는 프로그램 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; PUTBIN PROC NEAR TEST AL, 10000000B CALL BINOUT TEST AL, 01000000B TEST AL, 00100000B TEST AL, 00010000B TEST AL, 00001000B TEST AL, 00000100B TEST AL, 00000010B TEST AL, 00000001B RET PUTBIN ENDP BINOUT PROC PUSH AX PUSH DX JZ PUT0 MOV DL, ‘1’ JMP PUT1 PUT0: MOV DL, ‘0’ MOV AH, 2 INT 21H POP DX POP AX RET BINOUT EMDP ; CRLF PROC MOV DL, 0DH 시스템프로그래밍

논리 연산 명령(6) 예제프로그램 (계속) 시스템프로그래밍 MOV DL, 0AH MOV AH, 2 INT 21H POP DX POP AX RET CRLF ENDP ; START: MOV AX, MAIN MOV DS, AX XOR AX, AX CALL PUTBIN CALL CRLF MOV AL, 10101111B AND AL, 11110000B OR AL, 00000011B XOR AL, 11110000B CALL PUTBIN CALL CRLF NOT AL ; MOV AH, 4CH INT 21H MAIN ENDS END START 시스템프로그래밍

시프트 & 로테이트 명령(1) 시프트 & 로테이트 명령 비트 단위의 자리 옮김 명령 시프트 & 로테이트 명령에 의해 넘치는 비트는 CF(Carry Flag)로 전송된다 SHL SHR SAL SAR 범용 레지스터(8/16 비트) 1 ROL 메모리(8/16비트) , CL ROR RCL RCR 시스템프로그래밍

시프트 & 로테이트 명령(2) 시프트 명령 SHL(SHift logical Left) / SHR(SHift logical Right) SAL(Shift Arithmetic Left) / SAR(Shift Arithmetic Right) CF MSB LSB CF MSB LSB CF MSB LSB CF MSB LSB 시스템프로그래밍

시프트 & 로테이트 명령(3) 로테이트 명령 ROL(ROtate Left) / ROR(ROtate Right) RCL(Rotate through Carry Left) / RCR(Rotate through Carry Right) CF MSB LSB CF MSB LSB CF MSB LSB CF MSB LSB 시스템프로그래밍

시프트 & 로테이트 명령(4) 시프트 & 로테이트 명령 응용 곱셈 및 나눗셈에서 응용 2의 지수승 곱셈  Shift Left 2의 지수승 나눗셈  Shift Right 예) AL 레지스터에 16 곱하기  MOV CL, 4 SAL AL, CL AL 레지스터를 8로 나누기  MOV CL, 3 SAR AL, CL 실제 MUL/DIV 명령보다 빠른 속도로 연산을 수행 시스템프로그래밍

시프트 & 로테이트 명령(5) 예제프로그램 PUTAL 프로시저를 시프트 명령을 이용하여 수정 시스템프로그래밍 ; MODULE – PUTAL.SUB ; PUTAL: PUSH AX PUSH BX PUSH CX PUSH DX PUSH AX AND AL, 0F0H MOV CL, 4 SHR AL, CL CALL PUTHEX POP AX AND AL, 0FH POP DX POP CX POP BX RET ;--------------------------------------------------------- PUTHEX: PUSH AX PUSH DX CMP DL, 0AH JAE HEX2 ADD DL, ‘0’ JMP HEX3 HEX2: ADD DL, ‘A’-0AH HEX3: MOV AH, 2 INT 21H POP DX POP AX RET ;--------------------------------------------------------- 시스템프로그래밍