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

Slides:



Advertisements
Similar presentations
10-7 부동소수점 (Floating-Point) 계산  컴퓨터에서 숫자를 표기하는 방법  가수 (Fraction) : 부호화된 고정소수점 숫자 지수 (Exponent) : 소수점의 위치를 표시 ( 예 )10 진수 를 표기하면 Fraction Exponent.
Advertisements

Chapter 04 컴퓨터에서 데이터 표현. 04 컴퓨터에서 데이터 표현 2 인코딩 (encoding) – 현실세계의 정보를 컴퓨터 내부에서 처리할 수 있는 이진수로 변환하는 방법 1. 컴퓨터 속에서 데이터 표현 원리 0 - 아빠 1 - 엄마 00 - 아빠 01 - 엄마.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의
제4장 어셈블리어.
제4장 어셈블리어.
Lecture #12 인터럽트 Interrupt.
제 9 장 구조체와 공용체.
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
제 7 장 링커와 로더 설계.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
어셈블리 문법 보강 4월 10일.
Chapter 04 C 연산자의 이해.
System Programming 제1장 배경지식 시스템 프로그래밍.
REVERSE ENGINEERING HeXA 1st
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
Lecture #4 제3장. 컴퓨터 산술과 논리 연산.
제 5장 매크로 프로세서 설계.
2장. 데이터의 표현 Lecture #2.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
제 6 장 8086 어셈블러 설계.
Computer Architecture 3장
8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍.
임베디드 실습 # LED, 7’Segment 제어
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
제3장 8086 프로세서의 내부구조.
6장. printf와 scanf 함수에 대한 고찰
Tail-recursive Function, High-order Function
ATmega128 FND 실습 휴먼네트웍스 기술연구소
DK-128 FND 실습 아이티즌 기술연구소 김태성 연구원
11장. 1차원 배열.
3장. 데이터의 표현과 컴퓨터 연산 다루는 내용 진법과 진법 변환 연산과 보수 데이터의 표현 산술 연산 논리 연산.
제 장 학습내용 C 언어에서의 인터럽트 사용 레지스터를 위한 자료구조 인터럽트를 수행하기 위한 명령어
어서와 C언어는 처음이지 제14장.
Computer System Architecture
어셈블리어 (2) 매크로 어셈블리어 시스템 프로그래밍 - Lecture #4
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
DK-128 FND 실습 아이티즌 기술연구소
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lecture #9 매크로 프로세서 설계 & 구현.
연산자 (Operator).
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
2장. 변수와 타입.
제4강 처리장치 1.
ARM Development Suite v1.2
1. 2진 시스템.
CHAPTER 02. 정보의 표현 정보 체계_컴퓨터 내부의 정보 표현과 정보 처리
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
계산기.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
DK-128 직렬통신 실습 아이티즌 기술연구소
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
ARM Development Suite v1.2
논리회로 설계 및 실험 4주차.
TVM ver 최종보고서
3.2 분기 명령어.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
Computer System Architecture
컴퓨터는 어떻게 덧셈, 뺄셈을 할까? 2011년 10월 5일 정동욱.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
실 습 2.
Assembly 05 방호남 07 반지훈 09 박상욱.
Visual Basic .NET 기초문법.
Pointers summary.
ARM Development Suite v1.2
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
3장. 데이터의 표현과 컴퓨터 연산 다루는 내용 진법과 진법 변환 연산과 보수 데이터의 표현 산술 연산 논리 연산.
Presentation transcript:

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

사칙 연산 명령 사칙 연산 명령 ADD(ADDition), ADC(Addition with Carry) SUB(SUBtract), SBB(SuBtract with Borrow) MUL(MULtiply), IMUL(Integer MULtiply) DIV(DIVide) XCHG(eXCHanGe) INC(INCrement), DEC(DECrement) 시스템프로그래밍

