Assemblers (2)

공부하자·2022년 9월 26일
1

시스템프로그래밍

목록 보기
3/11

Recall to Fig. 2.1 for SIC Machine 2


Machine-dependent Assembler Features

SIC/XE로 바뀐 버전으로!

  • Assemblers depend on instruction format and addressing mode.
  • Figure 2.6 shows the example program from Fig. 2.1 with object code as it might be rewritten to take advantage of the SIC/XE instruction set.
    • Indirect addressing is indicated by adding the prefix “@” to the operand
      • Ex) J @RETADR
    • Immediate operands are denoted with the prefix “#”
      • Ex) COMP #0
    • Format 4 instruction (= 4-byte extended format) is specified with the prefix “+” added to the operation code
      • Ex) +JSUB RDREC
    • The assembler directive “BASE” is used in conjunction with base relative addressing
      • Ex) BASE LENGTH

It is the programmer’s responsibility to specify this form of addressing when it is required!

  • 어셈블러는 명령 형식 및 주소 지정 모드에 따라 달라진다.
  • Fig 2.6은 SIC/XE 명령어 세트를 활용하도록 다시 작성할 수 있는 객체 코드와 함께 그림 2.1의 예제 프로그램을 보여준다.
    • Indirect addressing은 피연산자에 접두사 "@"를 추가하여 나타낸다.
      • 예) J @RETADR

        Indirect addressing할 때 a. @ 없으면 codeflow가 return address로 바로 점프. @ 있어서 return address에 저장되어 있는 주소로 jump한다. 한 번 더 memory에 access한다.

    • Immediate operands는 접두사 "#"으로 표시된다.
      • 예) COMP #0

        #. operand value로 사용된다.

    • Format 4 instruction(= 4바이트 확장 형식)은 작업 코드에 접두사 "+"를 추가하여 지정된다.
      • 예) +JSUB RDREC

        +붙이면 assembler가 format 4로 translation한다. 기본적으로 format 4는 20 bit address field. 어떤 메모리 영역이든 접근할 수 있다는 장점이 있다.

    • 어셈블러 지시어 "BASE"는 기본 상대 주소 지정과 함께 사용된다.
      • 예) 기준 길이

        base relative addressing. directive를 사용해야 한다. 어떤 address value가 저장되어 있는지 assembler에게 알려준다.

필요할 때 format of addressing를 지정하는 것은 프로그래머의 책임이다!

어떤 addressing mode를 사용할지는 프로그래머의 책임이다.

[Fig. 2.6] SIC/XE Assembly Program with Object Code

LDB, BASE state를 통해 초기화
'#' 자체가 operand value로 사용된다.
결과적으로 length의 주소가 legister b에 저장된다.
base directive를 통해 length에게 알려준다.
어셈블러가 필요하면 base relative addressing을 사용할 것이다.

+jsub에서 format 4를 사용할 것이다. 너무 멀리 떨어져 있기 때문에. 최소 13bit가 필요한데 12bit밖에 없다. 프로그래머의 책임이다.

J @RETADR

EOF value를 쓰는 것 이후. 가장 큰 차이는 프로그램을 종료하기 위해 J instruction을 사용한다. 이전에는 return address를 l로 가져오고 rsub로 구현했다. j만으로 같은 효과를 내고 있다. 이 instruction이 indirect addressing을 사용하고 있기 때문이다. operating system으로부터 넘겨받은 return address가 저장된다. return address를 보고 걔로 jump한다. indirect니까 한 번 더 접근해야 한다.

위 register를 clear instruction으로 초기화한다.

처음에 X,A,S register를 초기화시킨다.
4096라는 값을 T에 로딩한다. 4096은 버퍼의 총 크기를 말하는 상수이다. instruction이 immediate addressing과 format 4를 사용하고 있다. 값 자체가 opernad value로 사용된다. hexa로 표현하면 1000이다. 이 값을 나타내려면 최소 13비트가 필요하다. format4는 12까지만 표현할 수 있기 때문에 개발자는 format4로 constant number로 사용하려 한다.
20bit address field를 가지고 있어서 4096을 표현할 수 있다.

