맨위로가기

SPIM

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

SPIM은 기본적인 운영 체제를 함께 제공하는 MIPS 시뮬레이터로, 프로그래머가 `syscall` 명령어를 통해 OS 기능을 사용할 수 있게 한다. SPIM은 정수, 문자열, 부동 소수점 숫자 입출력, 메모리 할당, 파일 처리 등 다양한 시스템 콜을 지원하며, OS는 특정 레지스터의 값에 따라 작동한다. SPIM의 대안으로는 MARS, 임페라스, CREATOR 시뮬레이터 등이 있다.

더 읽어볼만한 페이지

  • 에뮬레이션 소프트웨어 - 에뮬레이터
    에뮬레이터는 다른 프로그램이나 장치를 모방하는 컴퓨터 프로그램 또는 전자기기의 능력으로, 하드웨어 및 소프트웨어 모방을 포함하며 디지털 아카이빙과 뉴 미디어 아트 분야에서 중요한 역할을 한다.
  • 에뮬레이션 소프트웨어 - 시그윈
    Cygwin은 윈도우에서 유닉스 시스템과 유사한 환경을 제공하는 소프트웨어로, POSIX API 구현 및 다양한 개발 도구를 통해 유닉스 기반 소프트웨어의 개발, 빌드, 실행을 지원한다.
SPIM - [IT 관련 정보]에 관한 문서
SPIM 정보
개발자제임스 라루스
최신 릴리스 버전9.1
최신 릴리스 날짜2011년 7월
운영 체제GNU/리눅스
macOS
유닉스
윈도우
라이선스BSD 라이선스
웹사이트SPIM 공식 웹사이트

2. SPIM 운영 체제

SPIM 시뮬레이터는 기본적인 운영 체제를 함께 제공하며, 프로그래머는 syscall영어 명령어를 통해 자주 사용되는 기능들을 편리하게 사용할 수 있다. 이 명령어는 특정 레지스터의 값에 따라 운영 체제가 작동하도록 한다. SPIM OS는 OS-프리앰블에서 넘겨받는 지점으로 main영어이라는 레이블을 기대한다.

2. 1. 시스템 콜

SPIM 시뮬레이터는 기본적인 운영 체제를 함께 제공하며, 프로그래머는 `syscall` 명령어를 통해 자주 사용되는 기능들을 편리하게 사용할 수 있다. 이 명령어는 특정 레지스터의 값에 따라 운영 체제가 작동하도록 한다. SPIM OS는 OS-프리앰블에서 넘겨받는 지점으로 `main`이라는 레이블을 기대한다.

'''SPIM 시스템 콜 상세'''
서비스트랩 코드입력출력보충
정수 표시 (print_int)$v0 = 1$a0 = 표시할 정수표준 출력에 $a0$를 표시
부동 소수점 표시 (print_float)$v0 = 2$f12 = 표시할 부동 소수점표준 출력에 $f12$를 표시
배정밀도 부동 소수점 표시 (print_double)$v0 = 3$f12 = 표시할 배정밀도 부동 소수점표준 출력에 $f12$를 표시
문자열 표시 (print_string)$v0 = 4$a0 = 첫 번째 문자의 주소문자열을 표준 출력에 표시
정수 읽기 (read_int)$v0 = 5표준 입력으로부터 정수를 읽어 $v0$에 저장
부동 소수점 읽기 (read_float)$v0 = 6표준 입력으로부터 부동 소수점을 읽어 $f0$에 저장
배정밀도 부동 소수점 읽기 (read_double)$v0 = 7표준 입력으로부터 배정밀도 부동 소수점을 읽어 $f0$에 저장
문자열 읽기 (read_string)$v0 = 8$a0 = 문자열을 저장할 주소, $a1 = 문자열의 최대 길이표준 입력으로부터 읽어 $a0$의 주소에 저장
메모리 할당 (sbrk)$v0 = 9$a0 = 필요한 바이트 수$v0$ = 할당된 메모리의 주소힙으로부터 메모리를 할당
종료 (exit)$v0 = 10
문자 표시 (print_char)$v0 = 11$a0 = 문자(하위 8비트)
문자 읽기 (read_char)$v0 = 12$v0$ = 문자(개행 없음)를 에코
파일 열기 (file_open)$v0 = 13$a0 = 전체 경로(0으로 종료, 개행 없는 문자열로 종료), $a1$ = 플래그, $a2$ = UNIX의 8진수 파일 모드(0644는 rw-r--r--를 의미)$v0$ = 파일 디스크립터
파일 읽기 (file_read)$v0 = 14$a0$ = 파일 디스크립터, $a1$ = 버퍼 주소, $a2$ = 읽을 바이트 수$v0$ = 파일로부터 버퍼에 읽은 데이터량(-1 = 에러, 0 = 파일의 끝)
파일에 쓰기 (file_write)$v0 = 15$a0$ = 파일 디스크립터, $a1$ = 버퍼 주소, $a2$ = 쓸 바이트 수$v0$ = 버퍼로부터 파일에 쓴 데이터량(-1 = 에러, 0 = 파일의 끝)
파일 닫기 (file_close)$v0 = 16$a0$ = 파일 디스크립터



