2007年4月備考三級PC(南開100題)
第一題:
一、請編制程序,其功能是:將內(nèi)存中由SOURCE指示的40個字節(jié)有符號數(shù)組成的數(shù)組分成正數(shù)和負數(shù)兩個數(shù)組,并求這兩個數(shù)組的數(shù)據(jù)個數(shù),結(jié)果存放在RESULT指示的內(nèi)存區(qū)域,存放形式為正數(shù)個數(shù)在前,其后跟正數(shù)數(shù)組元素,然后是負數(shù)個數(shù)及負數(shù)數(shù)組元素。
例如:
內(nèi)存中有 1EH,91H,74H,91H,42H,30H,81H,F3H,18H,25H
結(jié)果為 06H,1EH,74H,42H,30H,18H,25H,04H,91H,91H,81H,F3H
部分程序已給出, 其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT中讀入SOURCE開始的`內(nèi)存單元中。運算結(jié)果要求從RESULT開始存放,由過程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之間已給出的一段源程序使其完整(空白已用橫線標出,每行空白一般只需一條指令, 但采用功能相當(dāng)?shù)亩鄺l指令亦可),或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
對程序必須進行匯編,并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文件,最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)試中若發(fā)現(xiàn)整個程序中存在錯誤之處, 請加以修改。
試題程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 40
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(0)
RESULT DB N+2 DUP(0)
NAME0 DB #39;INPUT1.DAT#39;,0
NAME1 DB #39;OUTPUT1.DAT#39;,0
NDATA DB N DUP(0)
PDATA DB N DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;置附加段寄存器
LEA DX,SOURCE ;數(shù)據(jù)區(qū)起始地址
LEA SI,NAME0 ;原始數(shù)據(jù)文件名
MOV CX,N ;字節(jié)數(shù)
CALL LOAD ;從#39;INPUT1.DAT#39;中讀取數(shù)據(jù)
;****BEGIN****
LEA SI,SOURCE
MOV DI,OFFSET PDATA ;PDATA為正數(shù)數(shù)組存放緩沖區(qū)首址
MOV BX,OFFSET NDATA ;NDATA為負數(shù)數(shù)組存放緩沖區(qū)首址
XOR DX,DX
MOV CX,N
CLD
MAIN1: LODSB
TEST AL,_______________
JZ MAIN2
INC DH ;-
MOV [BX],AL
INC BX
_______________
MAIN2: INC DL
MOV [DI],AL ;+
INC DI
MAIN3: _______ MAIN1
LEA SI,PDATA
LEA DI,RESULT
MOV [DI],DL
INC DI
XOR CX,CX
MOV CL,DL
MAIN4: MOV AL,_______________
MOV [DI],AL
INC DI
INC SI
LOOP _______________
MOV [DI],DH
INC DI
XOR CX,CX
MOV CL,DH
MOV BX,OFFSET NDATA
MAIN5: MOV AL,[BX]
MOV [DI],AL
INC DI
_______________
LOOP MAIN5
;****END****
LEA DX,RESULT ;結(jié)果數(shù)據(jù)區(qū)首址
LEA SI,NAME1 ;結(jié)果文件名
MOV CX,N+2 ;字節(jié)數(shù)
CALL SAVE ;保存結(jié)果到文件
RET
START ENDP
CODE ENDS
END START
第二題:
一、請編制程序,其功能是:內(nèi)存中連續(xù)存放著10個無符號8位格雷碼表示的數(shù),現(xiàn)將此十個數(shù)轉(zhuǎn)換成十個8位二進制數(shù),結(jié)果存入內(nèi)存,其轉(zhuǎn)換方法為二進制數(shù)的最高位D7與格雷碼的最高位G7相同,二進制數(shù)的其余七位DK(k=6,…,0)分別為格雷碼的位GK(k=6,…,0)與二進制數(shù)的位DK+1(k=6,…,0)異或的結(jié)果。
例如:
內(nèi)存中有 00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H
結(jié)果為 00H,02H,32H,45H,08H,19H,67H,03H,90H,85H
部分程序已給出, 其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT中讀入SOURCE開始的內(nèi)存單元中。運算結(jié)果要求從RESULT開始存放,由過程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之間已給出的源程序使其完整(空白已用橫線標出,每行空白一般只需一條指令, 但采用功能相當(dāng)?shù)亩鄺l指令亦可),或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
對程序必須進行匯編,并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文件,最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)試中若發(fā)現(xiàn)整個程序中存在錯誤之處, 請加以修改。
試題程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?) ;順序存放10個字節(jié)數(shù)
RESULT DB N DUP(0) ;存放結(jié)果
NAME0 DB #39;INPUT1.DAT#39;,0
NAME1 DB #39;OUTPUT1.DAT#39;,0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ;數(shù)據(jù)區(qū)起始地址
LEA SI,NAME0 ;原始數(shù)據(jù)文件名
MOV CX,N ;字節(jié)數(shù)
CALL LOAD ;從#39;INPUT1.DAT#39;中讀取數(shù)據(jù)
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,10
AGN0: MOV AL,[SI]
________________
MOV CX,8
MOV BX,0
AGN1: MOV AH,0
SHL BL,1
____ AL,1
RCL AH,1
CMP AH,____
________________
JMP NEXT
SET_ONE:OR BL,01H
NEXT: MOV ____,BL
________________
LOOP AGN1
________________
MOV [DI],BL
INC SI
INC DI
LOOP AGN0
;****END****
LEA DX,RESULT ;結(jié)果數(shù)據(jù)區(qū)首址
LEA SI,NAME1 ;結(jié)果文件名
MOV CX,N ;結(jié)果字節(jié)數(shù)
CALL SAVE ;保存結(jié)果到文件
RET
START ENDP
CODE ENDS
END START
【4月備考三級PC南開100題】相關(guān)文章:
三級(PC技術(shù))樣題10-09