ADD 명령 (1) 형식 ADD [Register/Memory] [Register/Memory/Immediate Vale] 사용 예 : ADD AX, 1234H ADD AX, [BX] ADD AX, CX ADD [BX], AX ADD WORD PTR [BX], 1234H 주의사항: 두 개의 피연산자 모두 메모리가 올 수 없다 메모리에 수치를 더할 때에서 BYTE or WORD 지정이 필요 ADD [BX], 12H  ADD BYTE PTR [BX], 12H 시스템프로그래밍

ADD 명령 (2) 예제 #1 4040H+0102H를 수행하고 덧셈 결과를 출력한다 ASSUME CS:MAIN ; MAIN SEGMENT ASSUME CS:MAIN ; MOV BX, 4040H ADD BX, 0102H MOV DL, BH MOV AH, 2 INT 21H MOV DL, BL MOV AH, 4CH MAIN ENDS END 예제 #1 4040H+0102H를 수행하고 덧셈 결과를 출력한다 시스템프로그래밍

ADD 명령 (3) 예제 #2 키보드에서 입력된 문자를 에코백하고, ASCII 코드 상의 그 다음의 두 개의 문자를 출력한 다음 입력된 문자를 소문자로 변환하여 출력한다 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; ONE EQU 1 TOLOWER EQU ‘a’ – ‘A’ MOV AX, CS ADD DS, AX MOV AH, 1 INT 21H MOV KEEP, AL ADD AL, ONE MOV, DL, AL MOV AH, 2 ADD AL, ONE MOV, DL, AL MOV AH, 2 INT 21H ; MOV, DL, KEEP ADD DL, TOLOWER MOV AH, 4CH KEEP DB ? MAIN ENDS END 시스템프로그래밍

ADC 명령 (1) 정의 Carry flag 덧셈 연산에서 carry bit를 같이 더하는 연산을 수행 이전 덧셈 연산에서 발생한 자리올림(0/1)을 저장 Flag register의 CF bit 덧셈 연산에서 carry bit를 같이 더하는 연산을 수행 16 bit 이상의 데이터 덧셈 연산에서 하위 16 bit 덧셈을 먼저 수행하고 이 때에 발생한 캐리를 상위 16 bit 덧셈 연산에 동시에 더하고자 할 때에 사용 가능 CF AX + CX AX’ BX + DX BX’ 시스템프로그래밍

ADC 명령 (2) 예제 10008000H + 20008123H를 계산하여 메모리에 저장한다 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; MOV AX, CS ADD DS, AX MOV AX, 1000H MOV BX, 8000H MOV CX, 2000H MOV DX, 8123H ADD BX, DX ADC AX, CX MOV ANS1, AX MOV ANS2, BX MOV AH, 4CH INT 21H ; ANS1 DW 0 ANS2 DW 0 MAIN ENDS END 시스템프로그래밍

SUB 명령 (1) 형식 SUB [Register/Memory] [Register/Memory/Immediate Vale] 사용 예 : SUB AX, 1234H SUB AX, [BX] SUB AX, CX SUB [BX], AX SUB WORD PTR [BX], 1234H 주의사항: 두개의 피연산자 모두 메모리가 올 수 없다 메모리에 수치를 더할 때에서 BYTE or WORD 지정이 필요 SUB [BX], 12H  SUB BYTE PTR [BX], 12H 시스템프로그래밍

SUB 명령 (2) 예제 변수 AAA에 저장되어 있는 값에서 변수 BBB에 저장되어 있는 값을 빼고 결과를 AAA에 저장하여라 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; MOV AX, CS MOV DS, AX MOV BX, BBB SUB AAA, BX MOV AH, 4CH INT 21H AAA DB 200 BBB DB 100 MAIN ENDS END 예제 변수 AAA에 저장되어 있는 값에서 변수 BBB에 저장되어 있는 값을 빼고 결과를 AAA에 저장하여라 시스템프로그래밍