input device 상태를 TD와 JEQ로 체크하고 준비되면 1bit씩 읽어들인다.
COMPR을 통해 A,S를 비교한다. 읽어들인 값이 0과 같은지를 비교한다. A에는 읽어들인 값.
둘이 같다는 것이 HEXA decimal number로 0이고, eor을 읽엇다. 맞다면 STX로 jumb하고 아니면 buffer에 저장된다. buffer에 저장된 후 tixr을 사용한다. tixr은 포맷팅 instruction. register x 1증가시키고 t와 비교한다. t는 4096(전체 버퍼 길이)로 세팅되어 있고, 읽어들인 데이터 크기와 버퍼 사이즈 보다 작다는 것은 공간이 남아서 더 읽어들일 수 있다는 뜻이다.버퍼가 차 있다면 exit으로 읽어들인 길이를 lengh로 저장하고 rsub를 통해서 벗어난다.

legister t를 체크하고 buffer에서부터 1byte씩 옮겨서 wd로 write하겠다. tixr로 +1 증가시키고 T를 수행한다.

The Magic

rule을 기억하면 object code로 쉽게 traslate할 수 있다. hexa-decimal number로 나누면 opcode/n에는 2개, x/b/p/e는 1개, address는 3개 있다.

What does SIC/XE Assembler Do?

  • Two main differences of Fig. 2.6 version from Fig. 2.1
    • The use of register-to-register instructions, wherever possible
      • Ex) COMP ZERO (in Fig. 2.1) -> COMPR A,S(in Fig. 2.6)
    • The use of immediate & indirect addressing, as much as possible
  • These changes take advantage of the more advanced SIC/XE architecture to improve the execution speed of the program
    • Register-to-register instructions are faster than the corresponding register-to-memory operations because they are shorter and, more importantly, because they do not require another memory reference
    • When using immediate addressing, the operand is already present as part of the instruction and need not be fetched from anywhere
    • When using indirect addressing, it often avoids the need for another instruction (as in the “return” operation on line 70).
  • 그림 2.1과 그림 2.6 버전의 두 가지 주요 차이점
  • 가능한 경우 register-and-register 지침 사용
    • 예) COMP ZERO(그림 2.1) -> COMPR A,S(그림 2.6)

      2.6과 2.1의 차이 보기! 메모리보다 register에 있는 값을 사용할 수록 속도가 빨라진다. format2가 size가 더 빠르다. 뒤가 더 빠르다.

  • 가능한 한 immediate & indirect addressing 사용

    operand value를 더 이상 메모리에서 찾을 필요 없이 instruction에서 찾을 수 있다. (+) 사용하는 instruction 개수가 적을수록 프로그램 속도가 빨라질 것이다.

  • 이러한 변경은 보다 진보된 SIC/XE 아키텍처를 활용하여 프로그램의 실행 속도를 향상시킨다.
    • Register-to-register instructions은 해당 register-to-memory operations보다 더 짧으며, 더 중요한 이유는 다른 메모리 참조가 필요하지 않기 때문이다.
    • immediate addressing을 사용할 때 피연산자는 이미 instruction의 일부로 존재하므로 다른 곳에서 가져올 필요가 없다.
    • indirect addressing을 사용할 때, 그것은 종종 다른 명령의 필요성을 피한다 (70행의 "반환" 연산에서처럼).

가능하면 register-and-register instruction
가능하면 immediate & indirect addressing

Translation of Register-to-Register Instructions

  • The assembler must simply convert the mnemonic operation code to machine language (using OPTAB), and change each register mnemonic to its numeric equivalent.
    • Such a change of register mnemonic to numbers can be done with a separate table; however, it is often convenient to use SYMTAB for this purpose.
    • To do this, SYMTAB would be preloaded with the register names (A, X, etc) and their values (0, 1, etc).
      • A(0), X(1), L(2), B(3), S(4), T(5), F(6), PC(8), SW(9)
    • Ex) Line 150: 1049 COMPR A,S A004
  • 어셈블러는 니모닉 연산 코드를 기계어로 변환(OPTAB 사용)하고 각 레지스터 mnemonic을 등가인 숫자로 변경해야 한다.
    • register mnemonic을 숫자로 바꾸는 것은 별도의 표를 사용하여 수행할 수 있지만, 이러한 목적을 위해 SYMTAB를 사용하는 것이 종종 편리하다.
    • 이를 위해 SYMTAB에는 레지스터 이름(A, X 등)과 해당 값(0, 1 등)이 미리 로드된다.
      • A(0), X(1), L(2), B(3), S(4), T(5), F(6), PC(8), SW(9)
    • 예) Line 150: 1049 COMPR A,S A004

assembler는 mnemonic operation code를 기계어로 변환.

