推荐文章:全国计算机等级考试一级15 推荐文章简介: 1.微机中1K字节表示的二进制位数是( )。D A、1000 B、8x1000 C、1024 D、8x1024 2.计算机硬件能直接识别和执行的只有( )。D A、高级语言 B、符号语言 C、汇编语言 D、机器语言 3.用于保存计算机输入输出数
第七十一题:
一、请编制程序,其功能是:内存中连续存放着由串行通讯接收到的10个字节数,根据通讯协议,前九个数应为ASCII字符(8位二进制数表示,最高位为零)的偶校验码,最后一个数为前九个偶校验码的累加码(累加值的低8位二进制数),现依次判别接收的前九个字节数是否为偶校验码,若是,则将其转换为ASCII字符,否则以07H代替。然后计算接收的前九个字节数的累加码,并与接收到的累加码比较,若相等则在紧跟九个转换结果后的一个内存单元中置06H,否则置07H。
例如:
内存中有 B7H,38H,39H…
结果为 37H,07H,39H…后跟06H或07H。
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?) ;顺序存放9个ASCII字符
RESULT DB N DUP(0) ;存放结果
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',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 ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
MOV SI,OFFSET SOURCE
MOV DI,OFFSET RESULT
MOV DX,N-1
MOV AL,0
PRO: MOV BL,[SI]
________ AX
MOV CX,8
MOV AL,0
LP1: ROR BL,1
ADC AL,0
LOOP LP1
AND AL,01H
________ GOOD0
MOV BL,07H
JMP STORE0
GOOD0: AND ________,________
STORE0: MOV [DI],BL
________ AX
ADD AL,[SI]
INC DI
INC SI
DEC DX
JNZ LP0
__________________________
JZ GOOD1
MOV AL,07H
JMP STORE1
GOOD1: MOV AL,06H
STORE1: MOV [DI],AL
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;结果字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第七十二题:
一、请编制程序,其功能是:内存中连续存放着10个无符号8位二进制数,现将此十个数转换成10个8位格雷码表示的数,结果存入内存。其转换方法为格雷码的最高位g7与二进制数的最高位d7相同,格雷码的其余七位gk(k=6,…0)分别为二进制数的位dk+1(k=6,…,0)与位dk(k=6,…,0)异或的结果。
例如:
内存中有 00H,02H,32H,45H,08H,19H,67H,03H,90H,85H
结果为 00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?) ;顺序存放10个字节数
RESULT DB N+1 DUP(0) ;存放结果
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',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 ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N*2 ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,10
AGN0: MOV AL,[SI]
______________________
MOV CX,8
MOV BX,0
AGN1: MOV AH,0
________ BL,1
ROL AL,1
_________________________
CMP AH,BH
________ SET_ONE
JMP NEXT
SET_ONE:OR BL,01H
NEXT: MOV _________,AH
LOOP AGN1
_________________________
MOV [DI],BL
INC SI
INC DI
LOOP AGN0
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;结果字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第七十三题:
一、请编制程序,其功能是:内存中连续存放着5个递增的无符号8位二进制数,此5个数分别对应于某非线性温度传感器在温度0℃、3℃、6℃、9℃和12℃时的输出值Yn(n=0、3、6、9、12),现采用分段线性插值法求出传感器在温度1℃、2℃、4℃、5℃、7℃、8℃、10℃和11℃时的近似输出值Yk(k=1、2、4、5、7、8、10、11),Yk取整数,其公式为Yk=[(Yn+3-Yn)/3]*(k-n)+Yn,其中k=n+1、n+2,n=0、3、6、9,将结果存入内存。
例如:
内存中有 01H,0AH,19H,31H,5EH
结果为 04H,07H,0FH,14H,21H,29H,40H,4FH
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 5
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?) ;顺序存放10个字节数
RESULT DB 5 DUP(0) ;存放结果
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',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 ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N*2 ;字数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,4
__________________________
AGN0: MOV BL,[SI]
INC SI
MOV AL,[SI]
SUB AL,BL
__________________________
MOV BH,1
AGN1: MUL _________________
DIV DL
ADD ___________,BL
MOV [DI],AL
INC DI
__________________________
INC BH
CMP BH,______________
JNA AGN1
LOOP AGN0
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,8 ;结果字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第七十四题:
一、请编制程序,其功能是:以SOURCE开始的内存区域存放着N个字节的有符号数。现找出最大的数,结果存放到RESULT指示的单元,其后存放原N个数逻辑取反后的值。
内存中有 09H,7EH,89H,F3H,17H,…,67H(N个数据)
结果为 7EH(最大数),F6H,81H,76H,0CH,E8H,…,98H(原来N个数的逻辑反)
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 19
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N+1 DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',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 ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
________ SI,SOURCE
MOV BX,OFFSET SOURCE
LEA DI,RESULT
MAXD1: MOV CX,N
MOV DX,CX
MOV AL,_______________
MAXD2: INC BX
________ AL,[BX]
___________________________
MOV AL,[BX]
MAXD3: DEC DX
JNZ __________________
MOV [DI],AL
INC DI
CLD
MREP: LODSB
NOT AL
____________________________
LOOP MREP
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N+1 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第七十五题: 一、请编制程序,其功能是:内存中连续存放着两个无符号字节数序列Ak和Bk(k=0,…,9),求序列Ck,Ck为Ak和Bk异或运算的结果。以字节的形式按C0,…,C9的顺序存放逻辑运算的结果。 例如: 序列Ak为: 00H,03H,07H… 序列Bk为: FFH,AAH,55H… 序列Ck为: FFH,A9H,52H… 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。 试题程序: EXTRN LOAD:FAR,SAVE:FAR N EQU 10 ;每个序列的长度 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N*2 DUP(?) RESULT DW N DUP(0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',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 ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N*2 ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ;****BEGIN**** MOV __________________ MOV __________________ MOV BX,0 PRO: MOV AL,_______________ XOR AL,[BX] MOV __________________ INC DI DEC CX JNZ PRO ;****END**** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N ;字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START 第七十六题: 一、请编制程序,其功能是:将10个无符号字节数据中高4位和低4位所表示的十六进制数分别转换为ASCII码,并按照先低后高位的顺序存放在指定的内存区中。 例如: 内存中有 61H,4AH,5BH… 结果为 31H,36H,41H,34H,42H,35H… 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。 试题程序: EXTRN LOAD:FAR,SAVE:FAR N EQU 10 DSEG SEGMENT SOURCE DB N DUP(?) RESULT DW 2*N DUP(0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DSEG ENDS SSEG SEGMENT STACK DB 256 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,SS:SSEG,DS:DSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ;****BEGIN**** LEA SI,SOURCE LEA DI,RESULT MOV CX,N CLD NEXT: LODSB MOV BL,AL AND AL,_______________ CALL SR MOV AL,BL PUSH CX MOV CL,4 SHR AL,_______________ ___________________________ CALL SR LOOP NEXT JMP EXIT SR PROC CMP AL,0AH JB NUM ADD AL,07H NUM: ADD AL,_______________ STOSB RET SR ___________________________ ;****END**** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,2*N ;字节数 CALL SAVE ;保存结果到文件 RET START ENDP CSEG ENDS END START 第七十七题: 一、请编制程序,其功能是:计算10×3矩阵中每一行元素(八位二进制数)之和,并将其存放在指定的内存区中。 例如: 内存中有 0,0,0(第1行),1,1,1(第2行)…9,9,9(第10行) 结果为 0000H,0003H…001BH 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。 试题程序: EXTRN LOAD:FAR,SAVE:FAR N EQU 30 DSEG SEGMENT SOURCE DB N DUP(?) RESULT DW N/3 DUP(0) I EQU 10 J EQU 3 NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DSEG ENDS SSEG SEGMENT STACK DB 256 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,SS:SSEG,DS:DSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ;****BEGIN**** LEA SI,SOURCE LEA DI,RESULT MOV BX,1 LPI: MOV DX,0 MOV CX,1 LPJ: MOV AL,[SI] ___________________________ ADD DX,AX INC __________________ INC CX CMP CX,_______________ JBE LPJ MOV [DI],_____________ ADD DI,_______________ INC BX CMP BX,I JBE LPI ;****END**** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N*2/3 ;字节数 CALL SAVE ;保存结果到文件 RET START ENDP CSEG ENDS END START 第七十八题: 一、请编制程序,其功能是:计算10×3矩阵中每一行元素(八位二进制数)之和,并将其存放在指定的内存区中。 例如: 内存中有 0,0,0,0,0,0,0,0,0,0(第1行),1,1,1,1,1,1,1,1,1,1(第2行)…9,9,9,9,9,9,9,9,9,9,9,9,9(第3行) 结果为 000AH,000AH…000AH 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。 试题程序: EXTRN LOAD:FAR,SAVE:FAR N EQU 30 DSEG SEGMENT SOURCE DB N DUP(?) SRC DW SOURCE RESULT DW N/3 DUP(0) I EQU 3 J EQU 10 NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DSEG ENDS SSEG SEGMENT STACK DB 256 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,SS:SSEG,DS:DSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ;****BEGIN**** LEA SI,SOURCE LEA DI,RESULT MOV BX,1 LPJ: MOV DX,0 MOV CX,1 LPI: MOV AL,[SI] ___________________________ ADD DX,AX ADD SI,_______________ INC CX CMP CX,I JBE LPI MOV [DI],DX ADD DI,_______________ INC SRC ___________________________ CMP BX,_______________ JBE LPJ ;****END**** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N*2/3 ;字节数 CALL SAVE ;保存结果到文件 RET START ENDP CSEG ENDS END START 第七十九题: 一、请编制程序,其功能是:在递增的有序字节数组中插入一个正整数,并按指定的数组个数存入内存区中。假设数组元素均为正数。 例如,将02H插入下面的数组中: 01H,03H,04H,05H… 结果为 01H,02H,03H,04H,05H… 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。 试题程序: EXTRN LOAD:FAR,SAVE:FAR N EQU 10 DSEG SEGMENT MIN DB -1 SOURCE DB N DUP(?) X EQU 2 ;插入的个数 RESULT DB N DUP(0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DSEG ENDS SSEG SEGMENT STACK DB 256 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,SS:SSEG,DS:DSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ;****BEGIN**** LEA BX,SOURCE MOV SI,N-2 ADD BX,SI MOV SI,0 MOV AL,X LP: CMP ________,[BX+SI] JGE INS MOV DL,[BX+SI] MOV [BX+SI+1],________ DEC __________________ JMP LP INS: MOV ____________,AL CLD LEA SOURCE LEA RESULT MOV CX,N ________ MOVSB ;****END**** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N ;字节数 CALL SAVE ;保存结果到文件 RET START ENDP CSEG ENDS END START 第八十题: 一、请编制程序,其功能是:对内存中存放的四组带符号8位二进制数(每组由五个数组成,均不为零)进行处理。处理方法为:当每组中负数多于正数时,将组内正数变成负数(但绝对值不变,下同),组内负数不变。反之,将组内负数变成正数,组内正数不变。变换好的数按原序存放在内存中。 例如: 内存中有 FDH,FEH,02H,01H,03H,03H,01H,FFH,FEH,FDH…(共四组20个数) 结果为 03H,02H,02H,01H,03H,FDH,FFH,FFH,FEH,FDH…(共20个数) 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。 试题程序: EXTRN LOAD:FAR,SAVE:FAR N EQU 20 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) RESULT DB N DUP(0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',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 ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ;****BEGIN**** MOV SI,0 MOV DI,0 MOV BX,_______________ REPT1: MOV DX,0 MOV CX,5 CAMP: MOV AL,SOURCE[SI] INC SI CMP AL,0 ________ CONT JMP __________________ CONT: INC DX NEXT: LOOP CAMP SUB SI,5 MOV CX,5 CMP DX,3 ________ NEG1 JMP NEXT1 NEG1: MOV AL,SOURCE[SI] INC SI CMP AL,0 JG NEG2 JMP NOTNEG NEG2: NEG AL NOTNEG: MOV RESULT[DI],AL INC DI LOOP NEG1 JMP NEXT2 NEXT1: MOV AL,SOURCE[SI] INC SI CMP AL,_______________ JL NEG3 JMP __________________ NEG3: NEG AL NOTNEG1:MOV RESULT[DI],AL INC DI LOOP NEXT1 NEXT2: DEC BX ___________________________ JMP REPT1 EXIT: NOP ;****END**** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N ;字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
|