시소프 1,2일차

OneTwoThree·2022년 12월 25일

SIC 시뮬레이터

  • SIC 시스템에서 어셈블리 프로그램을 실습하기 위한 시뮬레이터
  • 원시코드, 중간파일, 목적코드, 어셈블러, 시뮬레이터로 구성

압축해제한 sic 폴더를 C드라이브 아래에 넣어놓음

DosBOx

  • MS-DOS 운영체제 환경을 제공하는 애뮬레이터 (가상 컴퓨터)
  • SIC 시뮬레이터 프로그램을 실행하기 위해 사용함

mount

mount <DosBox에서 사용할 위치> < PC 위치>

예시 ) mount c C:\sic\

mount 명령어로 local PC와 연동함

C:\

명령 프롬프트에 C:\ 입력해서 DosBox의 C드라이브로 이동함
dir로 현재 디렉토리 구조 확인 가능

시뮬레이터 실행 (기본적인 명령어)

  • 어셈블리 원시코드 SRCFILE 작성
    SICEditor나 텍스트편집기를 이용해 수정한다
    type <파일명> 명령어로 파일 내용을 확인할 수 있다.

  • 어셈블러 수행해서 목적코드 파일 생성
    SICASM.EXE SRCFILE 파일 실행하여 OBJFILE 생성 확인

  • OBJFILE 이름을 DEVF2로 변경
    ren OBJFILE DEVF2 명령어 입력
    주의 : DEVF2 파일이 이미 있으면 덮어쓰기가 되지 않음. 삭제하고 진행해야 함
    주의 : 파일로부터 입력이 있는 프로그램인 경우 DEVF3라는 파일로 만들어야 함

  • 소문자를 모두 대문자로 변경
    L2U DEVF2 명렁여 이용 (LOWER TO UPPER)

  • 시뮬레이터 SICSIM.EXE 실행
    SICSIM.EXE
    정상적으로 실행되면 커맨드 입력 창이 표시됨

  • 기본적인 실행 순서
    s -> b 1000 -> r (breakpoint reached 문구 뜰 때까지)
    s 로 시작
    b 1000 break point 1000을 프로그램 시작 주소로 지정
    r 로 계속 실행해서 breakpoint까지 간다

  • dump
    d r 현재 레지스터 정보
    d start-end start주소~end 주소까지의 메모리 정보
    d r, start-end 와 같이 혼합 사용 가능

  • h
    h n 명령어로 한번에 실행할 명령 라인 수를 n으로 지정
    n의 기본값은 1000이다.
    h 1 명령어를 입력하면 한번에 1 라인 씩 명령어 실행

  • r
    r 입력하여 명령 실행, 명령 실행 문구와 Program Counter 값 변화 확인

Comp 커맨드

COMP (Compare target)
A register의 값과 비교 대상의 값을 비교해서
비교 결과 (GT, EQ, LT) 를 register cc 값으로 설정함

  • lda로 register A에 2가 load됨
  • comp one 이므로 2>1을 비교해서 GT가 cc register의 값이 됨

JSUB, RSUB

JSUB (Label)
Jump 할 위치와 함께 사용, register에 복귀할 주소를 저장하고 Jump
RSUB
피연산자 없이 사용, 저장했던 복귀 주소로 복귀

jsub 명령어가 실행되면 L register에 다음 실행할 명령어의 주소를 저장한 후에 Subroutine(plus)로 점프한다.

이해

first의 명령어를 1줄씩 실행함
기본적으로 a 레지스터를 대상으로 함

word형 변수는 처음에 메모리에 할당됨
resw는 명령어로 값을 지정하면 뒤에 하나씩 할당됨

word형이 메모리에 있는 것 확인
첫번째 명령어로 a 레지스터에 alpha값 들어간 것 확인

add incr를 실행해서 a 레지스터 값 3 증가함

sta beta 로 현재 a 레지스터의 값을 beta 변수에 넣음. 그리고 메모리에서 확인할 수 있음

lda gamm 로 gamm의 값인 10을 a register로 load함

sub one 로 a register에서 one의 값인 1을 빼줌

sta delta로 a 레지스터의 값인 9를 delta 변수에 할당하고 메모리에서 확인함

0개의 댓글