format2는 간단하다. mapping 정보를 이용해서 unique number로 바꾸어준다. mapping 정보는 어디선가 관리가 되어야하는데, 일반적으로는 symbolic label들과 함께 관리된다.

Translation of Register-to-Memory Instructions

  • Format 3 Instructions that refer to memory are normally assembled using either the program-counter relative or the base relative addressing mode.
    • In either case, the assembler must calculate a displacement to get the correct target address (i.e., to be assembled as part of the object instruction)
    • Target Address = (PC) or (B) + displacement
    • The resulting displacement must be small enough to fit in the 12-bit field in the instruction.
      • Base relative (disp: 0 to 4095)
      • Program-counter relative (disp: -2048 to +2047)
    • The assembler attempts to translate format 3 instructions using
      • PC relative, first;
      • Base relative (if the required displacement is out of range)
      • Error message generated (if displacement is invalid in both relative modes)
  • 메모리를 참조하는 Format 3 Instructions는 일반적으로 the program-counter relative 또는 the base relative addressing mode기본 상대 주소 지정 모드를 사용하여 assemble된다.
    • 어느 경우든 조립자는 정확한 대상 주소를 얻기 위해 변위를 계산해야 한다.(즉, 객체 명령의 일부로 조립되어야 함).
    • 대상 주소 = (PC) 또는 (B) + 변위
    • 결과 변위는 명령어의 12비트 필드에 적합할 정도로 작아야 한다.
      • Base relative (disp: 0 ~ 4095)
      • Program-counter relative (disp: -2048 ~ +2047)
    • 어셈블러는 다음을 사용하여 Format 3 instruction을 번역하려고 시도한다.
      • PC relatve, 먼저;
      • Base relative (필요한 변위가 범위를 벗어나는 경우)
      • 오류 메시지가 생성됨(변위가 두 상대 모드에서 모두 유효하지 않은 경우)

format3는 복잡하다. relative로 사용한다는 것은 assembler로 보여준다는 것.. target address는 이미 알고 있다. pc나 b를 가져와서 한다. displacement값이 구해지고 이것이 12bit address field에 들어간다.

Example of PC Relative Addressing (이해 필요)

STL RETADR 17202D

17____
17 다음 _ :xbpe
___:addr

첫번째 instruction을 object code(17202D)로 바꾸기. 어셈블리 코드부터 해석하면 appendix보면 14로 매핑이 되어 있다. 14를 hexadecimal number로 사용하는 게 아니라 아무런 prefix를 가지고 있지 않다. 3을 더해서 첫번째 hexadecimal number로 구했다.
target address와 pc address(어셈블러 예측)를 빼서 30-3=2D를 구할 수 있다. (02D)
필수 relative만 되어 있으므로 p만 1이고 2로 저장할 수 있다.

Example of PC Relative Addressing

displacement가 음수가 될 수 있음을 고려한다.

Another Example of Program-Counter Relative Addressing

