2.3.2 기호 정의문 EQU 프로그래머 기호 정의하고 그 값 지정 기호 정의 기호 값 예 기호 EQU 값

Slides:



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

제철고 프로그래밍언어 2015 가을학기 강의 #2 Python 변수, 입출력, 배열 박성우 POSTECH 컴퓨터공학과 2015 년 9 월 30 일.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
9. 중간언어 9-1. 소개 9-2. Polish표기법 주소 코드 9-4. 트리 구조 코드
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Excel 일차 강사 : 박영민.
연결리스트(linked list).
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
블록 속성 정의와 추출 속성 정의 블록을 만들 객체들에 문자를 사용하여 속성을 설명하는 꼬리표에 해당하는 태그를 정의하는
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
12장. 제어 장치 다루는 내용 CPU속의 제어장치 마이크로 연산 제어장치의 동작.
어셈블리 문법 보강 4월 10일.
Windows 8 Ksystem G&I 설치.
System Programming 제1장 배경지식 시스템 프로그래밍.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
제 11 장  코드 최적화.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Error Detection and Correction
제 6장 8086 어셈블러 설계.
23장. 구조체와 사용자 정의 자료형 2.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
임베디드 실습 # LED, 7’Segment 제어
JA A V W. 03.
프로그래밍 개요
Chap 6.Assembler 유건우.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
플립플롭, 카운터, 레지스터 순서회로 플립플롭 카운터 레지스터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
제 9장 트랜스레이터.
논리회로 설계 및 실험 5주차.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
제 2 장 어셈블러(Assemblers) 2.1 기본 어셈블러 기능 단순 SIC 어셈블러
2장. 변수와 타입.
제4강 처리장치 1.
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
1. 2진 시스템.
3강. 컴퓨터와의 기본적인 소통수단 - I 연산자란? 컴퓨터와 소통하기 위한 다양한 방법들
ATmega128의 특징 아이티즌 기술연구소
계산기.
Canary value 스택 가드(Stack Guard).
[ 단원 04 ] 반복과 배열.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
9. 중간언어 9-1. 소개 9-2. Polish표기법 주소 코드 9-4. 트리 구조 코드
Chapter 09. 포인터 1.
AT MEGA 128 기초와 응용 I 기본적인 구조.
논리회로 설계 및 실험 4주차.
셀프 프로그래밍으로 쓰기 셀프 프로그래밍이란? 프린트포트의 ISP 모듈을 사용하지 않음 부트로더에 의한 펌웨어 다운로드
Chapter 10 데이터 검색1.
3.2 분기 명령어.
Numerical Analysis Programming using NRs
8장 선택 논리 II 1. 논리연산자 1.1 논리연산자 : AND (&&) 1.2 논리연산자 : OR (||)
제 4 장 Record.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
CHAP 15. 데이터 스토리지.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
Pointers summary.
SPL-Duino 블록 편집기 이용하기 전류센서 블록 만들기 SPL-Duino 블록 편집기를 실행합니다.
Presentation transcript:

2.3.2 기호 정의문 EQU 프로그래머 기호 정의하고 그 값 지정 기호 정의 기호 값 예 기호 EQU 값 SYMTAB에 입력, 기호에 지정된 값을 배정 기호 값 상수, 수식 예 +LDT #4096 MAXLEN EQU 4096 ( SYMTAB  MAXLEN, 4096 ) +LDT #MAXLEN ( MAXLEN에 대한 값을 피연산자로 사용) 시스템 프로그래밍

2.3.2 기호 정의문 EQU의 다른 사용(레지스터 이름) 어셈블러의 명령어(RMO) 가정 가정: RMO 0, 1(가능), RMO A, X(불가능) EQU의 사용 : 위의 불가능한 가정이 가능하게 됨(SYMTAB 이용) A EQU 0 X EQU 1 L EQU 2 . 다른 예 BASE EQU R1 COUNT EQU R2 INDEX EQU R3 시스템 프로그래밍

