天天看點

實驗一 指令解釋程式的編寫

一、目的和要求

1. 實驗目的

(1)掌握指令解釋程式的原理;

(2)*掌握簡單的DOS調用方法;

(3)掌握C語言程式設計初步。

2.實驗要求

編寫類似于DOS,UNIX的指令行解釋程式

(1)自行定義系統提示符

(2)自定義指令集(8-10個)

(3)使用者輸入HELP以查找指令的幫助

(4)列出指令的功能,區分内部還是外部指令

(5)使用者輸入QUIT退出

(6)内部指令有dir, cd, md, rd, cls, date, time, ren, copy等。

二、實驗内容

根據教師指定的實驗課題,完成設計、編碼、測試工作。

三、實驗環境

1.PC微機

2.Windows 作業系統

3.C/C++程式開發內建環境

四、實驗原理及核心算法參考程式段

  1. 指令解釋程式的原理:

指令解釋程式的主要功能是:

1)        接受和執行一條使用者從鍵盤輸入的指令,它通常儲存一張指令名字(動詞)表,其中記錄着所有操作指令及其處理程式的入口位址或有關資訊。

1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 
 5 #define MAXLINE 1000
 6 #define N 100
 7 #define Head1 "Microsoft Windows XP [版本 5.1.2600]"
 8 #define Head2 "<C> 版權所有 1985-2001 Microsoft Corp."
 9 #define Head3 "C:\\Documents and Settings\\Administrator>"
10 
11 
12 void FakeTopTitle()
13 {    
14     printf(Head1"\n");
15     printf(Head2"\n");
16     printf("\n");
17     //printf(Head3);
18 }
19 
20 /*
21 void ReadFromDocument()
22 {
23     FILE *fp;
24     char arr[MAXLINE+1];
25     printf("\n");
26     if ((fp = fopen ("CommandLine.txt", "r")) == NULL)
27     {
28          perror ("File open error!\n");
29          exit (1);
30     }
31     while ((fgets (arr, MAXLINE, fp)) != NULL)
32     {
33         fputs (arr, stderr);
34     }
35     printf("\n\n");
36     printf(Head3);
37 }    
38 */
39 /*
40 void Test()
41 {
42     char s[200][200] = {0};
43     int i=0;
44     FILE *fp;
45     fp = fopen("CommandLine.txt","r");
46     printf("\n");
47     for(i=0;i<200;i++)
48     {
49         fscanf(fp,"%s",s[i]);
50         printf("%s\n",s[i]);
51     }
52 }
53 */
54 
55 int main()
56 {
57     int i;
58     char a[100][100]={"assoc","attrib","break","bootcfg","cacls","call","cd","chcp","chdir",
59                     "chkdsk","chkntfs","cls","cmd","color","comp","compact","convert",
60                     "copy","date","del","dir","diskcomp","diskcopy","diskpart","doskey",
61                     "driverquery","echo","endlocal","erase","eventquery","fc",
62                     "find","for","format","fsutil","ftype","goto","gpresult","help","if",
63                     "label","md","mkdir","mode","more","move","openfiles","pagefileconfig",
64                     "path","pause","popd","print","prompt","pushd","rd","recover","rem",
65                     "ren","rename","replace","rmdir","set","setlocal","sc","schtasks",
66                     "shift","shutdown","sort","start","subst","systeminfo","tasklist",
67                     "taskkill","time","title","tree","type","ver","verify","vol","xcopy",
68                     "wmic"};
69     char b[100];
70     FakeTopTitle();
71 loop1:printf(Head3);
72       gets(b);
73     for(i=0;i<N;i++)
74     {
75             if(strcmp(a[i],b)==0)
76             {
77                 system(b);
78                 printf("\n");
79                 printf(Head3);
80                 getchar();
81             }
82             else
83             {
84                 break;
85             }
86             if(strcmp(b,"exit")==0)
87             {
88                 exit(0);
89                 getchar();
90             }
91     }
92     system(b);
93     goto loop1;
94     getchar();
95     return 0;
96 }