컴퓨터아키텍처
Computer Architecture
2016-03-23
Instruction (2장)
비교 연산, branch/jump 관련 연산
과제 제출 안내
- Google Drive 공유 폴더를 통해 (종이 X, 메일 X)
-
[새로 만들기] 버튼을 눌러
CA16<이름><학번> 폴더를 만들고 (예: CA16김연아123456)
만들어진 폴더를 우클릭하여 나오는 드롭메뉴에서
폴더 공유설정으로 kyagrd@gmail.com 에게 공유 (편집권한) - Google 메일 계정만 있으면 Google Drive 서비스 이용 가능
- Google 메일 계정은 무료로 만들 수 있으며
참고로 안드로이드 스마트폰 사용자는 누구나 이미 보유 - 과제1 파일명 hw1.s 로 공유폴더 안에 저장해서 제출
MIPS 어셈블리 실습
- SPIM 시뮬레이터 사용
- 홈페이지에서 다운로드
http://spimsimulator.sourceforge.net/
- 홈페이지에서 다운로드
- MIPS 어셈블리 syntax coloring 지원하는텍스트 에디터
- Sublime Text
- Notepad++
- Vim
- Emacs
MIPS Assembly vs. MIPS Instruction
- 모든 MIPS Assembly 명령이 MIPS Instruction과 일대일 대응 아님
- MIPS 어셈블리 주소 레이블, 메모리 초기화 간편한 문법 제공 매크로
- MIPS 어셈블리에는 MIPS Instruction에 없는 pseudo-instruction도 있다
- 예: move, li, la, not, neg, blt, ble, bgt, bge, sge, sgt 등
- 교과서 p119 및 부록 A.10 참고
-
어셈블러가 하나 이상의 실제 instruction으로 번역한다.
SIMP Simulator 에서 프로그램 명령 한 줄이 하나 이상의 instruction으로 Text영역에 로드되는 것들이 대개 이에 속함 - 이것도 일종의 매크로라 볼 수 있음.
- 원래 MIPS Instruction보다 수동으로 어셈블리 코딩할 때 오히려
더 많이 쓰이는 것들도 있다 (예: li가 ori로 번역됨)
jump 연산
- 무조건 지정된 주소로 $pc 를 옮김
(addressing mode 에 대해서는 다음 수업시간에) -
j label # label 위치로 점프
-
jal label # 4 + $pc를 $ra에 저장 후 label로 점프 # jal은 주로 함후 호출에 사용
-
jr $ra # 레지스터에 저장된 주소 위치로 점프 # jr은 주로 함수 마치고 리턴에 사용
branch 연산
- 특정 조건을 만족할 경우 지정된 offset만큼 $pc를 옮김
(pc relative addressing mode - 이것은 다음 수업시간에 설명) -
bne $t0, $t1, label # t0와 t1의 값이 같지 않으면
-
beq $t0, $t1, label # t0와 t1의 값이 같으면
- MIPS 어셈블리에서 bgt, bge, blt, ble 등 pseudo-instruction들
-
bgtz $t0, label # t0 > 0 일 때 label로 # 비슷한 bgez, bltz, blez, beqz
- MIPS 어셈블러가 bgt, bge, blt, ble 등 pseudo-instruction을
비교 연산 한 개와 bne 또는 beq 하나
이렇게 두 개의 실제 연산으로 번역
비교 연산
-
slt $t0,$t1,$t2 # t1<t2이면 t0=1 아니면 t0=0 # 비슷하게 sgt
- 비교 pseudo-instrution들 seq, sge, sle, sne
- 지금까지 소개한 모든 MIPS Assembly는
부록 A.10에 더 자세한 내용이 나오니 필요할 경우 참고
과제 설명 및 반복문 예제
-
수업시간에 MIPS Assembly 예제 코드를 직접 실행해 보며 설명함
컴퓨터아키텍처
By 안기영 (Ahn, Ki Yung)
컴퓨터아키텍처
2016-03-23
- 2,088