1 上機考試環境
1.硬件環境
主機 | 386、486、586及其各種兼容機 |
內存 | 640KB基本內存,具有1MB以上的擴充內存 |
顯示卡 | 彩顯VGA |
顯示內存 | 具有512KB以上的顯示內存 |
硬盤空間 | 10MB以上硬盤空間 |
2.軟件環境
MS-DOS5.0、PC-DOS5.0及以上各種版本 | |
漢字系統 | 希望漢字系統UCDOS5.0及以上各種版本(正版軟件) |
TURBO-C 2.0 | |
驅動程序 | 使用、等擴充內存管理器 |
3.配置文件設置
FILES=64
DEVICE=C:DOS
DEVICE=C:DOS RAM
DOS=HIGH,UMB
BUFFERS=16
4.修改錯誤
這種題型是在程序中設置了若干錯誤,考生應根據題目要求,修改程序中的錯誤,使程序能正常彙編、連接,並獲得正確的運行結果。
下面是一個修改程序錯誤的例子,題目要求是:
內存中從SOURCE開始連續存放着二十個字(WORD),試統計每個字中二進制位爲1的個數,結果以字節存放。
例如: 內存中有 139CH,5B8CH,1489H,...
結果爲 07H, 08H, 05H,...
部分程序已給出,其中原始數據由過程LOAD從文件中讀入SOURCE開始的內存單元中,運算結果要求從RESULT開始存放,由過程SAVE保存到文件中。
修改源程序中的錯誤,使程序運行後能夠獲得考題所提出的運行結果。
;
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
DSEG SEGMENT
SOURCE DW N DUP(?)
RESULT DW N DUP(0)
NAME0 DB '',0
NAME1 DB '',0
DSEG ENDS
SSEG SEGMENT STACK
DB 128 ;錯誤1
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START: PROC FAR ;錯誤2
PUSH DS
XOR AX,AX
PUSH AX
MOV DS,DSEG ;錯誤3
LEA DX,SOURCE ;數據區起始地址
LEA SI,NAMEO ;錯誤4
MOV CX,2*N ;字節數
CALL LOAD ;從中讀取數據
LEA SI,SOURCE
CLD
MOV DX,N
LOOP0: LODS SOURC
XOR BX,BX
MOV CX,16
LOOP1: ROL AX,1
JNC NEXT
INC BX
NEXT: LOOP LOOP0 ;錯誤5
MOV DESULT,BL ;錯誤6
INC DI
DEC DX
JNZ LOOP0
LEA DX,RESULT ;結果數據區首址
LEA SI,NAME1 ;結果文件名
MOV CX,N ;結果字節數
CALL SAVE ;保存結果到
RET
START ENDP
CSEG ENDS
END START
上面的程序中設置了六種類型的錯誤,其錯誤性質是:
錯誤1,雖然這條僞指令語句沒有語法錯誤,但這樣設計是不合理的,因爲該語句只是在堆棧中存放了一個字節的數據,也就是說,堆棧空間只有一個字節的大小,因此執行本程序時顯然是不夠用的,當程序執行後必然會出現不可預料的結果。
錯誤2,根據僞指令語句格式要求,僞指令名後面沒有冒號,因此該語句非法。
錯誤3,根據傳送指令的要求,立即數不能直接傳送給段寄存器。也就是說,爲了對段寄存器初始化,必須先把立即數送到某通用寄存器,然後再由通用寄存器把立即數送到段寄存器,才能達到對段寄存器初始化之目的'。
錯誤4,由於該指令把NAME0誤寫成NAMEO,彙編時找不到變量名NAMEO,因而指出NAME0未定義,只要將NAMEO改寫爲NAME0即可。
錯誤5,這條語句沒有語法錯誤,但這樣設計目標地址不能獲得考題規定的運算結果,必須將目標地址LOOP0改爲LOOP1,程序運算結果纔會正確。碰到這種類型的錯誤,考生應仔細閱讀程序,徹底理解每一條指令在程序中所起的作用,才能改正這種類型的錯誤。
錯誤6,該指令錯誤的性質是操作數類型不匹配,因爲目的操作數爲字變量,而源操作數爲8位寄存器。因此,爲了使操作數類型匹配,應將BL寄存器改爲BX寄存器,或者將RESULT改爲字節變量。
需要說明的是,考生在識別錯誤時首先應充分利用匯編和連接軟件工具檢查程序中的語法錯誤,然後再通過調試與運行,驗證程序設計中使用的指令以及算法的正確性。否則,面臨衆多的隱藏錯誤,將一定會感到束手無策。