Transcript +JSUB RDREC
2.2.1 명령어 형식과 주소 지정 방식 B 상대 주소 지정 방식 PC 상대 주소 지정 방식과 거의 동일 베이스 레지스터의 내용은 프로그래머가 관리 어셈블러 지시자(BASE) 13 BASE LENGTH : B 레지스터의 내용은 LENGTH의 주소 NOBASE가 나타날 때까지 영향이 있음 160 104E STCH BUFFER,X 57C003 명령어 포함되어야 할 변위(displacement) 0036(TA) – 0033((B)) = 0003(disp) opcode n i x b p e disp 0101 01 1 1 1 1 0 0 0000 0000 0011 5 7 C 0 0 3 시스템 프로그래밍 컴퓨터공학부 2.2.1 명령어 형식과 주소 지정 방식 20행 20 000A LDA LENGTH 032026 명령어 포함되어야 할 변위(displacement) 0033(TA) – 000D((PC)) = 0026(disp) opcode n i x b p e disp 0000 00 1 1 0 0 1 0 0000 0010 0110 0 175행 3 2 0 2 6 175 1056 EXIT STX LENGTH 134000 명령어 포함되어야 할 변위(displacement) 0033(TA) – 0033((B)) = 0000(disp) opcode n i x b p e disp 0001 00 1 1 0 1 0 0 0000 0000 0000 1 시스템 프로그래밍 3 4 0 0 0 컴퓨터공학부 2.2.1 명령어 형식과 주소 지정 방식 즉시(immediate) 주소 지정 방식 55 0020 LDA #3 010003 opcode n i x b p e disp 0000 00 0 1 0 0 0 0 0000 0000 0011 0 1 0 0 0 3 133 103C +LDT #4096 75101000 opcode n i x b p e address 0111 01 0 1 0 0 0 1 0000 0001 0000 0000 0000 7 5 1 0 1 0 0 0 시스템 프로그래밍 컴퓨터공학부 2.2.1 명령어 형식과 주소 지정 방식 12 0003 LDB #LENGTH 69202D opcode n i x b p e disp 0110 10 0 1 0 0 1 0 0000 0010 1011 6 9 2 0 2 D 시스템 프로그래밍 컴퓨터공학부 2.2.2 프로그램 재배치 프로그램의 메모리 로드 : 메모리 여유가 있을 때 프로그램 로드 SIC 어셈블러의 명령어 55 101B LDA THREE 00102D 주소 102D에 있는 값이 로드되어야 함(시작 주소 1000) 시작 주소가 2000 번이면 102D에는 다른 값이 들어 있음 프로그램 재배치의 예(그림 2.7) 0000 ……. 0006 ……. 1036 ……. 1076 ……. 4B101036 (+JSUB RDREC) ……. 5000 RDREC B410 ……. ……. 5006 ……. 6036 ……. 6076 ……. 4B106036 (+JSUB RDREC) ……. 7420 ……. RDREC B410 7426 ……. ……. 8456 ……. 8496 시스템 프로그래밍 ……. 4B108456 (+JSUB RDREC) ……. RDREC B410 ……. 컴퓨터공학부 2.2.2 프로그램 재배치 재배치 가능 프로그램(Relocatable program) 주소와 상수 값의 구분 불가능 수정이 요구되는 부분의 파악 필요 RDREC(그림 2.7) 시작위치에서 항상 1036Byte에 떨어진 곳에 있음 1. 어셈블러 목적 코드 생성시 시작 위치에 대한 상대적 주소를 RDREC의 주소로 삽입 위치 계수기(LOCCTR)을 0으로 초기화 2. 어셈블러는 로더를 위한 명령어를 만듬 명령어 로드 시간에 JSUB 명령어에 시작 주소를 더하게 함 수정 레코드(Modification Record)로 구현 열1 M 열 2-7 수정될 주소의 프로그램에서의 상대적 시작 위치 열 8-9 하프-바이트로 표현된 수정될 필드의 길이 (JSUB 주소필드는 20비트= 5 하프 바이트) 시스템 프로그래밍 컴퓨터공학부 2.2.2 프로그램 재배치 JSUB 명령어의 수정 레코드(예) M00000705 실행 시작 주소 : 000007 주소 필드 길이 : 5 하프 바이트 4B101036에서 처음 12비트(4B1)은 변하지 않음 나머지 비트는 프로그램 시작 주소를 더함 수정 레코드의 작성 35행, 65행 직접 주소 지정 방식이 나타나는 부분 나머지는 수정될 필요 없음(즉시, PC 또는 B 상대 주소 지정 방식) 로더의 프로그램의 로드(3장) 시스템 프로그래밍 컴퓨터공학부 2.3 기계 독립적인 어셈블러의 특성 기계 구조와 밀접한 연관이 없는 어셈블러의 일반적인 특성 프로그래머의 편리성 소프트웨어의 환경 2.3.1절 리터럴(테이블 논리 포함) 2.3.2절 어셈블러 지시자(EQU, ORG) 2.3.3절 수식의 사용, 수식의 종류와 계산 방법 2.3.4-5절 프로그램 블록과 제어 섹션 시스템 프로그래밍 컴퓨터공학부 2.3.1 리터럴 리터럴(literal) 명령어에서 상수형 피연산자의 값을 사용하는 것이 편리함 이 때의 상수형 피연산자 ‘=‘ 로 표시 45 001A ENDFIL 리터럴의 식별 LDA =C’EOF 032010 어셈블러마다 다름, 특수 기호 사용 리터럴과 즉시(immediate) 피연산자의 차이 즉시(immediate) 피연산자 : 값이 기계 명령어의 일부 리터럴 프로그래머는 명시적으로 상수 정의 어셈블러가 다른 메모리 위치 상수 값 생성(BYTE or WORD의 역할 수 행) 이 메모리 위치(주소)가 기계 명령어의 목표 주소(TA) 시스템 프로그래밍 컴퓨터공학부 2.3.1 리터럴 리터럴과 즉시 피연산자 비교 리터럴(disp = TA-(PC) = 002D-001D = 0010) 45 001A ENDFIL LDA =C’EOF 032010 opcode n i x b p e disp 0000 00 1 1 0 0 1 0 0000 0010 0000 0 3 2 0 1 0 즉시 피연산자 55 0020 LDA #3 010003 opcode n i x b p e disp 0000 00 0 1 0 0 0 0 0000 0000 0011 0 1 0 0 0 3 시스템 프로그래밍 컴퓨터공학부 2.3.1 리터럴 리터럴 저장소(literal pool) 리터럴 피연산자 저장 프로그램의 끝(END 지시자 다음)에 위치 배정된 주소와 생성된 데이터의 값(예 =X’05’) 리터럴 지시자(LTORG) 프로그램 끝이 아닌 목적 프로그램의 다른 위치에 저장(93행) 프로그램의 끝에 만 위치 할 경우 93행의 =C’EOF’는 주소 1073에 위치하게 됨 프로그램 계수기 주소 지정 방식 사용 불가(disp=1073-001D=1056) 따라서 확장 형식(형식 4)를 사용해야 함 LTORG 저장소에 위치한 리터럴은 프로그램 끝에 나타나지 않음 중복 식별(=X’05’) 시스템 프로그래밍 컴퓨터공학부 2.3.1 리터럴 어셈블러의 리터럴 처리 자료구조 : 리터럴 테이블(LITTAB) 리터럴 이름 피연산자의 값과 길이 리터럴에 배정된 주소 패스 1 리터럴 발견 하면 LITTAB를 조사 나타나 있으면 무처리, 나타나면 LITTAB에 추가 (주소 미 배정) LTORG, 프로그램 끝 만나면 주소 배정되지 않은 리터럴 주소 배정 위치 계수기 증가 패스 2 LITTAB에서 피연산자의 주소를 얻어 냄 BYTE 나 WORD 처럼 목적 코드의 생성 시스템 프로그래밍 컴퓨터공학부