'''플래그:'''

읽기 = 0x0, 쓰기 = 0x1, 읽기/쓰기 = 0x2

OR 생성 = 0x100, 크기 0으로 생성 = 0x200, 추가 = 0x8

OR 텍스트 = 0x4000, 바이너리 = 0x8000

2. 1. 1. 입출력

SPIM 시뮬레이터는 기본적인 운영 체제를 함께 제공하며, 프로그래머는 `syscall` 명령어를 통해 자주 사용되는 기능들을 편리하게 사용할 수 있다. 이 명령어는 특정 레지스터의 값에 따라 운영 체제가 작동하도록 한다.

'''SPIM에서 사용되는 시스템 콜'''
서비스트랩 코드입력출력비고
정수 출력 (print_int)$v0 = 1$a0 = 출력할 정수$a0을 표준 출력으로 출력base = 10
문자열 출력 (print_string)$v0 = 4$a0 = 첫 번째 문자의 주소문자열을 표준 출력으로 출력
정수 읽기 (read_int)$v0 = 5표준 입력에서 읽은 정수가 $v0에 저장됨base = 10
메모리 할당 (sbrk)$v0 = 9$a0 = 필요한 바이트 수$v0= 할당된 메모리의 주소힙에서 메모리를 할당
종료 (exit)$v0 = 10
파일 열기 (file_open)$v0 = 13$a0 = 전체 경로, $a1 = 플래그, $a2 = UNIX 8진수 파일 모드$v0 = 파일 디스크립터read/write/close 함수도 있음
부동 소수점 표시 (print_float)$v0 = 2$f12 = 표시할 부동 소수점표준 출력에 $f12를 표시
배정밀도 부동 소수점 표시 (print_double)$v0 = 3$f12 = 표시할 배정밀도 부동 소수점표준 출력에 $f12를 표시
부동 소수점 읽기 (read_float)$v0 = 6표준 입력으로부터 부동 소수점을 읽어 $f0에 저장
배정밀도 부동 소수점 읽기 (read_double)$v0 = 7표준 입력으로부터 배정밀도 부동 소수점을 읽어 $f0에 저장
문자열 읽기 (read_string)$v0 = 8$a0 = 문자열을 저장할 주소, $a1 = 문자열의 최대 길이표준 입력으로부터 읽어 $a0의 주소에 저장
문자 표시 (print_char)$v0 = 11$a0 = 문자(하위 8비트)
문자 읽기 (read_char)$v0 = 12$v0 = 문자(개행 없음)를 에코
파일 읽기 (file_read)$v0 = 14$a0 = 파일 디스크립터, $a1 = 버퍼 주소, $a2 = 읽을 바이트 수$v0 = 파일로부터 버퍼에 읽은 데이터량(-1 = 에러, 0 = 파일의 끝)
파일에 쓰기 (file_write)$v0 = 15$a0 = 파일 디스크립터, $a1 = 버퍼 주소, $a2 = 쓸 바이트 수$v0 = 버퍼로부터 파일에 쓴 데이터량(-1 = 에러, 0 = 파일의 끝)
파일 닫기 (file_close)$v0 = 16$a0 = 파일 디스크립터



