這種題型是根據考題要求,在BEGIN和END區間自行編制程序,然後進行彙編、連接,並運行程序,最後得到正確結果。下面是一個編制程序的例子,題目要求是:
內存中連續存放着二十個字(WORD),對每個字邏輯左移,使其最高位爲1,其中值爲零的不變。例如:
內存中有 29C1H(0010100111000001B),0000H,134BH,...
結果爲 A704H(1010011100000100B),0000H,9A58H,...
部分程序已給出,其中原始數據由過程LOAD從文件中讀入SOURCE開始的`內存單元中,運算結果要求從RESULT開始存放,由過程SAVE保存到文件中。
下面是程序清單,其中BEGIN和END之間的程序段由考生編寫。
;
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 DUP (?)
SSEG ENDS
CSEG SEGMENT ;代碼段
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
LEA DX,SOURCE ;原始數據區首址送DX
LEA SI,NAME0 ;輸入文件名首址送SI
MOV CX,2*N ;輸入字節數送CX
CALL LOAD ;從中讀取數據
; **** BEGIN ****
LEA SI,SOURCE ;原始數據首地址送SI
MOV DI,OFFSET RESULT ;結果數據首地址送DI
MOV CX,N ;字節數送CX
NEXT: MOV AX,[SI] ;取一個字數據
CMP AX,0 ;是0嗎?
JE SKIP ;是,跳過這一個字
LOOP1: TEST AX,8000H ;否,最高位是1嗎?
JNE SKIP ;是,跳過這一個字
SHL AX,1 ;否,左移一位
JMP LOOP1 ;繼續測試最高位是否爲1
SKIP: MOV [DI],AX ;保存變換結果於RESULT中
ADD SI,2 ;修改原始數據區指針
ADD DI,2 ;修改結果數據區指針
LOOP NEXT ;繼續檢查下一個字數據
; **** END ****
LEA DX,RESULT ; 結果數據區首址送DX
LEA SI,NAME1 ; 結果文件名首址送SI
MOV CX,N*2 ; 結果字節數送CX
CALL SAVE ; 保存結果到
RET
START ENDP
CSEG ENDS
END START