SBB 명령 (1) 형식 16 bit 뺄셈 연산에서 자리빌림(borrow)이 발생하면 carry flag가 세트된다 뺄셈 연산에서 carry bit를 같이 빼는 연산을 수행 ADC 명령어 유사하게 동작 16 bit 이상의 데이터 뺄셈 연산에서 하위 16 bit 뺄셈을 먼저 수행하고 이 때에 발생한 캐리를 상위 16 bit 뺄셈 연산에서 같이 빼고자 할 때에 사용 가능 시스템프로그래밍

SBB 명령 (2) 예제 #1 12340000H – 12000H 연산을 수행하는 프로그램을 작성하여라 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; MOV AX, CS MOV DS, AX MOV WORK1, 1234H MOV WORK2, 0000H SUB WORK2, 2000H SBB WORK1, 0001H MOV AH, 4CH INT 21H WORK1 DW 0 WORK2 DW 0 MAIN ENDS END 예제 #1 12340000H – 12000H 연산을 수행하는 프로그램을 작성하여라 시스템프로그래밍

SBB 명령 (3) 예제 #2 다음 예제에서 변수 ANS1~ANS4에 저장되는 값은 무엇인가? MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; MOV AX, CS MOV DS, AX MOV AH, 11H MOV BH, 22H MOV CL, 33H MOV SI, 4444H MOV BP, 5555H ADD AH, 66H MOV BYTE PTR ANS1, AH ADD CL, 0FFH ADC BH, 01H MOV BYTE PTR ANS2, BH MOV BYTE PTR ANS2+1, CH SUB BP, SI MOV WORD PTR ANS3, BP ; MOV AH, 4CH INT 21H ANS1 DW 0 ANS2 DW 0 ANS3 DB 0 ANS4 DW 9999H MAIN ENDS END 시스템프로그래밍

음수의 표현 (1) 음수의 표현 8086 프로세서는 부호를 가진 2의 보수(signed 2’s complement)를 이용하여 음수를 표현 8 bit/16 bit 데이터에서 최상위 비트(MSB: Most Significant Bit) 를 부호 비트로 사용 0 : 양수 / 1 : 음수 나머지 비트를 이용하여 수를 표현 음수 예 : - 01H  0FFH - 80H  80H - 0FFH  01H : 8 bit로 표현하는 경우 에러 시스템프로그래밍

음수의 표현 (2) 음수의 범위(8 bit의 경우) 2진수 MSB LSB 보수를 사용하지 경우의 16진수 보수를 사용하는 경우의 16 진수 보수의 경우 부호 00000000 00000001 ~ 01111110 01111111 1 7E 7F 양 수 10000000 10000001 11111110 11111111 80 81 FE FF -80 -7F -2 -1 음 수 시스템프로그래밍

음수의 표현 (3) 예제 다음 예제에서 AL & AX 레지스터에 저장되는 값은 무엇인가? cf) 어셈블러는 음수에 단순히 보수로 변환할 뿐 음수의 범위를 검사하지 않는다 MAIN SEGMENT ASSUME CS:MAIN ; P1 EQU 1H PFF EQU 0FFH M1 EQU -1H MFF EQU -0FFH MOV AL, P1 MOV AL, PFF MOV AL, M1 MOV AL, MFF MOV AX, P1 MOV AX, PFF MOV AX, M1 MOV AX, MFF MAIN ENDS END 시스템프로그래밍

수의 확장 (1) 수의 확장 어셈블리 프로그램에서는 연산 시에 변수의 범위를 검사하지 않는다 오버플로우(overflow)가 발생하지 않는다 프로그래머가 연산 결과를 고려하여 변수를 적절하게 확장하여 연산을 수행하도록 하여야 한다 8 bit 레지스터의 값을 16 bit로 확장 양의 정수(unsigned integer) 확장 확장 비트를 0으로 설정 부호를 갖는 정수(signed integer)의 확장 확장 비트를 부호 비트로 설정 시스템프로그래밍

