MIPS 시뮬레이터의 버그

학교에서 컴퓨터구조 수업을 듣는 중입니다.
IA-32(교수님 표현을 빌리자면 걸레-_-) 구조가 아닌 간단한 MIPS 아키텍처에 대해 배우고 있는데 MIPS Instruction set 을 이용해서 간단한 ASM 프로그래밍을 과제로 내주셨기에 어제 열심히 했더랍니다. 시뮬레이터로는 PCSpim 이라고 하는 윈도우즈 기반(이 것부터 잘못일지도 몰라요-_-) 시뮬레이터를 썼습니다. SPIM 은 Unix/Linux 기반의 콘솔 환경에서 사용할 수 있는 도구입니다. PCSpim은 그를 윈도우즈의 GUI 환경으로 만든거구요.

그런데! 아무리해도 원하는대로 답이 안나오는 겁니다!

답이 안나오면 가장 먼저 의심하는건 접니다-_-;; PC는 거짓말을 하지 않잖아요?
이거 뭔가 이상하다고! 컴파일러가 잘못되었다고! 외쳐봐야 나중에 보면 결국 자기 탓이기 마련입니다.

그런데 어제는 아니더군요.(컴파일러는 아니니 그럴 수 있는 건지도 모르겠지만요~ 😉 )
코드를 열심히 들여다보고, 내 능력이 이 거 밖에 안되나~ 한숨도 쉬어보고, 다시 아무리 코드를 들여다보면서 돌려봐도 안되는 겁니다. 난감하더군요.
결국 차례차례 나눠서 한 스텝씩 진행해보았습니다. 자세히 한스텝씩 진행하며 살펴보니 이 PCSpim 이란 놈이 자기 멋대로 Stack Pointer Register 값을 바꿔버리고 있더군요. 그래서 $SP 의 값을 가지고 리턴하는 부분에서 엉뚱한 곳으로 리턴하면서 Exception을 툭툭 뱉어내고 있는 것이었습니다.

사용자 삽입 이미지
jump전의 $SP값

사용자 삽입 이미지
$SP값이 제멋대로 바뀌었다!

그래서 바로 리눅스로 재부팅하고! 우분투의 소스리스트에 있는 SPIM 을 설치하려고 했으나 제대로 동작하지 않길래 소스를 받아다가 소스 컴파일하고 설치를 했죠.

바로 결과가 나오더군요-_-… 아까운 제 3시간은 그렇게 흘러갔습니다. 버젼이 7.3이나 되는 놈이 이럴 줄은 몰랐답니다ㅠㅠ

추가 : 다른 컴퓨터에서는 제대로 돌아가길래 PCSpim을 재설치하고 다시 해보았는데도 안됩니다. 그래서 뭔가 이상하다 생각하고는 Simulator 메뉴의 Settings… 에 있는 옵션들을 건드려보았는데 Delayed Branches 와 Delayed Load를 체크상태로 두면 (제 노트북에서만) 제대로 동작하지 않습니다. 이게 어떤 역할을 하길래 $SP 값을 마구 바꾸는 건지 모르겠네요. 게시판에 질문을 올렸는데 답변이 오면 또 추가하도록 하겠습니다.

6 thoughts to “MIPS 시뮬레이터의 버그”

  1. 안녕하세요. 예전에 고민하던 문제를 발견해서 댓글을 적어봅니다.

    저는 당시에 “PC가 고장나서” … SP값이 바뀌더군요…; 램 모듈이 뻑나서… 흑흑

  2. 안녕하십니까 우연히 제가 블로그 돌아다니다가 발견했는데
    프로그래밍의 상당한 실력자이신거 같아서요 ㅠㅠ
    그리고 제가 지금 대학생인데 제가 하는 과제랑 똑같은 “비제네르 암호만들기 프로그래밍”을 하셨다기에
    이렇게 글을 올리는데요. 제가 컴퓨터를 너무 못하고 해서 그러는데.. 혹시 비제네르 암호만들기 프로그래밍
    하신거 파일이 있으시다면 저좀 보내주실수없으실까요?ㅠㅠ
    메일은 lhc07@naver.com 입니다…ㅠㅠ 부탁드립니다 제발꼭좀부탁드려요..

    저희는 과제가 이거거든요.

    비제네르 암호를 프로그래밍 하시오

    프로그래밍 시 주의사항
    평문, 키, 암호문 – 영문
    평문과 키를 입력으로 받아들일 것
    암호문이 출력되도록 할 것
    위의 암호문과 키를 입력하면 복호화가 되도록 할 것

    알파벳을 인코딩한다.
    평문, 키, 암호문이 인코딩, 디코딩 될 수 있는 모듈
    암호화 모듈
    평문, 키 입력
    평문과 키 계산
    암호문 디코딩 후 출력
    복호화 모듈
    키, 암호문 입력
    복호화
    평문 디코딩 후 출력

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다