2.3.2 기호 정의문 ORG ORG 사용 예 STAB RESB 1100 어셈블러 위치계수기 값의 재설정 값은 상수 또는 수식 레이블 정의에 유용하게 사용될 수 있음 ORG 사용 예 기호 테이블( STAB 100 항목) EQU 문의 사용 STAB RESB 1100 SYMBOL EQU STAB VALUE EQU STAB + 6 FLAGS EQU STAB + 9 SYMBOL VALUE FLAGS 6 3 2 시스템 프로그래밍

2.3.2 기호 정의문 ORG의 사용 어셈블러 지시자(EQU, ORG)의 제약 STAB RESB 1100 ORG STAB (LOCCTR 재설정) SYMBOL RESB 6 VALUE RESW 1 FLAGS RESB 2 ORG STAB + 1100 (LOCCTR의 복귀) 어셈블러 지시자(EQU, ORG)의 제약 오른쪽의 기호는 이전에 프로그램에서 먼저 나타나야 함 ALPHA RESW 1 BETA EQU ALPHA 시스템 프로그래밍

2.3.2 기호 정의문 전방 참조(forward reference) ALPHA EQU BETA BETA EQU DELTA DELTA EQU 1 위의 문장은 보통 2중 패스 어셈블러에 의해서는 해결될 수 없음 시스템 프로그래밍

2.3.3 수식 수식 대부분의 어셈블러에서 허용 단일 피연산자의 주소나 값을 생성 산술 연산(+, -, *, /) 특수항(*) 160 BUFEND EQU * 절대 수식(absolute expressions) 절대항으로 이루어진 경우 상대항의 쌍이 다른 부호를 갖을 경우 상대값을 갖는 경우는 곱셈과 나눗셈 불가 107 MAXLEN EQU BUFEND-BUFFER 상대 수식(relative expressions) 한 개의 상대항을 제외한 모든 항이 쌍을 이루어야 함 곱셈과 나눗셈 연산은 불가 시스템 프로그래밍

2.3.3 수식 수식의 유형 기호 유형 값 RETADR R 0030 BUFFER 0036 BUFEND 1036 MAXLEN A 수식의 유형 결정을 위해 기호와 유형의 파악 SYMTAB에 저장(기호 이름, 플래그, 값) 기호 유형 값 RETADR R 0030 BUFFER 0036 BUFEND 1036 MAXLEN A 1000 시스템 프로그래밍

2.3.4 프로그램 블록 프로그램 블록 프로그램 블록의 예(그림 2.11) 원시 프로그램과 목적 프로그램의 유연성 지원 독립적인 프로그램의 부분 생성 독자성의 유지 로더에 의해 개별적으로 다루어짐 프로그램 블록의 예(그림 2.11) 3개의 블록 이름없는 블록(default 블록) : 실행 가능한 명령어 CDATA 블록 : 길이가 몇 개의 워드, 작은 데이터 영역 CBLKS 블록 : 메모리의 커다란 영역 USE 지시자 사용 독립적인 블록의 명시(92행:USE CDATA, 123행:USE CBLKS) USE (183행) : default 블록의 다시 시작 시스템 프로그래밍

2.3.4 프로그램 블록 패스1 패스 2 각 프로그램 블록 : 독립적인 계수기 사용 논리적 코드의 재배열 프로그램 블록 시작시 계수기 0으로 초기화 각 레이블은 프로그램 블록으로부터 상대적 주소 배정 패스 1의 끝 : 위치 계수기의 값(블록의 길이) 패스 2 코드 생성 목적 프로그램의 시작 위치부터의 상대 주소가 필요 SYMTAB에서 발견 블록 이름 블록 번호 주소 길이 Default 0000 0066 CDATA 1 000B CBLKS 2 0071 1000 시스템 프로그래밍