수의 확장 (2) 예제 #1 4개의 숫자 50H, 60H, 80H, 0F0H를 합하여 변수 ANS에 저장한다 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; MOV AX, CS MOV DS, AX MOV AX, 0 MOV DL, VAR1 ADD AX, DX MOV DL, VAR2 MOV DL, VAR3 MOV DL, VAR4 MOV ANS, AX ; MOV AH, 4CH INT 21H VAR1 DB 50H VAR2 DB 60H VAR3 DB 80H VAR4 DB 0F0H ANS DW ? MAIN ENDS END MOV DX, 0 or MOV DH, 0 시스템프로그래밍

수의 확장 (3) 부호를 갖는 정수의 확장 8 bit 정수를 16 bit 정수로 확장할 때에는 상위 바이트를 부호 비트를 이용하여 확장 양수이면 상위 바이트를 00으로 설정 음수이면 상위 바이트를 FF로 설정 부호확장명령 8/16 bit 정수를 16/32 bit 정수로 변환시키는 명령 CBW(Convert Byte to Word) – AL레지스터의 숫자를 부호 확장하여 AX 레지스터에 저장 CWD(Convert Word to Double word) – AX 레지스터의 숫자를 부호확장하여 상위 16 bit를 DX 레지스터에, 하위 16 bit를 AX 레지스터에 저장 시스템프로그래밍

수의 확장 (4) 예제 #2 부호를 갖는 4 개의 숫자를 합하여 변수 ANS에 저장한다 MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ; MOV AX, CS MOV DS, AX MOV AX, 0 MOV DX, AX ADD BX, OFFSET VAR MOV AL, [BX] CBW ADD DX, AX MOV AL, [BX] + 1 MOV AL, [BX+2] ADD DX, AX MOV AL, 3[BX] CBW MOV ANS, DX ; MOV AH, 4CH INT 21H VAR DB 50H, 60H, 80H, 0F0H ANS DW ? MAIN ENDS END 시스템프로그래밍

XCHG 명령 형식 두 개의 데이터를 상호 교환하는 명령 XCHG [Register/Memory] [Register/Memory] 사용 예 : XCHG AX, BX XCHG AX, [BX] XCHG [BX], AX 시스템프로그래밍

MUL 명령 (1) 형식 MUL [Register / Memory] - 양의 정수 곱셈 IMUL [Register / Memory] - 부호를 갖는 정수 곱셈 MUL 명령은 피연산자를 하나를 갖는다 주어진 피연산자와 AL / AX 레지스터와 곱셈을 수행하여 결과를 AX 또는 DX, AX 레지스터에 저장한다 8 bit 곱셈 16 bit 곱셈 8 bit Register or memory AL X  AX 16 bit Register or memory AX X  DX AX 시스템프로그래밍

MUL 명령 (2) 사용 예 10 * 20 피연산자가 메모리(간접주소)인 경우에는 데이터 형 지정이 필요 MOV AL, 10 MOV BL, 20 MUL BL 피연산자가 메모리(간접주소)인 경우에는 데이터 형 지정이 필요 MOV BX, OFFSET DATA1 MUL [BX] ……. DATA1 DW 1234H 상수와의 직접 곱셈은 지원하지 않는다 MUL 20 MUL WORD PTR [BX] 시스템프로그래밍

MUL 명령 (3) 예제 #1 부호없는 정수 및 부호있는 정수의 곱셈 MOV DI, OFFSET ANS4 CODE SEGMENT ASSUME CS:CODE, DS:CODE ; MOV AX, CS MOV DS, AX MOV AL, DATA_1A MUL DATA_1B MOV ANS1, AX MOV AX, DATA_2A MUL DATA_2B MOV ANS2_A, DX MOV ANS2_B, AX MOV AL, DATA_3A MOV BL, DATA_3B IMUL BL MOV ANS3, AX MOV AX, DATA_4A MOV BX, OFFSET DATA_4B IMUL WORD PTR [BX] MOV DI, OFFSET ANS4 MOV [DI], DX MOV [DI+2], AX MOV AH, 4CH INT 21H ; DATA_1A DB 0F0H DATA_1B DB 11H DATA_2A DW 1234H DATA_2B DW 2001H DATA_3A DB -10H DATA_3B EQU 11H DATA_4A DW -1000H DATA_4B DW 1234H ANS1 DW ? ANS2_A DW ? ANS2_B DW ? ANS3 DW ? ANS4 DW ? CODE ENDS END 시스템프로그래밍

