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改為位元組變數。
需要說明的是,考生在識別錯誤時首先應充分利用匯編和連線軟體工具檢查程式中的語法錯誤,然後再通過除錯與執行,驗證程式設計中使用的指令以及演算法的正確性。否則,面臨眾多的隱藏錯誤,將一定會感到束手無策。