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