DIV 명령 (1) 형식 DIV [Register / Memory] - 양의 정수 나눗셈 IDIV [Register / Memory] - 부호를 갖는 정수 나눗셈 DIV 명령은 피연산자를 하나를 갖는다 AX / DX,AX 레지스터 내용을 피연산자로 나누고, 나머지와 몫을 각각 AH, AL / DX, AX 레지스터에 저장한다 16 bit / 8 bit 나눗셈 32 bit / 16 bit 나눗셈 나머지 몫 8 bit Register or memory AX X  AH AL 16 bit Register or memory DX AX X  DX AX 시스템프로그래밍

DIV 명령 (2) 주의 사항 부호를 갖는 정수의 나눗셈에서 몫과 나머지의 부호 0으로 나누는 나눗셈 몫의 부호는 일반적인 수학 공식에 의해 결정 피젯수와 젯수의 부호가 같으면 양수, 다르면 음수 나머지 부호는 피젯수의 부호를 따른다 0으로 나누는 나눗셈 INT 0 인터럽트를 발생하여 에러를 처리 나눗셈에 의한 오버플로우(overflow) 0FFFFH / 01H 0FFFFH : overflow 시스템프로그래밍

DIV 명령 (3) 예제 #1 삼각형의 중심을 구하는 프로그램 MOV AL, A.Y 시스템프로그래밍 CODE SEGMENT ASSUME CS:CODE, DS:DATA ; MOV AX, DATA MOV DS, AX MOV AL, A.X CBW MOV BX, AX MOV AL, B.X ADD BX, AX MOV AL, C.X ADD AX, BX MOV BH, 3 IDIV BH MOV M.X, AL MOV AL, A.Y CBW MOV BX, AX MOV AL, B.Y ADD BX, AX MOV AL, C.Y ADD AX, BX MOV BH, 3 IDIV BH MOV M.Y, AL ; MOV AH, 4CH INT 21H CODE ENDS 시스템프로그래밍

DIV 명령 (4) 예제 #1(계속) 시스템프로그래밍 DATA SEGMENT POINT STRUC X DB ? Y DB ? POINT ENDS ; A POINT <12, 41> B POINT <-53, -19> C POINT <25, -11> M POINT <?, ?> DATA ENDS END 시스템프로그래밍

DIV 명령 (5) 예제 #2 초를 시간, 분, 초로 바꾸는 프로그램 시스템프로그래밍 CODE SEGMENT ASSUME CS:CODE, DS:DATA ; MOV AX, DATA MOV DS, AX MOV SI, OFFSET SECOND MOV AX, [SI] MOV DX, [SI+2] MOV BX, SIXTY DIV BX MOV TIME2.SEC, DL MOV BL, SIXTY DIV BL MOV TIME2.MIN, AH MOV TIME2.HOUR, AL MOV AH, 4CH INT 21H CODE ENDS DATA SEGMENT TIME STRUC HOUR DB ? MIN DB ? SEC DB ? TIME ENDS ; SECOND DD 72912 TIME2 TIME <?,?,?> DATA ENDS END 시스템프로그래밍

INC/DEC 명령 형식 사용 예 INC [Register / Memory] - 피연산자의 값을 1 증가 DEC [Register / Memory] - 피연산자의 값을 1 감소 인덱스 변수 등을 1 증가 또는 감소시킬 때에 사용 사용 예 INC CX, INC [BX] DEC BI 시스템프로그래밍