PC Relative Addressing 예제. 까다로운 부분 : displacement value 구할 때 -가 나올 수 있다는 것이다.
PC Relative Displacement 값음 음수가 나올 수 있다. 음수를 2의 보수 표현법으로 바꿔줄 수 있어야 한다.
절댓값만 이진값으로 바꾼다. (1->0,0->1 바꿔주고 1을 더해준다.
binary 값 1111 1110.. -> FEC로 바꾼다.
fix라 2가 된다.

Translation of Format3 (Base Relative Addrssing) Instructions

  • The displacement calculation process for base relative addressing is much the same as for PC relative addressing
    • The assembler knows what the contents of the program counter will be at execution time.
    • The base register, on the other hand, is under control of the programmer. Therefore, the programmer must tell the assembler what the base register will contain during execution of the program so that the assembler can compute displacement
    • This is done with the assembler directive BASE
      • Ex) The statement BASE LENGTH (line 13) informs the assembler that the base register will contain the address of LENGTH. The preceding instruction (LDB #LENGTH) loads this value into the register during program execution
    • The directive NOBASE can be used to free the B register.
  • base relatvie addressing에 대한 변위 계산 프로세스는 PC relative addressing과 거의 동일하다.

    disp = TA-(B)

    • 어셈블러는 실행 시 프로그램 카운터의 내용이 무엇인지 알고 있다.
    • 그러나 base register는 프로그래머의 관리 하에 있다. 그러므로 프로그래머는 조립자가 변위를 계산할 수 있도록 프로그램을 실행하는 동안 기본 레지스터에 무엇이 포함될 것인지를 조립자에게 알려야 한다.

      가장 큰 특징. 프로그래머에 의해 결정된다.

    • 이 작업은 어셈블러 지시 BASE로 수행됩니다.
      • 예) BASE LENGTH (행 13) 문장은 조립자에게 베이스 레지스터에 LENGTH의 주소가 포함될 것임을 알려준다. 이전 명령(LDB #LENGTH)은 프로그램 실행 중에 이 값을 레지스터에 로드한다.
    • The directive NOBASE는 B 레지스터를 해제하는 데 사용할 수 있다.

Example of Base Relative Addressing

STCH 54+4 -> 57
B=33, TA=36, PC=1051, TA-(PC)=36-1051=-(1051-36)=-101B
36-33=3 , valid address value

base relative addressing 예제. 어셈블러가 됐다고 치고 instruction을 translation을 할 때 PC Relative addressing을 사용해야 한다. target address가 36이고 instruction을 실행할 때 pc register는 1051값을 가지게 된다.
target address에서 pc값을 뺐더니 음수가 된다.
2의 보수 표현법을 적용하지 않더라도 hexa decimal이 4개, 12bit를 넘어설 것을 예측할 수 있다.
displacement range 넘어가는 것을 알 수 있다.
그럼 assembler가 base relative를 적용해야 한다. p에서 b를 빼야 한다. 12비트로 나타낼 수 있다. 그럼 address field에 3이 들어간다.
xbpe. 4개 flag. index, base.
x,p relative. c와 동일.

Translation of Format 4 Instructions

  • If neither PC relative nor base relative addressing can be used (because the displacements required for both relative addressing modes are too large to fit into a 3-byte instruction), then the 4-byte extended instruction format must be used.
    • This 4-byte format contains a 20-bit address field, which is large enough to contain the full memory address
    • In this case, there is no displacement to be calculated
    • Note that the programmer must specify the extended format by using the prefix “+”. What if not specified by the programmer? … Our assembler attempts to translate the instruction as format 3 using
      • PC relative, first;
      • Base relative (if the required displacement is out of range)
      • Error message generated (if displacement is invalid in both relative modes)
  • PC relative addressing도 base relative addressing도 사용할 수 없다면 (두 상대 어드레싱 모드에 필요한 변위가 너무 커서 3바이트 명령어에 맞지 않기 때문에) 4바이트 확장 instruction format을 사용해야 한다.
    • 이 4바이트 형식에는 전체 메모리 주소를 포함할 수 있을 만큼 큰 20비트 주소 필드가 포함되어 있다.
    • 이 경우 변위 없음을 계산할 수 없다.
  • 프로그래머는 접두사 "+"를 사용하여 확장 형식을 지정해야 한다. 프로그래머가 지정하지 않으면 어떻게 될까? … 우리 어셈블러는 다음을 사용하여 명령어를 형식 3으로 번역하려고 시도한다.
    • PC relative, 먼저;
    • Base relative(필요한 변위가 범위를 벗어나는 경우)
    • 오류 메시지가 생성됨(변위가 두 상대 모드에서 모두 유효하지 않은 경우)

pc도 b도 사용할 수 없다면 4bit

Example of Format4 Instruction Translation

간단히 translation. format4 direct, target address가 바로 address field. 20bit. 전체 메모리 스페이스에 어떤 영역이든 나타낼 수 있다. 이 때 +를 사용해야 한다.

Translation of Immediate Addressing Instructions

  • The assembly of an instruction that specifies immediate addressing is simpler because no memory reference is involved.
    • The assembler will convert the immediate operand to its internal representation and insert it into the instruction
      • Ex) Line 55: 0020 LDA #3 010003
    • In the case the operand is too large to fit into the 12-bit displacement field, the 20-bit extended instruction format is called for.
      • Ex) Line 133: 103C +LDT #4096 75101000
    • What if the operand is too large even for the 20-bit address field?
      • Just define the operand value in a memory region, and use relative or direct addressing
    • In the case that the operand is the symbol, its address value is inserted into the instruction
      • If necessary, the displacement calculation is performed.
      • Ex) Line 12 : 0003 LDB #LENGTH 69202D
        • Immediate addressing + PC-relative addressing
  • 즉시 주소 지정을 지정하는 명령어의 어셈블리는 메모리 참조가 포함되어 있지 않기 때문에 더 간단하다.
    • 어셈블러는 즉시 피연산자를 내부 표현으로 변환하고 instruction에 삽입한다.
      • 예) Line 55: 0020 LDA #3 010003
    • 피연산자가 12비트 변위 필드에 맞지 않을 경우, 20비트 확장 명령 형식이 요구된다.
      • 예) Line 133: 103C +LDT #4096 75101000
    • 피연산자가 20비트 주소 필드에도 너무 크면 어떻게 할까?
      • 메모리 영역에서 피연산자 값을 정의하고 상대 또는 직접 주소 지정만 사용해라.
    • 피연산자가 기호인 경우, 피연산자의 주소 값이 명령어에 삽입된다.
      • 필요한 경우 변위 계산이 수행된다.
      • 예) Line 12:0003 LDB #LENGTH 9202D
        • Immediate addressing + PC-relative addressing