2.3.4 프로그램 블록 20 0006 0 LDA LENGTH 032060 목표 주소(TA) PC의 값 : 0009 0003(CDATA로부터의 상대 주소) + 0066(CDATA의 시작주소) = 0069 PC의 값 : 0009 변위(disp) = TA-(PC) = 0069-0009 = 0060 프로그램의 복잡성 해결 형식 4의 사용 배제 35 000F 0 JSUB WRREC 4B203B 004D(default로부터의 상대 주소)+0000(default의 시작주소) = 004D PC의 값 : 0012 변위(disp) = TA-(PC) = 004D-0012 = 003B 시스템 프로그래밍

2.3.4 프로그램 블록 프로그램의 복잡성 해결 리터럴의 위치 지정 문제의 해결 CDATA에 위치 시킴 큰 데이터 영역 보다 확실히 앞에 위치 시킴 시스템 프로그래밍

메모리에 로드된 프로그램 원시프로그램 목적프로그램 5 0000 Default(1) Default(1) Default(1) 70 0027 Default(2) Default(2) 95 CDATA(1) 100 004D CDATA(2) 105 CBLKS(1) Default(3) 125 0066 Default(3) CDATA(1) Default(2) 006C CDATA(2) CDATA(3) 180 006D CDATA(3) 185 CDATA(2) 0071 210 Default(3) CBLKS(1) 245 253 CDATA(3) 시스템 프로그래밍

2.3.5 제어 섹션과 프로그램 링크 제어 섹션(Control Section) 외부 참조(External Reference) 어셈블러 후 독자성을 유지하는 프로그램의 일부분 각 제어 섹션은 독립적으로 로드, 재배치 함께 링크할 수 있는 방법 필요 외부 참조(External Reference) 제어 섹션들 사이의 참조 어셈블러 : 외부 참조에 대한 정보 생성 예제 프로그램(그림 2.15) 첫번째 제어 섹션 : COPY(5행,시작), CSECT(109행) 전이 끝 두번째 제어 섹션 : RDREC(109행), CSECT(193행) 세번째 제어 섹션 : WRREC(193행), END(255행)까지 각 제어 세션은 독립적인 위치 계수기를 갖음 각 제어 섹션은 동시에 어셈블될 필요는 없음 외부 참조(external reference) EXTDEF(external definition) : 현 섹션 정의, 다른 섹션 사용 EXTREF(external reference) : 현 섹션에서 다른 섹션의 것을 참조 시스템 프로그래밍

2.3.5 제어 섹션과 프로그램 링크 opcode n i x b p e address 0101 01 1 1 1 1 외부 참조의 예 15 0003 CLOOP +JSUB RDREC 4B100000 160 0017 +STCH BUFFER,X 57900000 RDREC를 포함하는 제어섹션의 메모리 위치(?)  피연산자 0 로더에 의해 로드될 때 적합한 주소 삽입 상대 주소 지정 방식 불가  확장명령어(형식 4) 사용 160행 opcode n i x b p e address 0101 01 1 1 1 1 0000 0000 0000 0000 0000 5 7 9 시스템 프로그래밍

2.3.5 제어 섹션과 프로그램 링크 107 1000 MAXLEN EQU BUFEND-BUFFER 190 0028 MAXLEN WORD BUFEND-BUFFER 000000 190행 외부 참조(BUFEND, BUFFER)를 포함하는 수식 어셈블러 : 0을 저장 로더 : 프로그램 로드시 BUFEND 값을 더하고 BUFFER 값을 뺌 107행 외부 참조가 아님 어셈블러에 의해 계산될 수 있음 외부 참조의 기호는 SYMTAB에 의해 저장 시스템 프로그래밍