'''플래그:'''

읽기 = 0x0, 쓰기 = 0x1, 읽기/쓰기 = 0x2

OR 생성 = 0x100, 크기 0으로 생성 = 0x200, 추가 = 0x8

OR 텍스트 = 0x4000, 바이너리 = 0x8000

2. 1. 2. 메모리 관리

SPIM 시뮬레이터는 프로그래머가 일반적으로 사용되는 기능들을 편리하게 사용할 수 있도록 기본적인 운영 체제를 제공한다. 이러한 기능은 `syscall` 명령어로 호출된다. 운영 체제는 특정 레지스터의 값에 따라 작동한다.

'''SPIM에서 사용되는 시스템 콜의 예'''
서비스트랩 코드입력출력비고
정수 출력 (print_int)$v0 = 1$a0 = 출력할 정수$a0을 표준 출력으로 출력base = 10
문자열 출력 (print_string)$v0 = 4$a0 = 첫 번째 문자의 주소문자열을 표준 출력으로 출력
정수 읽기 (read_int)$v0 = 5표준 입력에서 읽은 정수가 $v0에 저장됨base = 10
메모리 할당 (sbrk)$v0 = 9$a0 = 필요한 바이트 수$v0= 할당된 메모리의 주소힙에서 메모리를 할당
종료 (exit)$v0 = 10
파일 열기 (file_open)$v0 = 13$a0 = 전체 경로, $a1 = 플래그, $a2 = UNIX 8진수 파일 모드$v0 = 파일 디스크립터read/write/close 함수도 있음



SPIM OS는 OS-프리앰블에서 넘겨받는 지점으로 `main`이라는 레이블을 기대한다.

'''SPIM 시스템 콜 상세'''
서비스트랩 코드입력출력보충
정수 표시 (print_int)$v0 = 1$a0 = 표시할 정수표준 출력에 $a0를 표시
부동 소수점 표시 (print_float)$v0 = 2$f12 = 표시할 부동 소수점표준 출력에 $f12를 표시
배정밀도 부동 소수점 표시 (print_double)$v0 = 3$f12 = 표시할 배정밀도 부동 소수점표준 출력에 $f12를 표시
문자열 표시 (print_string)$v0 = 4$a0 = 첫 번째 문자의 주소문자열을 표준 출력에 표시
정수 읽기 (read_int)$v0 = 5표준 입력으로부터 정수를 읽어 $v0에 저장
부동 소수점 읽기 (read_float)$v0 = 6표준 입력으로부터 부동 소수점을 읽어 $f0에 저장
배정밀도 부동 소수점 읽기 (read_double)$v0 = 7표준 입력으로부터 배정밀도 부동 소수점을 읽어 $f0에 저장
문자열 읽기 (read_string)$v0 = 8$a0 = 문자열을 저장할 주소, $a1 = 문자열의 최대 길이표준 입력으로부터 읽어 $a0의 주소에 저장
메모리 할당 (sbrk)$v0 = 9$a0 = 필요한 바이트 수$v0= 할당된 메모리의 주소힙으로부터 메모리를 할당
종료 (exit)$v0 = 10
문자 표시 (print_char)$v0 = 11$a0 = 문자(하위 8비트)
문자 읽기 (read_char)$v0 = 12$v0 = 문자(개행 없음)를 에코
파일 열기 (file_open)$v0 = 13$a0 = 풀 경로(0으로 종료, 개행 없는 문자열로 종료), $a1 = 플래그, $a2 = UNIX의 8진수 파일 모드(0644는 rw-r--r--를 의미)$v0 = 파일 디스크립터
파일 읽기 (file_read)$v0 = 14$a0 = 파일 디스크립터, $a1 = 버퍼 주소, $a2 = 읽을 바이트 수$v0 = 파일로부터 버퍼에 읽은 데이터량(-1 = 에러, 0 = 파일의 끝)
파일에 쓰기 (file_write)$v0 = 15$a0 = 파일 디스크립터, $a1 = 버퍼 주소, $a2 = 쓸 바이트 수$v0 = 버퍼로부터 파일에 쓴 데이터량(-1 = 에러, 0 = 파일의 끝)
파일 닫기 (file_close)$v0 = 16$a0 = 파일 디스크립터