memory reference를 사용하지 않는다. instruction에 넣어주면 translation이 넘어가는 방식이다. 12bit로는 표현할 수 없는 상수를 써야할 때가 있다. 그럴 때는 판단해서 상수가 12bit를 넘어가면 format 4 instruction을 쓰도록 한다. 20bit까지는 integer 를 표현할 수 있다.
SIC에서는 기본적으로 integer 3byte. 20bit보다 넘는다면 메모리를 할당해서 실행한다. 예를 들어 word directive를 써서 integer 상수값 지정, resb로 word로 할당받은 다음 데이터를 받고 접근한다. 접근할 때는 format3,4 / relative,direct 등으로 접근할 수 있다.
만약 operand가 상수값이 아니라 symbolic label이라면 지칭하는 address value가 instruction에 들어가야 한다.

Program Relocation

  • Multiprogramming
    • Executing more than one program at a time while sharing the memory and other resources
    • Important to use memory without overlap or wasted space
    • Load program into memory wherever there is room for it
  • The assembler does not know the actual location of the memory where the program will be loaded.
    • The actual starting address of the program is NOT known until load time.
  • 멀티프로그래밍
    • 메모리 및 기타 리소스를 공유하는 동안 한 번에 둘 이상의 프로그램 실행
    • 중복되거나 낭비되는 공간 없이 메모리를 사용하는 것이 중요하다.
    • 공간이 있는 곳이면 어디든 메모리에 프로그램 로드
  • 어셈블러는 프로그램이 로드될 메모리의 실제 위치를 알지 못한다.
    • 프로그램의 실제 시작 주소는 로드 시간까지 알 수 없다.

program relocation. 하나의 machine dependent feature.
multiprogramming.
start directive로 설정한 시작 주소로 원하는 프로그램을 실제로 올릴 수 없다.
시작주소는 메모리에 올린 loader만 가지고 있다.
assembler가 메모리 주소를 몰라서 문제가 생길 수가 있다.

Fig. 2.7: Example of Program Relocation