2.3.5 제어 섹션과 프로그램 링크 목적 프로그램의 수정 목적 : 어셈블러가 로더에게 외부 참보 정보를 전달 정의 레코드(Define Record) 열 1 D 열 2-7 현 제어 섹션에서 정의된 외부 기호 이름 열 8-13 현 제어 섹션에서 이 기호의 상대 주소 열 14-73 열 2-13의 반복 참조 레코드(Refer Record) 열 1 R 열 2-7 현 제어 섹션에서 참조되는 외부 기호 이름 열 8-73 다른 외부 참조 기호 이름 수정 레코드(Modification Record) 열 1 M 열 2-7 제어 섹션에서의 수정될 필드의 상대적 시작 위치 열 8-9 하프-바이트로 표현된 수정될 필드의 길이 열 10 수정 플래그(+ 또는 -) 열 11-16 값을 더하거나 뺄 외부 기호 이름 시스템 프로그래밍

2.3.5 제어 섹션과 프로그램 링크 15 0003 CLOOP +JSUB RDREC 4B100000 15행 65행 35행 H COPY 000000 001033 D BUFFER 000033 BUFEND 001033 LENGTH 00002D R RDREC WRREC T 000000 1D 172027 4B100000 032023 290000 332007 4B100000 3F2FEC …… T 00001D 0D 010003 0F200A 4B100000 3E2000 T 000030 03 454F46 15행 65행 35행 P113참조 M 000004 05 +RDREC M 000011 05 +WRREC M 000024 05 +WRREC E 000000 시스템 프로그래밍

190 0028 MAXLEN WORD BUFEND-BUFFER 000000 2.3.5 제어 섹션과 프로그램 링크 190 0028 MAXLEN WORD BUFEND-BUFFER 000000 H RDREC 000000 00002B R BUFFER LENGTH BUFEND T 000000 1D B410 B400 B440 77201F E3201B 332FFA DB201B A004 332009 57900000 b850 T 00001D 0E 3B2FE9 13100000 4F0000 F1 000000 M 000018 05 +BUFFER M 000021 05 +LENGTH M 000028 06 +BUFEND 190행 M 000028 06 -BUFFER E 시스템 프로그래밍

2.4 어셈블러 설계 선택사항 2.4.1절 2.4.2절 1패스 어셈블러 구조와 논리 다중 패스 어셈블러 전방 참조의 허용(이중 패스의 확장) 시스템 프로그래밍

2.4.1 단일 패스 어셈블러 단일 패스 단일 패스의 두가지 유형 전방 참조 문제의 해결 목적 프로그램을 직접 메모리에 생성 데이터 항목 참조 전에 미리 정의 기억 장소 예약문을 프로그램의 앞 쪽에 위치 완전 제거 불가 : 루프 벗어나는 경우 여전히 사용 단일 패스의 두가지 유형 목적 프로그램을 직접 메모리에 생성 보통 목적 프로그램 예제 프로그램(그림 2.18) 시스템 프로그래밍

2.4.1 단일 패스 어셈블러 적재 실행(load-and-go) 어셈블러 목적 프로그램의 생성 : 전방 참조 취급이 수월 즉시 실행을 위해 목적 프로그램을 메모리에 생성 로더가 필요 없음 목적 프로그램의 로드의 번거로움을 피할 수 있음 단일 패스는 추가적인 패스의 부담을 덜어 줌 목적 프로그램의 생성 : 전방 참조 취급이 수월 원시 프로그램의 읽는 순서대로 목적 코드 명령어 생성 전방 참조 기호 : 주소 필드는 결정 않고 남겨 둠 피연산자의 기호를 SYMTAB에 기입 정의되지 않았음을 표시(플래그) 기로 정의문을 만나면 적절한 주소를 명령어에 삽입 시스템 프로그래밍

