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 처럼 목적 코드의 생성
시스템 프로그래밍
컴퓨터공학부