Lab & Homeworks‎ > ‎

Homeworks 2013

1. Sum(1..n) 프로그램

  1. n 값을 입력 받아 1 부터 n 까지의 합을 구해 출력하는 프로그램을 LMC 10개의 명령어를 이용하여 작성하고 실행하시오. (주의: 교재 p19의 while loop의 lmc 코드에서 ALU 연산 없이 condition을 검사한 것은 잘못된 것임. 강의노트에 정정된 코드가 있음)
  2. 1번 프로그램을 10개 명령어 이외의 확장된 명령어로 모두 바꾸시오. (예: LDA 50 --> LD A 50)
  3. 2번 프로그램을 다양한 Addressing mode의 명령어를 활용하여 간결하게 만드시오. (예: Indexed Addressing Mode, 참고: 교재 P241)

<< 리포트 내용 >>
  1. LMC 기계어로 작성된 프로그램에 니모닉 및 주석을 단 프로그램 (예:  299   STA 99  // A 값을 99번지에 저장, 99번지는 int n;를 뜻함)
  2. 해당 프로그램을 LMC 머신에서 실행시키는 과정을 설명 (프로그램을 메일박스로 옮기는(Loading) 과정. 예: Tape booting ...)
  3. 생각해보기(리포트에 포함)
  • 상수 1과 변수 n을 메일 박스의 어디에 배치할 것인가?
<<제출 방법>>
  • 사이버캠퍼스(http://cyber2010.kookmin.ac.kr/index.jsp)에 온라인으로 제출하고 마감일 강의 시작 전에 출력물 제출

2. LMC Op Code 개인화 및 Subroutine Program
  1. LMC OP Code 개인화 하시오
    1. 바꿀 화일: builtin/cpubuiltin.h
      - 이 화일을 수정하고 다시 make 해야 함
      - make가 수정 사항을 잘 반영하지 못한다고 의심되면 make clean을 실행하고 다시 make할 것
    2. 바꿀 명령어 코드: JMP, LD, ST, LDH, STH, PUSH, POP, ADD, SUB, MUL, DIV, IMUL, IDIV, SKIP3, JCALL, JRET, JSUB, RSUB, CALL, RET, CMP, NEG, AND, OR, XOR, NOT, SHR, SHL, RTR, RTL, SHRA
    3. 참고 문서: "LMC 명령어 확장하기", "모듈-> CPU -> Instruction Set -> Instruction Format"
    4. 중복 코드 검사 방법

      1. LMC 디렉토리로 이동

      2. /opt/builtin_check.sh를 실행

      문제가 있는 경우 다음과 같이 나타남.

      [u20131234@linux LMC-1.3.4.6]$ /opt/builtin_check.sh
      Duplicate Instruction Count : 6
      Duplicated Code List:
       58
       68
       71
       72
       983
       984

      정상적인 경우 다음과 같이 나타남.

      [u20131234@linux LMC-1.3.4.6]$ /opt/builtin_check.sh
      Duplicate Instruction Count : 0
      Duplicated Code List:



  2. 다음 프로그램을   OoAa Type 명령어를 사용하지 말고 확장된 명령어들(OoRR, OoRMFA, OORMD)의 개인화된 코드로 다시 작성하여 실행 하시오. 
    •  IN   10  // 510
       STA  11  // 211
       IN   10  // 510
       STA  12  // 212
       SUBA 11  // 411
       SKN      // 803
       JMP  09  // 909
       LDA  11  // 111
       SUBA 12  // 412
       OUT  12  // 612
       COB      // 700
       BOX  0   // 000
       BOX  0   // 000
      
       
    • Memory Mapped IO를 사용하시오.
      예    LD  A  92000100       ==>   1300  0100  9200
    • 상수  변수는 2개의 BOX 표현해야 한다. (낮은 자리가 낮은 주소로.. )
          90:  DBOX  12345678  ==> 90: 5678,  91:1234

  3. Sum(1..n) 프로그램을 3개의 함수로 나누고 main에서는  3 함수를 호출하는 구조로 바꾸시오 
 main() {
    n = data_in();
    total = sum(n);
    print(total);
 }
 
    1. Memory Mapped IO를 사용하시오.
      예    LD  A  92000100       ==>   1300  0100  9200
    2. 상수  변수는 2개의 BOX 표현해야 한다. (낮은 자리가 낮은 주소로.. )
          90:  DBOX  12345678  ==> 90: 5678,  91:1234

    4. Report 내용
  • 개인화된 코드 테이블 builtin/cpubuiltin.h  build_builtin_opmap() )
  • 바뀐 2 프로그램(니모닉, 기계어, 주석 포함)
    LD  A  20    1100 0020 0000   // 20:21번지 값을 A 이동
  • 위 3번에서 재구성된 Sum(1..n) 프로그램 (니모닉과 주석으로 표현)
  • Sum(1..n)프로그램을 의사 C 표현
  • 생각해보기
           - Skip on Condition & JMP의조합을 어떤 Conditional Jump 바꿀 것인가?
           - 3번의 C 프로그램 LMC 코드 바꿀 때 상수, 변수, 파라미터, 반환값 등을 어떻게 표현 또는 처리 하였는가?

    5. 제출방법
  • 사이버캠퍼스(http://cyber2010.kookmin.ac.kr/index.jsp)에 온라인으로 제출하고 마감일 강의 시작 전에 출력물 제출

3. Loader 및 실행화일

1. lmc를 부팅하면 Monitor로 진입하도록 바꾸고 다음을 실행하시오.
    • cassette/BOOT의 내용을 "9710 0700" 으로 다시 바꾸고 ./lmc를 실행
    • LD (13,OORFMA) , ST (22,OORFMA) 의 코드는 개인화된 자신 것을 이용
Monitor> load 100 1300 0200 0000 2200 0120 9200 1300 0202 0000 2200 0130 9200 9710 0700
Monitor> load 200 0062 0063 0010 0000
Monitor> run 100

2. 다음을 실행해 보시오.
Monitor> dasm 100 14
. . . 
Monitor> dump 200 4
. . . 


3. 이 프로그램을 "cassette/test.bl"이라는 BL type의 실행 화일로 만들어서 다음 명령으로 로딩하고 실행하시오.
  • 교재 Ch 5
  • mainboard/CMOS의 내용
#IRQ.No IO.Addr Type    R/W     Opt.
0       10      KEYBOARD
1       12      SCREEN
3       30      TAPE            root=cassette cassette=BOOT
4       40      TAPE            root=cassette cassette=test.bl

  • load and run
Monitor> load bl 4     // 4번장치에서 BL type의 실행화일을 로드하라는 뜻
Monitor> run 100
. . . 
 

  • cassette/test.bl의 실제 내용
0072 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0100 0000 0104 0000
1300 0200 0000 2200 0120 9200 1300 0202 0000 2200 0130 9200 9710 0700
0000 0000 0000 0000 ..... // 0000 이 86개
0062 0063 0010 0000
0069 0100 0000

 

  • cassette/test.bl의 내용 - 사람이 보기 좋은 형태
H "0123456789" 0100 0000 0104 0000
1300 0200 0000 2200 0120 9200 1300 0202 0000 2200 0130 9200 9710 0700
0000 0000 0000 0000 ..... // 0000 이 86개
0062 0063 0010 0000
E 0100 0000

 

 

4. 이 프로그램을 "cassette/test.rl"이라는 RL type의 실행 화일로 만들어서 다음 명령으로 로딩하고 실행하시오.
  • 교재 p 83, Ch 5
  • H, T, E 레코드만 사용하고 M 레코드는 여기서는 사용하지 않는다.
  • mainboard/CMOS의 내용
#IRQ.No IO.Addr Type    R/W     Opt.
0       10      KEYBOARD
1       12      SCREEN
3       30      TAPE            root=cassette cassette=BOOT
4       40      TAPE            root=cassette cassette=test.rl

  • load and run (M 레코드가 없으므로 반드시 실행화일의 start 주소와 같은 곳에 loading해야 한다.)
Monitor> load rl 4 100   // 4번장치에서 RL type의 실행화일을 읽어 100번지부터 로드하라는 뜻
Monitor> run 100
. . . 

 

  • cassette/test.rl의 내용 - 사람이 보기 좋은 형태
H "0123456789" 0100 0000 0104 0000
T 0100 0000 0009 1300 0200 0000 2200 0120 9200 1300 0202 0000 T 0109 0000 0005 2200 0130 9200 9710 0700
T 0200 0000 0004 0062 0063 0010 0000
E 0100 0000
 


 

5. 위 4번 실행화일에 M 레코드를 추가하여 어느 곳에 로딩하여도 문제없이 실행되도록 하시오.
  • load and run 
Monitor> load rl 4 398   // 4번장치에서 RL type의 실행화일을 읽어 398번지부터 로드하라는 뜻
Monitor> run 398
. . . 

 

  • cassette/test.rl의 내용 - 사람이 보기 좋은 형태
H "0123456789" 0100 0000 0104 0000
T 0100 0000 0009 1300 0200 0000 2200 0120 9200 1300 0202 0000 T 0110 0000 0005 2200 0130 9200 9710 0700
T 0200 0000 0004 0062 0063 0010 0000
M 0101 0000 0002 // 0000:0101 번지부터 2박스를 바꾸라는 뜻
. . .
E 0100 0000
 

  • 상수를 코드 앞에 놓는다면 아래와 같을 것이다 - 주의 E record
H "0123456789" 0100 0000 0018 0000
T 0100 0000 0004 0062 0063 0010 0000
T 0104 0000 0009 1300 0100 0000 2200 0120 9200 1300 0102 0000 T 0113 0000 0005 2200 0130 9200 9710 0700
M 0105 0000 0002 // 0000:0105 번지부터 2박스를 바꾸라는 뜻
. . .

E 0104 0000
 
 
6.1번 프로그램을 아래와 같이 출력장치 주소를 13(12+1)으로 변경하여 실행하고 그 차이를 관찰하시오.
Monitor> load 100 1300 0200 0000 2200 0130 9200 1300 0202 0000 2200 0130 9200 9710 0700
Monitor> load 200 0062 0063 0010 0000
Monitor> run 100

7. 6번 프로그램의 출력장치 주소를 50 또는 51(50+1)로 변경하여 Screen 대신 "output.txt"로 출력되는 것을 관찰하시오.
  • 이때 Screen과 Keyboard와는 달리 해당 장치를 초기화해야 한다. 힌트 교재 p250, Ch11
#IRQ.No IO.Addr Type    R/W     Opt.
0       10      KEYBOARD
1       12      SCREEN
3       30      TAPE            root=cassette cassette=BOOT
4       40      TAPE            root=cassette cassette=test.rl
5       50      TAPE            root=cassette cassette=output.txt      

8. 리포트 내용
  • 마지막 5번 프로그램의 LMC 프로그램(ORG를 적절히 사용하고 주소는 숫자대신 symbolic label로 표현할 것)
  • 1번과 6번 프로그램의 출력장치 주소 12와 13의 차이를 설명하고 출력값 0010 이 13번 장치로 출력될 때의 기능을 설명하시오.
    힌트: 교재 p246, p403
  • 7번에서 I/O 장치를 어떻게 초기화했는지 해당 코드 조각과 함께 설명하시오.
9. 제출 방법
  • 사이버캠퍼스(http://cyber2010.kookmin.ac.kr/index.jsp)에 온라인으로 제출하고 마감일 강의 시작 전에 출력물 제출

4. Parameter Passing

1. LMC Assembler 사용하기
  • mainboard/CMOS를 아래와 같이 변경한다
#IRQ.No IO.Addr Type    R/W     Opt.
0       10      KEYBOARD
1       12      SCREEN
3       30      TAPE            root=cassette cassette=BOOT
4       40      TAPE            root=cassette cassette=042_extended.lmc
5       50      TAPE            root=cassette cassette=taeget.bl
6       60      TAPE            root=cassette cassette=target.list
  • cassette/BOOT 가 다음 내용인지 확인
9710
0700     
  • LMC Monitor에서 아래와 같이 실행한다.
Monitor>dc                   // dump CMOS
Monitor>asm 4 5 6            // 4번 장치의 lmc 소스코드를 번역하여 5번 장치에 기계어를 
                             // 6번 장치에 리스트를 출력
Monitor>load bl 5            // 5번 장치에서 BL type의 기계어를 로딩
Monitor>run 0               // 소스코드의 시작부분이 0번지 이므로
  • LMC를 종료하고 cassette 폴더에서 target.bl과 target.list 화일의 내용을 확인한다.
2. 다음 프로그램을 변수는 지역변수로하고 파라미터 및 리턴값은 스택을 통해서 전달하는 방식으로 완성하여 실행해보시오.
 main() {
    n = data_in();
    total = sum(n);
    print(total);
 }
3. 리포트 내용
  • 파라미터 전달과 반환값 전달의 개념 설명
  • 지역변수 배치에 대한 개념 설명
  • 2번 프로그램의 LMC 소스코드 (주석과 함께)
4. 제출 방법
  • 사이버캠퍼스(http://cyber2010.kookmin.ac.kr/index.jsp)에 온라인으로 제출하고 마감일 강의 시작 전에 출력물 제출

5. Instruction Set 개인화

1. Instruction Set을 개인화하여 학기말까지 그 명령어만 사용한다.
  • Instruction Set Table의 "선택"으로 표기된 69개의 명령어 중 40개를 선택하여 자신의 Instruction Set으로 정한다
    LD, ST, LDH, STH, ADD, SUB, MUL, IMUL, DIV, IDIV, AND, OR, XOR, NOT,NEG, SHL, SHR, SHRA, RTL, RTR, CMP
    SKIP3, JUMP, JSUB, RSUB, JCALL, JRET, CALL, RET, PUSH, POP, INC, DEC
  • 위에서 선택한 40개 이외에 아래 명령어를 추가로 사용할 수 있다.
    NOP, LDA, STA, ADDA, SUBA, IN, OUT, COB, SKIP, JMP, TIO, INT, POPALL, PUSHALL, IRET, INTON, INTOFF, LDIRG
  • 가능하면 주변 친구와 다르게 할 것
2. 아래 프로그램을 개인화된 Instruction Set으로만 구성된 어셈블리 언어로 번역(compile)한다.
  • 교재 Ch 6.5 High Level Logic Structure 참조 p168
  • 예제 참조: 예제 --> GRAPH.lmc
  • 소스 프로그램
  • int table[10]; char mark='*'; int i, j; int c, total; main() { for(i=0; i<10; i++) { table[i] = (short int)getc(stdin); // use Dev 10 }

    i=0; c=table[i]; while(i<10 && c>0) { total += c; putc((char)c,stdout); // use Dev 12 putc(':',stdout); // use Dev 13 for(j=0; j<c; j++) { putc(mark,stdout); // use Dev 13 ; 스크린에 *표가 문자로 출력됨 // Text Device of Screen p247, } putc('\n',stdout); i += 1; c=table[i]; } printf("Total:"); // LMC 어셈블리 언어 의사 명령어 사용 putc((char)total,stdout); // use Dev 12 putc('\n',stdout); }


3. 리포트 내용
  • 40개의 Instruction Set (Table에 O 표시)  
  • 번역된 프로그램 (개인화된 Instruction 이용)
    - 모니터의 어셈블러를 이용해서 나온 어셈블리 리스트(기계어, 주소, 라인넘버, 니모닉이 포함) 제출
  • 실행 예시 화면
4. 제출 방법
  • 사이버캠퍼스(http://cyber2010.kookmin.ac.kr/index.jsp)에 온라인으로 제출하고 마감일 강의 시작 전에 출력물 제출

6. Bootstrap Loader

1. 다음 프로그램을 LMC 코드로 번역하여 BL type 실행화일을 처리하는 Absolute Loader 제작하시오.
  • #define BOOT_DEV_ADDR 30 // 시스템 차원에서 고정 시키기로 한다. char progname[10]; int i, length, exec_start; int *start; main() {
    if (asm{ TIO <ioaddr>; }!=0) exit(1); // Device is not ready
    read Header record, if it is not H record, error! asm { BLK.SZ 10 LD.CW progname, BOOT_DEV_ADDR } start = atoi(asm { LD A 92000000+BOOT_DEV_ADDR*10}); length = atoi(asm { LD A 92000000+BOOT_DEV_ADDR*10}); for (i=0; i<length; i++) { *start[i] = asm{ IN BOOT_DEV_ADDR }; }; read End record, if it is not E record, error! get exec_start from E record; printf("Program %s is started ...\n",progname); jump to exec_start; }


2. 다음과 같은 절차로 임의의 BL type의 실행화일을 실행해 본다.
  • CMOS에서 3번 장치가 30번지로 지정되었는지 확인한 후 ./lmc를 실행한다.
  • #IRQ.No IO.Addr Type    R/W     Opt.
    0       10      KEYBOARD
    1       12      SCREEN
    3       30      TAPE            root=cassette cassette=BOOT
    4       40      TAPE            root=cassette cassette=absolute_loader.??   // bl 또는 rl
  • 임의의 BL type의 실행화일 카세트를 3번장치에 장착한다.
    Monitor>cc 3 test.bl          

    - Monitor의 CC(Change Cassette)명령어로 cassette를 교체할 수 있다.
    - 예: 3번 장치에 있던 BOOT를 빼고 "3. Loader 및 실행화일"에서 만든 cassette/test.bl을 장착한다는 뜻이다.
  • 4 장치에 있는 absolute loader의 실행화일을  Monitor 로딩한 뒤 실행한다.(load, run)
    - 어느 주소로 로딩할지는 absolute loader의 시작주소를 어디로 하였느냐에 달려있다.

    - 고정된 30번지(이 경우 3번 장치)에서 실행화일을 로딩한 후 그 프로그램을 바로 실행할 것이다.
3.  My Starter 만들기
  • 예제: rom3.lmc를 복사해서 다음 부분을 바꿔서 어셈블한 후 실행해 보시오.
    - START 0 또는 2000으로 변경
    프롬트를 "Monitor>" 대신 자신의 것으로 변경
  • 이 변경된 프로그램을 bl type으로 저장한다.
    - 2000번지로 로드
    - START 0으로 했을 경우 RL type으로 하여 relocation 해야하고 START 2000으로 하였을 경우에는 BL type으로 만들어 그대로 loading해도 됨
    dump 2000 <length>  <dev #>     // 메모리 내용을 bl type으로 저장하는 명령
4. mkboot를 이용해서 새로운 BOOT cassette를 만들어 부팅해 보시오.
  • mkboot 2개의 BL type 살행화일을 하나의 테입으로 합하여 주는 명령이다.

  • #IRQ.No IO.Addr Type    R/W     Opt.
    0       10      KEYBOARD
    1       12      SCREEN
    3       30      TAPE            root=cassette cassette=BOOT
    4       40      TAPE            root=cassette cassette=absolute_loader.bl
    5 50 TAPE root=cassette cassette=my_starter.bl
    6 60 TAPE root=cassette cassette=NEW_BOOT
  • Monitor>mkboot 4 5 6            
  • 첫번째 프로그램이 100박스보다 크면 100박스로 끊거나 작으면 100박스까지 0 채워 주는데 ROM 로더가 인식하는 포맷으로 바꾸어 쓰고 뒤로는 두번째 BL type 실행화일을 이어서 추가해준다.
  • 이제 위의 1번에서 만든 Absolute loader BL type으로 어셈블하고 3번에서 만든 My Starter BL type 이미지를 가지고 새로운 NEW_BOOT 카세트를 만들어 부팅한다.
  • #IRQ.No IO.Addr Type    R/W     Opt.
    0       10      KEYBOARD
    1       12      SCREEN
    3       30      TAPE            root=cassette cassette=NEW_BOOT
  • ROM에 상주하는 로더가 BOOT의 첫 100Box를 읽어서 무조건 0번지에 로딩한 후 실행하면 이 프로그램(Absolute loader)은 고정된 30번지에서 그 다음 프로그램(My Starter)를 2000번지에 로딩한 후 실행할 것이다. 
  • 이 Absolute loader를 Bootstrap loader라고 한다. 즉 부팅과정에서 하드웨어(ROM loader)가 kernel image(My Starter)를 바로 로딩할 수 있는 능력이 없으므로 일단 Bootstrap loader를 먼저 로딩하고 이 로더가 나머지 kernel image를 가져오도록 하는 것이다.
5. 간단한 Absolute loader
  • 1번 프로그램을 작성하는 것이 어려우면 일단 다음 프로그램을 사용해서 테스트해 볼 수 있다.
  • // absolute_loader.lmc
    BOOTSTRAP  START   0
               LD      A #30          // Boot 장치의 IO 주소를 A에 넣기
               JUMP    90090000U      // 내장 BL Loader로 점프
               END

6. 리포트 내용
  • My Starter가 로딩되기까지의 과정 및 개념 설명
  • Absolute Loader  My Starter 프로그램 
    - 모니터의 어셈블러를 이용해서 나온 어셈블리 리스트(기계어, 주소, 라인넘버, 니모닉이 포함) 제출
  • 실행 예시 화면
7. 제출 방법
  • 사이버캠퍼스(http://cyber2010.kookmin.ac.kr/index.jsp)에 온라인으로 제출하고 마감일 강의 시작 전에 출력물 제출

7. Global Array and Pointer

1. 다음 프로그램을  LMC 코드로 바꾸어 실행하시오.
  • static int table[10] = {10,9,8,7,6,5,4,3,2,1};    // 이렇게 초기화가 된다고 가정!!

    static int a, b, result; static int *p;
    static int add_two(int x, int y) {

        int tmp;     tmp = x + y;     return tmp;        // 반환값을 A 레지스터가 아닌 스택을 통해서 전달 받는다.      }
    main() {
        result = add_two(2,3);     OUT(result,stdout);
        a = table[2];     b = table[3];     result = add_two(a,b);     OUT(result,stdout);
        result = add_two(table[4],table[5]);     OUT(result,stdout);
        p = table;     result = add_two(p[1], *(p+2));     OUT(result,stdout);
        p = &table[5];     result = add_two(p[1], *(p+2));     OUT(result,stdout);
    }

2. 리포트 내용
  • 각 변수들의 배치 상황 설명
    - add_two 함수의 activation record 그림
    - 전역 변수들의 배치 상황 그림
  • 프로그램 
    - 모니터의 어셈블러를 이용해서 나온 어셈블리 리스트(기계어, 주소, 라인넘버, 니모닉이 포함) 제출
  • 실행 예시
    - add_two가 호출될 때 마다 activation record가 형성되었다가 해체되는 과정 그림으로 설명
3. 제출 방법
  • 사이버캠퍼스(http://cyber2010.kookmin.ac.kr/index.jsp)에 온라인으로 제출하고 마감일 강의 시작 전에 출력물 제출

8. Local Array and Pointer

1. 다음 프로그램을  LMC 코드로 바꾸어 실행하시오.
  • static int add_two(int x, int y) { int tmp; tmp = x + y; return tmp; // 반환값을 A 레지스터가 아닌 스택을 통해서 전달 받는다. } main() { int table[10]; int a, b, result; int *p; int i; for(i=9; i--; i>=0) table[i] = i+1; result = add_two(2,3); OUT(result,stdout); a = table[2]; b = table[3]; result = add_two(a,b); OUT(result,stdout); result = add_two(table[4],table[5]); OUT(result,stdout); p = table; result = add_two(p[1], *(p+2)); OUT(result,stdout); p = &table[5]; result = add_two(p[1], *(p+2)); OUT(result,stdout); }


2. 리포트 내용
  • 각 변수들의 배치 상황 설명
    - main 함수의 activation record 그림
    - Local Array의 배치 상황과 각 element의 addressing 방법
  • 위 프로그램 
    - 모니터의 어셈블러를 이용해서 나온 어셈블리 리스트(기계어주소라인넘버니모닉이  포함제출
  • 실행 예시
    - Array를 access하는 부분을 중심으로 설명
3. 제출 방법
  • 사이버캠퍼스(http://cyber2010.kookmin.ac.kr/index.jsp)에 온라인으로 제출하고 마감일 강의 시작 전에 출력물 제출
9. Execution Stack Trace

1. BIOS에는 Stack의 내용을 top에서 부터 Activation Record의 중심점(B register가 가리켰던 곳) 단위로 추적하는 기능이 있다. 이 기능을 이용한 예제 385_btrace.lmc를 실행하여 Stack의 상태(Activation Record)를 관찰 하시오.
INT 91         // stack top에서 한 구간 출력 (Activation record 구간이 아님)
INT 92         // stack top에서 두 구간 출력 (Activation record 구간이 아님)
INT 93         // stack top에서 세 구간 출력 (Activation record 구간이 아님)
INT 94         // stack top에서 네 구간 출력 (Activation record 구간이 아님)
INT 95         // 전구간 출력 (Chain이 0으로 끝날 때 까지)
2. 위 내용을 참고하여 LMC code from high level language C의 Array 및 dynamic memory allocation 예제를 실행하시오. SNAP으로 시작하는 라벨 지점에서의 Stack 상황이 교재처럼 적절하게 출력되어야 한다.


3. 리포트 내용
  • 위 프로그램 
    - 모니터의 어셈블러를 이용해서 나온 어셈블리 리스트(기계어주소라인넘버니모닉이  포함제출
  • 실행 예시 및 설명
4. 제출 방법
  • 사이버캠퍼스(http://cyber2010.kookmin.ac.kr/index.jsp)에 온라인으로 제출하고 마감일 강의 시작 전에 출력물 제출

Comments