'''플래그:'''

읽기 = 0x0, 쓰기 = 0x1, 읽기/쓰기 = 0x2

OR 생성 = 0x100, 크기 0으로 생성 = 0x200, 추가 = 0x8

OR 텍스트 = 0x4000, 바이너리 = 0x8000

2. 1. 3. 파일 처리

SPIM 시뮬레이터는 기본적인 운영 체제를 함께 제공하며, 프로그래머는 `syscall` 명령어를 통해 편리하게 기능을 사용할 수 있다. OS는 특정 레지스터의 값에 따라 작동한다.

'''SPIM에서 사용되는 시스템 콜의 예'''
서비스트랩 코드입력출력비고
정수 출력 (print_int)$v0 = 1$a0 = 출력할 정수$a0을 표준 출력으로 출력base = 10
문자열 출력 (print_string)$v0 = 4$a0 = 첫 번째 문자의 주소문자열을 표준 출력으로 출력
정수 읽기 (read_int)$v0 = 5표준 입력에서 읽은 정수가 $v0에 저장됨base = 10
메모리 할당 (sbrk)$v0 = 9$a0 = 필요한 바이트 수$v0= 할당된 메모리의 주소힙에서 메모리를 할당
종료 (exit)$v0 = 10
파일 열기 (file_open)$v0 = 13$a0 = 전체 경로, $a1 = 플래그, $a2 = UNIX 8진수 파일 모드$v0 = 파일 디스크립터read/write/close 함수도 있음
부동 소수점 표시 (print_float)$v0 = 2$f12 = 표시할 부동 소수점표준 출력에 $f12를 표시
배정밀도 부동 소수점 표시 (print_double)$v0 = 3$f12 = 표시할 배정밀도 부동 소수점표준 출력에 $f12를 표시
부동 소수점 읽기 (read_float)$v0 = 6표준 입력으로부터 부동 소수점을 읽어 $f0에 저장
배정밀도 부동 소수점 읽기 (read_double)$v0 = 7표준 입력으로부터 배정밀도 부동 소수점을 읽어 $f0에 저장
문자열 읽기 (read_string)$v0 = 8$a0 = 문자열을 저장할 주소, $a1 = 문자열의 최대 길이표준 입력으로부터 읽어 $a0의 주소에 저장
문자 표시 (print_char)$v0 = 11$a0 = 문자(하위 8비트)
문자 읽기 (read_char)$v0 = 12$v0 = 문자(개행 없음)를 에코
파일 읽기 (file_read)$v0 = 14$a0 = 파일 디스크립터, $a1 = 버퍼 주소, $a2 = 읽을 바이트 수$v0 = 파일로부터 버퍼에 읽은 데이터량(-1 = 에러, 0 = 파일의 끝)
파일에 쓰기 (file_write)$v0 = 15$a0 = 파일 디스크립터, $a1 = 버퍼 주소, $a2 = 쓸 바이트 수$v0 = 버퍼로부터 파일에 쓴 데이터량(-1 = 에러, 0 = 파일의 끝)
파일 닫기 (file_close)$v0 = 16$a0 = 파일 디스크립터