적재 실행(load-and-go) 어셈블러 메모리 주소 내용 기호 값  1000 454F4600 00030000 00xxxxxx xxxxxxxx LENGTH 100C RDREC * 2013 1010 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx THREE 1003  …… ZERO 1006 WRREC * 201F 2000 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxx14  EOF 1000 2010 1009 48-- -- 00100C 281006 30 -- -- 48-- ENDFIL * 201C    RETADR 1009 2020 -- 3C2012 BUFFER 100F CLOOP 2012 FIRST 200F …… …… 시스템 프로그래밍

      메모리 주소 내용 기호 값 1000 100C 203D 1010 1003 …… 1006 * 201F 00030000 00xxxxxx xxxxxxxx LENGTH 100C RDREC 203D 1010 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx THREE 1003  …… ZERO 1006  WRREC * 201F 2000 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxx14 EOF 1000 2010 1009 4820 3D 00100C 281006 30 20 24 48-- ENDFIL 2024 2031  RETADR 1009 2020 -- 3C2012 0010000C 100F0010 030C100C BUFFER 100F  2030 48-- -- 08 10094C00 00F10010 00041006 CLOOP 2012 2040 001006E0 20393020 43D82039 281006 30 FIRST 200F 2050 -- -- 5490 0F MAXLEN 203A   INPUT 2039 …… EXIT * 2050 RLOOP 2043 …… …… 시스템 프로그래밍

2.4.1 단일 패스 어셈블러 목적 프로그램 생성(단일 패스 어셈블러) 외부 저장 장치가 속도가 느리거나 사용이 불편할 경우 전방 참조 문제 : 로더에 의해 해결 H COPY 001000 00107A T 001000 09 454F46 000003 000000 T 00200F 15 141009 480000 00100C 281006 300000 480000 3C2012 T 00201C 02 2024 T 002024 19 001000 0C100F 001003 0C100C 480000 081009 4C0000 F1 001000 T 002013 02 203D T 00203D 1E 041006 001006 E02039 302043 D82039 281006 300000 54900F …… T 002050 02 205B T 00205B 07 10100C 4C0000 05 …… E 000000 시스템 프로그래밍

2.4.2 다중 패스 어셈블러 이중 패스 어셈블러의 어려움 다중 패스 어셈블러 ALPHA EQU BETA BETA EQU DELTA DELTA EQU 1 다중 패스 어셈블러 기호 정의 처리 위한 패스만큼 허용 프로그램 전체에서 패스를 두 번 이상 수행할 필요는 없음 시스템 프로그래밍

2.4.2 다중 패스 어셈블러 다중 패스 어셈블러 실행 예(그림 2.21) HALFSZ EQU MAXLEN/2 MAXLEN EQU BUFEND-BUFFER PEVBT EQU BUFFER-1 BUFFER RESB 4096 BUFEND EQU * 1번 문장의 패스 1 수행 결과의 기호 테이블 수식 내 정의되지 않은 기호가 하나 있음을 표시 HALFSZ &1 MAXLEN/2 수식 정의 값 정의되지 않은 기호 저장 MAXLEN * HALFSZ 종속되는 기호 리스트 시스템 프로그래밍

2.4.2 다중 패스 어셈블러 2번 문장의 패스 1 수행 결과의 기호 테이블 MAXLEN EQU BUFEND-BUFFER * MAXLEN HALFSZ &1 MAXLEN/2 MAXLEN &2 BUFEND-BUFFER HALFSZ BUFFER * MAXLEN 시스템 프로그래밍

2.4.2 다중 패스 어셈블러 PEVBT EQU BUFFER-1 3번 문장의 패스 1 수행 결과의 기호 테이블 BUFEND * MAXLEN HALFSZ &1 MAXLEN/2 PREVBT &1 BUFFER-1 MAXLEN &2 BUFEND-BUFFER HALFSZ BUFFER * MAXLEN PREVBT 시스템 프로그래밍

2.4.2 다중 패스 어셈블러 4번 문장의 패스 1에서의 주소 배정이 1034(16진수) 1034 BUFFER RESB 4096 BUFEND * MAXLEN HALFSZ &1 MAXLEN/2 PREVBT 1033 MAXLEN &1 BUFEND-BUFFER HALFSZ BUFFER 1034 시스템 프로그래밍

2.4.2 다중 패스 어셈블러 2034 BUFEND EQU * 5번 문장의 패스 1에서의 주소 배정이 2034(16진수) HALFSZ 800 PREVBT 1033 MAXLEN 1000 BUFFER 1034 시스템 프로그래밍