구현하여 완성시키는 것을 목표로 한다. 기존에 구현된 명령어로는 lw, sw, ori, jump, lui, llo,
lhi 명령어가 있다. 명령어의 구현은 PLA_AND.txt와 PLA_OR.txt를 완성하는 것으로 구현할
수 있다. PLA_AND에는 Opcode와 Function에 따라 Decoding을 통해 명령어를 구별하는 역
할을 수행하며, PLA_OR에서는 각 명령어에 맞는 control를 위한 signal을 조정하는 역할을
수행한다.
SUBU의 동작은 $s와 $t 레지스터로부터 값을 불러와 해당 값을 unsigned sub 연산
을 수행한 뒤 이를 $d에 저장한다. 해당 명령은 R-type임으로 Opcode는 000000 이
며 function은 100011 이다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction
은 op, $s, $t, $d, func으로 분리된다. Register File은 2 개의 주소를 읽고 이를 쓰는 동
작을 수행함으로 RegDst의 동작은 01 이 수행된다. 또한 쓰는 동작을 수행함으로
RegWrite 동작 또한 1 로 수행된다. RF를 나온 데이터 두 개를 연산하게 된다. 이로
인해 ARUsrcB는 00 으로 동작한다. ALUctrl의 경우 해당 연산은 input의 위치를 바
꾸지 않고 shift 또한 하지 않음으로 0 x로 동작한다. 또한 immediate value를 쓰지
않음으로 EXTmode = x이다. ALUop는 Unsigned a-b 동작인 00111 로 설정된다. 메모리
는 사용되지 않음으로 MemWrite = 0, DatWidth = xxx로 설정되며, ALU 데이터를
register로 보내기 때문에 MemtoReg = 0이 된다. RegDatSel는 ALU/MEM의 데이터를
보내야 하기 때문에 00 으로 설정된다. pc = pc+4로 동작해야 함으로 Branch = 000,
jump동작은 하지 않기 때문에 jump = 00으로 동작한다.
동작의 의도는 다음과 같다. lui와 ori를 통해 만들어진 0 x 12345678 과 0 x 11223344
를 subu하는 동작을 수행하여 해당 결과를 관찰한다. 이를 통한 결과는 아래와
같이 나왔다.
해당 결과를 살펴보면 기존에 ori lui 동작은 주어진 명령어이기 때문에 정상적으
로 동작한다. 5 번째 동작에서 subu $ 6 , $3, $5 동작을 수행하였을 때 2 개의 값이 alu
에서 subu연산을 하여 0 x 01122334 로 값이 바뀌어 저장되는 것을 볼 수 있다. 이
를 통해 해당 명령어가 정상적으로 동작함을 알 수 있다.
XOR의 동작은 $s와 $t 레지스터로부터 값을 불러와 해당 값을 xor 연산을 수행한
뒤 이를 $d에 저장한다. 해당 명령은 R-type임으로 Opcode는 000000 이며 function
은 100110 이다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction 은 op, $s, $t, $d, func으로 분리된다. Register File은 2 개의 주소를 읽고 이를 쓰는 동 작을 수행함으로 RegDst의 동작은 01 이 수행된다. 또한 쓰는 동작을 수행함으로 RegWrite 동작 또한 1 로 수행된다. RF를 나온 데이터 두 개를 연산하게 된다. 이로 인해 ARUsrcB는 00 으로 동작한다. ALUctrl의 경우 해당 연산은 input의 위치를 바 꾸지 않고 shift 또한 하지 않음으로 0 x로 동작한다. 또한 immediate value를 쓰지 않음으로 EXTmode = x이다. ALUop는 Bitwise XOR 동작인 00011 로 설정된다. 메모리 는 사용되지 않음으로 MemWrite = 0, DatWidth = xxx로 설정되며, ALU 데이터를 register로 보내기 때문에 MemtoReg = 0이 된다. RegDatSel는 ALU/MEM의 데이터를 보내야 하기 때문에 00 으로 설정된다. pc = pc+4로 동작해야 함으로 Branch = 000, jump동작은 하지 않기 때문에 jump = 00으로 동작한다.
해당 연산의 검증은 subu 연산 이후로 실행하여 검증한다. 해당 동작은 $ register에 $3(0x 12345678 )과 $5( 0 x 11223344 )를 xor 연산을 수행한 값을 저장한다.
해당 결과를 살펴보면 6 번째 동작에서는 $3과 $5 레지스터의 값을 읽어와서 xor
연산을 한 값인 o_result가 정상적인 값을 출력하는 모습을 보인다. 그리고 해당
데이터가 RF로 다시 들어가 저장된다. pc의 값은 pc+4로 바뀌는 것 또한 정상적으
로 동작하기 때문에 해당 명령어는 정상적으로 동작하는 것을 알 수 있다.
SRA의 동작은 $t register로부터 값을 불러와 해당 값을 shift amount의 크기만큼
ASR 연산을 수행한 뒤 이를 $d에 저장한다. 해당 명령은 R-type임으로 Opcode는
000000 이며 function은 000011 이다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction
은 op, $t, $d, sa, func으로 분리된다. Register File은 $t 주소를 읽고 이를 $d 주소에 쓰는 동작을 수행함으로 RegDst의 동작은 01 , RegWrite 동작은 1 로 수행된다. RF를 나온 데이터 b를 연산하게 된다. 이로 인해 ARUsrcB는 00 으로 동작한다. ALUctrl의 경우 해당 연산은 input의 위치를 바꾸지 않고 sa만큼 shift를 진행함으로 01 로 동 작한다. 또한 immediate value를 쓰지 않음으로 EXTmode = x이다. ALUop는 ASR (b>>>sa) 동작인 01111 로 설정된다. 메모리는 사용되지 않음으로 MemWrite = 0, DatWidth = xxx로 설정되며, ALU 데이터를 register로 보내기 때문에 MemtoReg = 0이 된다. RegDatSel는 ALU/MEM의 데이터를 보내야 하기 때문에 00 으로 설정된다. pc = pc+4로 동작해야 함으로 Branch = 000, jump동작은 하지 않기 때문에 jump = 00으로 동작한다.
해당 동작은 이전 테스트 이후로 덧붙어서 진행되었다. xor 이후에 lui를 통해 $ 에 0 x 80000000 을 넣어준다. 그 후 sra를 통해 0 x 80000000 을 ASR 4(사진 상 오타)를 진행한 값을 $8에 넣어주는 것을 관찰한다. 해당 결과는 다음과 같다.
해당 동작을 보았을 때 $2에 0 x 80000000 이 정상적으로 저장되어 있다. 이후에 sra 를 진행하였을 때 $2에 있는 값이 $t 위치에 정상적으로 읽혔다. 그리고 해당 값 의 MSB는 1 이기 때문에 ASR 4 를 진행하였을 때 상위 비트에 1 이 정상적으로 추 가되어 0 xF8 000000 으로 값이 바뀌어 $d에 저장된다는 것을 볼 수 있다. 이를 통 해 해당 동작이 정상적으로 이루어짐을 알 수 있다.
BNE의 동작은 $s, $t register로부터 값을 불러와 두 값이 같지 않을 경우
immediate value를 sign extension한 값을 pc값과 더하여 현재 실행하는 pc위치를 이
동시킨다. 해당 명령은 i-type임으로 Opcode는 000101 이며 function은 없다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction
은 op, $s, $t, i으로 분리된다. Register File은 $s, $t 주소를 읽는 동작만을 수행함으
로 RegDst의 동작은 00 , RegWrite 동작은 0 로 수행된다. RF를 나온 데이터 a, b를
연산하게 된다. 이로 인해 ARUsrcB는 00 으로 동작한다. ALUctrl의 경우 해당 연산
은 input의 위치를 바꾸지 않고 shift를 진행하지 않음으로 0 x로 동작한다. 또한
immediate value는 sign extension 임으로 EXTmode = 1 이다. ALUop는 a-b 동작인
00110 로 설정된다. 메모리는 사용되지 않음으로 MemWrite = 0, DatWidth = xxx로 설
정되며, ALU 데이터를 register에 사용되지 않기 때문에 MemtoReg = x이 된다.
RegDatSel는 사용되지 않기 때문에 xx으로 설정된다. pc는 ALU에서 비교한 값이 같
지 않을 경우 branch를 해야 함으로 Branch = 101 , jump 동작은 하지 않기 때문에
jump = 00으로 동작한다.
bne의 테스트는 다음과 같이 이루어진다. 이전에 sra 동작 이전에 lui 동작과 2 번
의 bne 동작, 그리고 x동작 2 번을 추가한다. lui를 통해 $ 2 와 $4에는 0 x 80000000 이
저장된 상태며 $ 3 에는 12345678 이 저장된 상태다. 첫번째 bne에서는 두 값이 같
음으로 branch되지 않아야 하며, 두번째 bne에서는 두 값이 다름으로 0x2만큼 주
소를 추가하여 x로 채워진 두 값을 건너 뛴 sra로 이동해야 한다. 실행 결과는 다
음과 같다.
bne의 결과를 살펴보았을 때 첫 번째 bne에서는 $ 2 와 $ 4 의 값이 alu를 통해 같음
을 확인하여 branch에서 101 신호가 존재하여도 branch가 되지 않는 모습을 보인
다. 하지만 두 번째 bne에서는 $ 2 와 $ 3 의 값이 alu를 통해 같지 않은 것이 branch
로 전달되어 branch가 진행되어 주소가 4 + 8 ( 2 << 2)만큼 이동하여 sra가 실행되는
것을 볼 수 있다. 이를 통해 해당 명령어가 정상적으로 설계되었음을 알 수 있다.
BLEZ의 동작은 $s, register로부터 값을 불러와 해당 값이 ($s <= 0 )를 만족할 경우
immediate value를 sign extension한 값을 pc값과 더하여 현재 실행하는 pc위치를 이
동시킨다. 해당 명령은 i-type임으로 Opcode는 000110 이며 function은 없다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction 은 op, $s, i으로 분리된다. Register File은 $s 주소를 읽는 동작만을 수행함으로 RegDst의 동작은 00 , RegWrite 동작은 0 로 수행된다. RF를 나온 데이터 a와 0 을 연 산하게 된다. 이로 인해 ARUsrcB는 10 으로 동작한다. ALUctrl의 경우 해당 연산은 input의 위치를 바꾸지 않고 shift를 진행하지 않음으로 0 x로 동작한다. 또한 immediate value는 sign extension 임으로 EXTmode = 1 이다. ALUop는 b가 0 이기 때문 에 빠른 연산을 위해 OR 동작인 00001 로 설정된다. 메모리는 사용되지 않음으로 MemWrite = 0, DatWidth = xxx로 설정되며, ALU 데이터를 register에 사용되지 않기 때문에 MemtoReg = x이 된다. RegDatSel는 사용되지 않기 때문에 xx으로 설정된다. pc는 ALU에서 비교한 값이 음수이거나 0 보다 작으면 branch를 해야 함으로 Branch = 110 , jump 동작은 하지 않기 때문에 jump = 00으로 동작한다.
해당 명령어의 검증은 아까의 bne와 같이 2 개의 case를 모두 실행하여 검증한다.
첫 번째 blez는 0 보다 큰 값인 0x 12345678 이기 때문에 branch가 동작하지 않아야
한다. 하지만 두 번째 blez는 0 보다 작은 값인 0 x 80000000 이기 때문에 branch가
동작해야 한다. 결과는 다음과 같이 나왔다.
결과를 살펴보면 0x 30 에서의 실행에서는 0x 12345678 이 0 보다 큼으로 pc값은
pc+4로 정상적으로 이동한 것을 확인할 수 있다. 하지만 0 x 34 에서는 0x
은 0 보다 작기 때문에 pc의 값이 4 + 8 ( 2 << 2)만큼 이동하여 0x40번지가 실행되는
모습을 볼 수 있다. 이를 통해 blez가 정상적으로 구성되었음을 확인할 수 있다.
JALR의 동작은 현재 pc의 값을 $31에 저장하고 현재 pc값을 $s로 바꾸는 동작을
수행한다. 해당 명령은 jump 명령어지만 R-type으로 정의되어있다. 따라서 Opcode
는 000000 이며 function은 001000 이다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction 은 op, $s, func으로 분리된다. Register File은 $s 주소를 읽고 $31주소를 쓰는 역할을 수행함으로 RegDst의 동작은 10 , RegWrite 동작은 1 로 수행된다. RF를 나온 데이터 a와 0 을 연산하게 된다. 이로 인해 ARUsrcB는 10 으로 동작한다. ALUctrl의 경우 해 당 연산은 input의 위치를 바꾸지 않고 shift를 진행하지 않음으로 0 x로 동작한다. 해당 연산은 immediate value를 사용하지 않기 때문에 EXTmode = x이다. ALUop는 b 가 0 이기 때문에 빠른 연산을 위해 OR 동작인 00001 로 설정된다. 메모리는 사용 되지 않음으로 MemWrite = 0, DatWidth = xxx로 설정되며, ALU 데이터를 register에 사용되지 않기에 MemtoReg = x이 된다. RegDatSel는 현재 pc값을 저장하기 때문에 11 으로 설정된다. pc는 a값으로 jump하기에 Branch = xxx, jump = 10 으로 동작한다.
해당 테스트의 동작은 sra를 마친 상황 이후로 진행된다. ori를 통해 $9에 0 x 50 을
저장한 후 jalr $ 9 를 통해 0x50주소(ori $31, $31, 0x0)위치로 이동한다. 그리고 해당
주소에서는 $31위치에 있는 데이터를 확인하는 과정을 수행한다. 이를 실행하였
을 때 다음과 같은 결과를 볼 수 있었다.
해당 결과에서 0x4 4 주소를 보았을 때 0 x 50 의 값이 $9에 정상적으로 저장되어 있
다. 이후의 과정에서 0x 48 을 보았을 때 현재 pc + 4의 값은 i_Write_data에 들어가
$31에 저장되고, 현재 주소는 jump 명령어를 통해 0x50위치로 이동하는 것을 볼
수 있다. 0 x 50 위치에서는 pc의 값을 출력하였을 때 정상적으로 당시 pc+4가 저장
되는 것을 볼 수 있다. 이를 통해 jalr이 정상적으로 구성된 것을 확인할 수 있다.
ANDI의 동작은 현재 $s register의 값을 불러와 Zero extension을 수행한 immediate
value와 AND 연산을 수행한 후 $t에 저장한다. 해당 명령은 i-type으로 정의되어
있다. 따라서 Opcode는 001100 이며 function은 없다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction 은 op, $s,$t, i으로 분리된다. Register File은 $s 주소를 읽고 $t주소를 쓰는 역할을 수행함으로 RegDst의 동작은 00 , RegWrite 동작은 1 로 수행된다. RF를 나온 데이터 a는 immediate value와 연산하게 된다. 이로 인해 ARUsrcB는 01 으로 동작한다. ALUctrl의 경우 해당 연산은 input의 위치를 바꾸지 않고 shift를 진행하지 않음으 로 0 x로 동작한다. 해당 연산에서 immediate value는 Zero extension을 사용하기 때 문에 EXTmode = 0 이다. ALUop는 Bitwise AND 연산인 00000 로 설정된다. 메모리는 사용되지 않음으로 MemWrite = 0, DatWidth = xxx로 설정되며, ALU 데이터를 register 에 저장하기 때문에 MemtoReg = 0 이 된다. RegDatSel는 ALU/MEM 값을 RF에 저장 하기 때문에 00 으로 설정된다. pc값은 pc+4로 저장되기 때문에 Branch = 000 , jump = 00 으로 동작한다.
해당 명령어의 검증은 이전 검증 이후에서 이루어진다. andi $10, $3, 0x8765를 통
해 0 x 12345678 과 0 x 8765 를 and 연산한 결과를 $10에 저장하는 것을 확인한다.
결과는 다음과 같이 나타났다.
해당 결과를 확인하였을 때 $ 3 의 값 0x12345678은 정상적으로 읽혔고 immediate
value 0x 8765 또한 zero extension을 통해 정상적으로 읽어왔다. 두 값의 AND 연산
은 아래 그림을 통해 0 x 660 으로 정상적으로 들어온 것을 확인할 수 있다.
SLTIU의 동작은 현재 $s register의 값을 불러와 Zero extension을 수행한 immediate
value보다 작은 지 확인한 후 해당 상태를 $t에 저장한다. 해당 명령은 i-type으로
정의되어 있다. 따라서 Opcode는 001011 이며 function은 없다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction 은 op, $s,$t, i으로 분리된다. Register File은 $s 주소를 읽고 $t주소를 쓰는 역할을 수행함으로 RegDst의 동작은 00 , RegWrite 동작은 1 로 수행된다. RF를 나온 데이터 a는 immediate value와 연산하게 된다. 이로 인해 ARUsrcB는 01 으로 동작한다. ALUctrl의 경우 해당 연산은 input의 위치를 바꾸지 않고 shift를 진행하지 않음으 로 0 x로 동작한다. 해당 연산에서 immediate value는 Zero extension을 사용하기 때 문에 EXTmode = 0 이다. ALUop는 Unsigned SLT 연산인 10001 로 설정된다. 메모리는 사용되지 않음으로 MemWrite = 0, DatWidth = xxx로 설정되며, ALU 데이터를 register 에 저장하기 때문에 MemtoReg = 0 이 된다. RegDatSel는 ALU/MEM 값을 RF에 저장 하기 때문에 00 으로 설정된다. pc값은 pc+4로 저장되기 때문에 Branch = 000 , jump = 00 으로 동작한다.
해당 명령어의 검증은 이전 테스트에 이어 진행된다. 두 번의 sltiu를 통해 $9( 0 x 50 )를 0 x 8000 , 0 x 0000 과 비교하여 해당 상태를 $11, $12에 저장한다. $11은 (unsigned)( 0 x50 < 0x8000) == true이기 때문에 0 x 1 이 저장되고, $12는 (unsigned)(0x < 0x0000) == false이기 때문에 0x0이 저장되어야 한다. 해당 결과는 다음과 같이 동 작하였다.
해당 결과를 살펴보면 첫 번째 비교의 결과는 0x1로 정상적으로 출력되어 $ 11 에
저장되었고, $12의 비교 결과는 0x0으로 예측한 결과와 동일하게 출력되어 $12에
저장된 것을 볼 수 있다. 이를 통해 해당 명령어가 정상적으로 만들어진 것을 확
인할 수 있다.
SB의 동작은 현재 $s, $t register의 값을 불러온다. sign extension을 수행한
immediate value는 $s와 덧셈 연산을 수행하여 해당 메모리 위치에 $t의 값을 저장
한다. 해당 명령은 i-type으로 정의되어 있다. 따라서 Opcode는 101000 이며
function은 없다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction
은 op, $s,$t, i으로 분리된다. Register File은 $s, $t주소를 읽는 역할만 수행함으로
RegDst의 동작은 00 , RegWrite 동작은 0 로 수행된다. RF를 나온 데이터 a는 immediate value와 연산하게 된다. 이로 인해 ARUsrcB는 01 으로 동작한다. ALUctrl의 경우 해당 연산은 input의 위치를 바꾸지 않고 shift를 진행하지 않음으로 0 x로 동 작한다. 해당 연산에서 immediate value는 sign extension을 사용하기 때문에 EXTmode = 1 이다. ALUop는 a+b 연산인 00100 로 설정된다. 메모리에 byte 단위로 저 장되기 때문에 MemWrite = 1 , DatWidth = 011 로 설정되며, ALU 데이터를 register에 저장할 필요가 없기 때문에 MemtoReg = x이 된다. RegDatSel는 RF에서 쓰는 동작이 없기 때문에 xx으로 설정된다. pc값은 pc+4로 저장되기 때문에 Branch = 000 , jump = 00 으로 동작한다.
해당 명령어를 검증은 이전 검증에 이어서 진행된다. sb $3, -2($9)를 통해
$3( 0 x 12345678 )의 데이터 1 byte(0x78)를 $9( 0 x 50 ) – 2 위치에 저장한다. 그리고 lw
를 통해 저장된 0 x 4 c위치에서 word로 데이터를 읽어와 해당 데이터가 정상적으
로 저장되었는지 $13에서 확인한다. 만약 정상적으로 저장된 경우 xx 78 xxxx가
$ 13 에 표시되어야 한다. 결과는 다음과 같이 출력되었다.
해당 결과를 살펴보면 0x60 위치에서 $3의 0x12345678의 값이 읽혔고 쓰는 주소
로는 0 x 50 – 2 인 0 x4E로 정상적으로 설정되었다. i_datWidth는 11 로 쓰여져있는 것
또한 확인할 수 있다. 다음 pc에서 이를 확인하였을 때 0 x 4 C에서 0 x4F까지 읽은
데이터가 xx78xxxx로 0 x 12345678 의 LSB 1 byte만 저장되고 저장된 위치도 0x4E로
정상적인 것을 확인할 수 있다. 이를 통해 해당 명령어가 정상적으로 구동하는
것을 알 수 있다.
LBU의 동작은 현재 $s register의 값을 불러온다. sign extension을 수행한 immediate
value는 $s와 덧셈 연산을 수행하여 해당 메모리 위치에 있는 값을 읽어와 $t에
저장한다. 해당 명령은 i-type으로 정의되어 있다. 따라서 Opcode는 100100 이며
function은 없다.
해당 명령어의 동작을 그림으로 표현하면 위와 같다 우선 IM에서 나온 Instruction
은 op, $s,$t, i으로 분리된다. Register File은 $s, 주소를 읽고 $t 주소를 쓰는 역할을
수행함으로 RegDst의 동작은 00 , RegWrite 동작은 1 로 수행된다. RF를 나온 데이터
a는 immediate value와 연산하게 된다. 이로 인해 ARUsrcB는 01 으로 동작한다.
ALUctrl의 경우 해당 연산은 input의 위치를 바꾸지 않고 shift를 진행하지 않음으
로 0 x로 동작한다. 해당 연산에서 immediate value는 sign extension을 사용하기 때
문에 EXTmode = 1 이다. ALUop는 a+b 연산인 00100 로 설정된다. 메모리에 byte 단위
로 읽기 때문에 MemWrite = 0 , DatWidth = 011 로 설정되며, Memory 데이터를
register에 저장하기 때문에 MemtoReg = 1 이 된다. RegDatSel는 ALU/MEM 데이터가
RF에 쓰이기 때문에 00 으로 설정된다. pc값은 pc+4로 저장되기 때문에 Branch =
000 , jump = 00 으로 동작한다.
해당 명령어의 검증은 이전 테스트 이후로 진행된다. sw $3, -4($9)를 통해
$9(0x 50 ) – 4 주소에 $3( 0 x 12345678 )을 저장한다. 그 후 lbu $14, - 3($9)를 사용하여
$1 4 에 $ 9 (0x50) – 3 메모리 주소에서 값 0x 56 을 가져와서 저장한다. 이를 통해 해
당 명령어를 검증할 수 있다. 검증한 결과는 다음과 같다.
해당 결과를 살펴보면 pc 0 x68에서 12345678 이 0x 4 C(0x50 - 4 )위치에 정상적으로
저장되어 있다. 그리고 lbu를 통해 데이터를 불러왔을 때 0x4E에 해당하는 값
0x 56 1 byte가 Zero extension을 통해 불러와 $13에 저장된 것을 확인할 수 있다.
이를 통해 해당 명령어가 정상적으로 작동하는 것을 알 수 있다.
- 해당 과제를 통해 기본적으로 R-Type, I-Type, J-Type 명령어들의 동작의 차이에 대 해 구분할 수 있는 과제였다. 또한 각 명령어가 들어왔을 때 이를 어떻게 구분하 고 어떠한 module을 동작 시킬 것인지 고민하는 과정을 통해 MIPS Architecture에 대한 이해를 높일 수 있었다. 또한 이를 MIPS Assembly Language로 변환하여 코드 를 작성하면서 MIPS 코드를 작성하고 검증할 수 있는 기회였다.
- 해당 프로젝트에서는 lw와 sw가 동작하였을 때 Shift Left 2를 진행하지 않고 해당 주소에서 그대로 데이터를 가져오는 것을 확인하였다. 기본적으로 load word의 경 우 4byte로 데이터를 읽어 오기 때문에 해당 프로젝트에서는 address의 LSB가 00 으로 고정되어 있다. 만약 해당 값이 들어오기 전에 Shift Left 2를 진행한다면 기 존보다 4 배 많은 메모리에 접근할 수 있을 것이다(기존 메모리 주소 : 2^32 = 4 G, Shift 진행 메모리 주소 : 2^34 = 16G ).
- 강의자료만을 참고