플래그:읽기 = 0x0, 쓰기 = 0x1, 읽기/쓰기 = 0x2

OR 생성 = 0x100, 크기 0으로 생성 = 0x200, 추가 = 0x8

OR 텍스트 = 0x4000, 바이너리 = 0x8000

SPIM OS는 OS-프리앰블에서 넘겨받는 지점으로 `main`이라는 레이블을 기대한다.

2. 1. 4. 기타

SPIM 시뮬레이터는 기본적인 운영 체제를 함께 제공하며, 프로그래머는 이를 통해 일반적으로 사용되는 기능을 편리하게 사용할 수 있다. 이러한 기능은 `syscall` 명령어로 호출된다. 그러면 운영 체제는 특정 레지스터의 값에 따라 작동한다.

'''SPIM에서 사용되는 시스템 콜의 예'''
서비스트랩 코드입력출력비고
정수 출력 (print_int)$v0 = 1$a0 = 출력할 정수$a0을 표준 출력으로 출력base = 10
문자열 출력 (print_string)$v0 = 4$a0 = 첫 번째 문자의 주소문자열을 표준 출력으로 출력
정수 읽기 (read_int)$v0 = 5표준 입력에서 읽은 정수가 $v0에 저장됨base = 10
메모리 할당 (sbrk)$v0 = 9$a0 = 필요한 바이트 수$v0 = 할당된 메모리의 주소힙에서 메모리를 할당
종료 (exit)$v0 = 10
파일 열기 (file_open)$v0 = 13$a0 = 전체 경로, $a1 = 플래그, $a2 = UNIX 8진수 파일 모드$v0 = 파일 디스크립터read/write/close 함수도 있음
부동 소수점 출력 (print_float)$v0 = 2$f12 = 표시할 부동 소수점표준 출력에 $f12를 표시
배정밀도 부동 소수점 출력 (print_double)$v0 = 3$f12 = 표시할 배정밀도 부동 소수점표준 출력에 $f12를 표시
부동 소수점 읽기 (read_float)$v0 = 6표준 입력으로부터 부동 소수점을 읽어 $f0에 저장
배정밀도 부동 소수점 읽기 (read_double)$v0 = 7표준 입력으로부터 배정밀도 부동 소수점을 읽어 $f0에 저장
문자열 읽기 (read_string)$v0 = 8$a0 = 문자열을 저장할 주소, $a1 = 문자열의 최대 길이표준 입력으로부터 읽어 $a0의 주소에 저장
문자 출력 (print_char)$v0 = 11$a0 = 문자(하위 8비트)
문자 읽기 (read_char)$v0 = 12$v0 = 문자(개행 없음)를 에코
파일 읽기 (file_read)$v0 = 14$a0 = 파일 디스크립터, $a1 = 버퍼 주소, $a2 = 읽을 바이트 수$v0 = 파일로부터 버퍼에 읽은 데이터량(-1 = 에러, 0 = 파일의 끝)
파일에 쓰기 (file_write)$v0 = 15$a0 = 파일 디스크립터, $a1 = 버퍼 주소, $a2 = 쓸 바이트 수$v0 = 버퍼로부터 파일에 쓴 데이터량(-1 = 에러, 0 = 파일의 끝)
파일 닫기 (file_close)$v0 = 16$a0 = 파일 디스크립터



SPIM OS는 OS-프리앰블에서 넘겨받는 지점으로 `main`이라는 레이블을 기대한다.

'''플래그:'''

읽기 = 0x0, 쓰기 = 0x1, 읽기/쓰기 = 0x2

OR 생성 = 0x100, 크기 0으로 생성 = 0x200, 추가 = 0x8

OR 텍스트 = 0x4000, 바이너리 = 0x8000

2. 2. 프로그램 시작