3개의 프로그램을 돌려본다. start directive를 통해 address 0로 시작했다. 운좋게 메모리에 정확히 로드 되었다. 문제없이 동작할 것이다.
JSUB instruction을 보면 RDREC subroutine의 시작주소로 jump한다. code flow가 jump해서 실행할 것이다.
다음에 같은 프로그램을 시작하면 시작주소가 0일 것을 보장못한다. 다른 프로그램이 있다면 os가 다른 빈공간을 찾아서 target program을 로드할 것이다. 5000번째를 기점으로 코드가 동작한다.
문제는 object 코드에는 1036이라는 주소값이 박혀있었다는 것이다. 1036 지점으로 jump해서 동작할텐데 이미 다른 프로그램이 메모리 영역을 차지했다. 기본적으로 각 프로그램은 분리된 메모리 공간을 가지고 있고 보안상의 이유로 다른 프로그램에 접근할 수 없다. invalid한 접근이라 생각하고 프로그램을 kill한다.
이런 상황을 피하기 위해서 address 값을 조정해야 한다. 이를 loader가 수행한다. instruction을 찾아서 바꿔준다. 이 값은 덧셈으로 구할 수 있다.
세 번째 프로그램도 마찬가지로 진행한다.
issue는 어떻게 loader가 instruction을 파악하는 것이냐이다.


  • The assembler informs the loader about the parts of the object program that need modification (-> relocatable object program)

    • Refer to Figure 2.7
  • Solution for relocation problem

    • The assembler produces command for the loader to add the beginning address to some instructions’ address fields -> This command will be a part of the object program (with Modification record).
    • The loader generates addresses relative to the start of the program and modifies the instructions.
  • 어셈블러는 로더에게 객체 프로그램 중 수정이 필요한 부분을 알려준다(-> 재배치할 수 있는 객체 프로그램)

    • 그림 2.7을 참조해라.
  • 재배치 문제에 대한 해결책

    • 어셈블러는 로더를 위해 command를 생성하여 일부 명령어의 주소 필드에 시작 주소를 추가한다. -> 이 명령은 object 프로그램 (Modification record 포함)의 일부가 된다.

      Modification record의 형태로 제공된다.

    • 로더는 프로그램 시작과 관련된 주소를 생성하고 명령어를 수정한다.

  • Modification records
    • “M”, starting location, length of the address field to be modified
      • Col. 1 M
      • Col. 2-7 Starting location of the address field to be modified, relative to the beginning of the program (Hex)
        • The starting location is the location of the byte containing the leftmost bits of the address field to be modified.
      • Col. 8-9 Length of the address field to be modified, in half-bytes (Hex)
  • No modification
    • Either when an instruction operand is not a memory address, like the statement ‘CLEAR S’
    • Or when the operand is specified using PC relative or base relative addressing, like the statement ‘STL RETADR’

      relative, format3도 수정할 필요 없다. relative addressing을 사용한다. 주소값으로부터의 거리(displacement)값이 저장되어 있다. 시작주소가 바뀐다고 바뀌는 값이 아니다. 상대적인 거리이기 때문이다.

  • Modification Record
    • "M", 수정할 주소 필드의 시작 위치, 길이
      • Col. 1 M

        Modification record구나

      • Col. 2-7 주소 필드의 시작 위치 수정 예정, 프로그램 시작 위치 (Hex)

        시작주소 확인

        • 시작 위치는 수정할 주소 필드의 가장 왼쪽 비트가 들어 있는 바이트의 위치이다.
      • Col. 8-9 수정할 주소 필드의 길이, 반 바이트(16진수)

        address field의 길이

  • 수정 없음
    • 명령 피연산자가 'CLEAR S' 문처럼 메모리 주소가 아닌 경우

      format 1,2 수정 필요 없다.

    • 또는 'STL RETADR' 문과 같이 PC relative 또는 base relative 주소 지정을 사용하여 피연산자를 지정한 경우

      relative, format3는 "relative addressing"이다. relative addressing은 "relative addressing"이다. 주소값으로부터의 거리(displacement)값이 저장되어 있다. 시작주소가 바뀐다고 바뀌는 값이 아니다. 상대적인 거리이기 때문이다.


  • In summary, the only parts of the program that require modification at load time are those that specify direct addresses (not relative addresses).
    • For SIC/XE program, direct addresses are found in Format 4 instructions.
  • Fig. 2.8 shows the complete object program
  • 요약하자면, 로드 시 수정해야 하는 프로그램의 유일한 부분은 (상대 주소가 아닌) 직접 주소를 지정하는 부분이다.
    • SIC/XE 프로그램의 경우 직접 주소는 Format 4 지침에 있다.
  • 그림 2.8은 전체 객체 프로그램을 보여준다.

결론적으로는 direct address만 handle해줘야 한다. SIC/XE에서는 format4가 그렇다. (+) SIC에서는 indexing을 제외하고 전부 고려해야 한다.

Fig. 2.8: Object Program (corresponding to Fig. 2.6)

3개의 format4 instruction. 밑줄친 address field는 다 수정해야 한다.
M첫번째를 보면 7을 가지고 있다. 수정해야하는 address field의 주소값. object code들이 0번째 주소에 로딩이 되어야 한다. 0번째를 기준으로 7도 정해진 것이다. 첫 번째 instruction, 0번째 주소에 로드될 것이다. 다음 바이트는 1번, 그다음 바이트는 2번까지 차지를 할 것이다. 다음 instruction이 3번으로 시작할 것이다. 이런식으로 counting하면 format4가 6번째 주소가 올라가고 7번째 주소에는 byte가 들어있다. byte가 address field 왼쪽 field, 왼쪽 4bit를 포함하고 있다. 로더는 7번째 위치에 가서 오른쪽 부터가 address field임을 인지한다. 길이가 help byte로 나와있다. 5개의 hexa decimal number까지가 address field라는 것을 알 수 있다. 시작주소 값을 더해주면 적절하게 수정할 수 있다. loader가 메모리에 올릴 때 수정이 될 것이다.

profile
아주대학교 수업 기록

0개의 댓글