컴퓨터아키텍처

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 시뮬레이터 사용
  • 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씩)
Made with Slides.com