SPIM 시뮬레이터는 기본적인 운영 체제를 함께 제공하며, 이를 통해 프로그래머는 일반적으로 사용되는 기능을 편리하게 사용할 수 있다. 이러한 기능은 `syscall` 명령어로 호출된다. 그러면 OS는 특정 레지스터의 값에 따라 작동한다.

'''SPIM에서 사용되는 시스템 콜의 예'''
서비스트랩 코드입력출력비고
print_int$v0 = 1$a0 = 출력할 정수$a0을 표준 출력으로 출력base = 10
print_string$v0 = 4$a0 = 첫 번째 문자의 주소문자열을 표준 출력으로 출력
read_int$v0 = 5표준 입력에서 읽은 정수가 $v0에 저장됨base = 10
sbrk$v0 = 9$a0 = 필요한 바이트 수$v0= 할당된 메모리의 주소힙에서 메모리를 할당
exit$v0 = 10
file_open$v0 = 13$a0 = 전체 경로, $a1 = 플래그, $a2 = UNIX 8진수 파일 모드$v0 = 파일 디스크립터예시; read/write/close 함수도 있음



SPIM OS는 OS-프리앰블에서 넘겨받는 지점으로 `main`이라는 레이블을 기대한다.

3. SPIM 대체 및 경쟁 소프트웨어

MARS(MIPS 어셈블러 및 런타임 시뮬레이터)[3]자바 기반 IDE이며 SPIM의 대안이다. 2005년에 처음 출시되었으나, 두 명의 유지보수 담당자가 은퇴하면서[4][5] 프로젝트는 더 이상 활발하게 개발되지 않고 있다.

임페라스는 JIT 컴파일 에뮬레이션 및 시뮬레이션 기술을 사용하는 MIPS 아키텍처를 위한 임베디드 소프트웨어 개발 도구 모음이다. 시뮬레이터는 2008년에 처음 출시되었으며 활발히 개발되고 있다. 30개 이상의 오픈 소스 MIPS 32비트[6] 및 64비트[7] 코어 모델이 있다.

교육 목적으로 SPIM의 다른 대안으로는 CREATOR 시뮬레이터가 있다.[8][9][10] CREATOR는 이식 가능하며(현재 웹 브라우저에서 실행 가능) 학생들이 여러 프로세서의 여러 어셈블리 언어를 동시에 배울 수 있게 해준다(CREATOR에는 MIPS32 및 RISC-V 명령어 예제가 포함되어 있다).

참조

[1] 웹사이트 Changes to Spim http://spimsimulator[...] 2017-05-15
[2] 웹사이트 SPIM MIPS Simulator http://pages.cs.wisc[...] 2016-10-01
[3] 웹사이트 MARS MIPS simulator - Missouri State University http://courses.misso[...] 2016-10-01
[4] 웹사이트 Otterbein University Computer Science: Peter Sanderson http://faculty.otter[...] 2024-04-14
[5] 웹사이트 Ken R. Vollmar - Computer Science Department - Missouri State University https://computerscie[...] 2024-04-14
[6] 웹사이트 Open Virtual Platforms http://www.ovpworld.[...] 2016-10-01
[7] 웹사이트 Open Virtual Platforms http://www.ovpworld.[...] 2016-10-01
[8] 웹사이트 CREATOR: Simulador didáctico y genérico para la programación en ensamblador https://zenodo.org/r[...] 2021-07-23
[9] 웹사이트 CREATOR Web with MIPS32 example https://creatorsim.g[...]
[10] 웹사이트 CREATOR source code on GitHub https://github.com/c[...]
[11] 서적 コンピュータの構成と設計〜ハードウエアとソフトウエアのインタフェース 第3版 (上) 日経BP社
[12] 서적 コンピュータの構成と設計〜ハードウエアとソフトウエアのインタフェース 第3版 (下) 日経BP社
[13] 웹인용 Changes to Spim http://spimsimulator[...] 2017-05-15



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com