컴퓨터아키텍처
Computer Architecture
2016-03-17
Instruction (2장)
MIPS 어셈블리 실습, data transfer 명령
과제 제출 안내
- Google Drive 공유 폴더를 통해 (종이 X, 메일 X)
-
[새로 만들기] 버튼을 눌러
CA16<이름><학번> 폴더를 만들고 (예: CA16김연아123456)
만들어진 폴더를 우클릭하여 나오는 드롭메뉴에서
폴더 공유설정으로 kyagrd@gmail.com 에게 공유 (편집권한) - Google 메일 계정만 있으면 Google Drive 서비스 이용 가능
- Google 메일 계정은 무료로 만들 수 있으며
참고로 안드로이드 스마트폰 사용자는 누구나 이미 보유
MIPS 어셈블리 실습
- SPIM 시뮬레이터 사용
- 홈페이지에서 다운로드
http://spimsimulator.sourceforge.net/
- 홈페이지에서 다운로드
- MIPS 어셈블리 syntax coloring 지원하는텍스트 에디터
- Sublime Text
- Notepad++
- Vim
- Emacs
Data Transfer (move, li, la, lw, sw)
- move (레지스터부터 값 복사)
-
t0 = t1; // C 언어 move $t0, $t1 # MIPS 어셈블리
-
add $t0, $t1, $zero // move를 add로 구현
-
- li (상수값 로드)
-
t0 = 5; // C 언어 li $t0, 5 # MIPS 어셈블리
-
addi $t0, $zero, 5 # li를 addi로 구현
-
- la (주소값 자체를 로드), lw (주소 위치에 저장된 값 로드)
-
la $t1, addrlable # 매크로 주소 레이블로부터
-
lw $a0, $t1 # t1 주소 메모리 위치에 저장된 값 로드
-
sw $a1, $t1 # t1 주소 메모리 위치에 a1 값을 세이브
-
Data Transfer (lw, sw)
- move (레지스터부터 값 복사)
t0 = t1; // C 언어 move $t0, $t1 // MIPS 어셈블리
add $t0, $t1, $zero // move를 add로 구현
- li (상수값 로드)
t0 = 5; // C 언어 li $t0, 5 // MIPS 어셈블리
addi $t0, $zero, 5 // li를 addi로 구현
- lw (메모리 주소에 저장된 값 로드)
lw $t0, $t1 // $t1
- la (메모리 주소값 로드)
Logical Operation
- Shift 연산 (sll, slr)
- 이진수 10 을 4칸 shift left 하면 100000
- 이진수 1010 을 2칸 shift right 10
- And, Or 연산 (+ 거기에 i 붙은 버전)
- or $t0, $t1, $t2 ## bitwise OR
- ori $t0, $t1, 5
- Not 은 operand 1개
MIPS에서 주소 표현 방식
-
매크로로
코드에서 main: 처럼 : 앞에다 이름
main이 주소를 나타내는 매크로. - 좀더 기본적(?)인 방법은 어떤 레지스터에 주소값을 저장한 다음, 거기서부터 얼마나 더 떨어진 곳인지 (offset) 나타내는 방식
-
32($t0) ## t0값이 나타내는 주소 + 32
-
- C랑 다른 점은 타입에 따라서 데이터 한 칸 크기 계산을 직접 해야 된다.
(문자는 1바이트이므로 1씩, 워드(정수) 4씩)
컴퓨터아키텍처
By 안기영 (Ahn, Ki Yung)
컴퓨터아키텍처
2016-03-17
- 1,780