计算机三级PC技术模拟试题100题-计算机等级考试-233网
第一题:
一、请编制程序,其功能是:将内存中由SOURCE指示的40个字节有符号数组成的数组分成正数和负数两个数组,并求这两个数组的数据个数,结果存放在RESULT指示的内存区域,存放形式为正数个数在前,其后跟正数数组元素,然后是负数个数及负数数组元素。
例如:
内存中有 1EH,91H,74H,91H,42H,30H,81H,F3H,18H,25H
结果为 06H,1EH,74H,42H,30H,18H,25H,04H,91H,91H,81H,F3H
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
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 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',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 ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
MOV DI,OFFSET PDATA ;PDATA为正数数组存放缓冲区首址
MOV BX,OFFSET NDATA ;NDATA为负数数组存放缓冲区首址
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 ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N+2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第二题:
一、请编制程序,其功能是:内存中连续存放着10个无符号8位格雷码表示的数,现将此十个数转换成十个8位二进制数,结果存入内存,其转换方法为二进制数的最高位D7与格雷码的最高位G7相同,二进制数的其余七位DK(k=6,…,0)分别为格雷码的位GK(k=6,…,0)与二进制数的位DK+1(k=6,…,0)异或的结果。
例如:
内存中有 00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H
结果为 00H,02H,32H,45H,08H,19H,67H,03H,90H,85H
部分程序已给出, 其中原始数据由过程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 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****
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 ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;结果字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第三题:
一、请编制程序,其功能是:内存中连续存放着20个十六位二进制无符号数序列,请将它们排成升序(从小到大)。
例如:
内存中有 7001H,7004H,7002H…(假设后17个字均大与7004H)
结果为 7001H,7002H,7004H…(后跟17个字,按从小到大的顺序排列)
部分程序已给出, 其中原始数据由过程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 DW N 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****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,N
NEXT0: MOV AX,[SI]
MOV [DI],AX
ADD SI,_________
_____________________
LOOP ____________
CLD
MOV BX,N-1
MAL1: LEA SI,RESULT
MOV CX,_________
NEXT: LOD______
CMP [SI],AX
JAE CONT
XCHG [SI],__________
MOV [SI-2],AX
CONT: LOOP _______________
________________________
________ MAL1
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N*2 ;结果字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第四题:
一、请编制程序,其功能是:内存中连续存放着24个无符号二进制字序列,字的最高位为000,此序列对应某一信号在一段时间内的连续变化,现对第21个二进制字前的20个二进制字进行移动平均处理,其方法为:将要处理的字Xi用以它为开始的连续五个字的平均数(Xi+Xi+1Xi+2Xi+3Xi+4)/5代替(余数舍去),得到新的20个无符号二进制字序列,结果存入内存。
例如:
内存中有 0100H,0200H,0300H,0400H,0500H,0600H…
结果为 0300H,0400H…
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 24
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DW N DUP(?) ;顺序存放24个字
RESULT DW 20 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 DI,0
MOV SI,0
MOV CX,20
MOV BX,__________
AGN0: MOV AX,SOURCE[SI]
PUSH SI
PUSH CX
MOV _______ , _______
AGN1: INC SI
INC SI
ADD AX,SOURCE[SI]
LOOP AGN1
______________________
DIV BX
MOV RESULT[DI],AX
INC DI
______________________
POP CX
POP SI
INC SI
______________________
LOOP AGN0
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,40 ;结果字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第五题:
一、请编制程序,其功能是:内存中从SOURCE开始连续存放着21个八位有符号数(补码),其相邻两数之间差值不超过-8至7。对这种变化缓慢的数据可采用差分方法进行压缩。即第一个数据不变,其后的数据取与前一数据的差值并用四位二进制补码表示,两个差值拼成一个字节,前一个差值放在高四位,后一个差值放在低四位。
例如:
原数据(X[n]):23H,27H,2AH,29H,22H…
压缩后(Y[n]):23H, 43H, F9H…
编程按上述方法进行压缩,结果保存在RESULT开始的内存单元中。
部分程序已给出, 其中原始数据由过程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 2*N+1 DUP(?)
RESULT DB N+1 DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',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 ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,2*N+1 ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
CLD
MOVSB ;Y[0]=X[0]
XOR BX,BX ;FLAG=0
MOV DX,N*2 ;COUNTER
COMPRESS:
LODSB ;X[n]-X[n-1]
SUB _______________ ;FLAG=NOT FLAG
________________________
J_______ LOW_HEX
MOV CL,4
________ AL,CL
MOV AH,AL
JMP NEXT
LOW_HEX:
_________________________
OR AL,AH
STOSB
NEXT: _________________________
JNE COMPRESS
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N+1 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第六题:
一、请编制程序,其功能是:将内存中存放着20个数字0~9之间的ASCII字符(包括数字0和9的ASCII字符)或SP字符(20H),请将数字0~9之间的ASCII字符(包括数字0和9的ASCII字符)转换为相应的八位二进制数,并将SP字符转换为 $ 字符(24H)。将按上述方法处理后得到的20个字节存入内存中。
例如:
内存中有 20H('SP'),30H('0'),31H('1'),31H('1'),20H('SP'),32H('2'),…,39H('9')(共20个ASCII字符)
结果为 24H('$'),00H,01H,01H,01H,24H('$'),02H('2'),…,09H('9')(共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 DI,0
________________________
CHAN: ________________________
SUB AL,20H
JZ CHANGE
SUB AL,____________
MOV RESULT[DI],AL
________________________
________________________
DEC CX
JZ EXIT
JMP CHAN
CHANGE: MOV RESULT[DI],24H
INC DI
INC SI
JMP _______________
EXIT : NOP
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第七题:
一、请编制程序,其功能是:内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。欲寻找ASCII字符串由13个字符组成:#(23H),7个ASCII字符,*(2AH),2个ASCII字符,回车符(0DH),换行符(0AH)。
校验方法为:对字符#及字符*之间的7个ASCII字符进行异或操作,若异或操作结果的ASCCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符*之后的两个ASCII字符相同,则将原字符串原样保存;反之,则将原字符串中的所有字符(共13个)均用字符!(21H)代替。
例如:
内存中有 33H,35H,23H('#',第一个字符串开始),46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),32H,31H,0DH,0AH,46H,23H('#',第二个字符串开始),46H,41H,30H,2EH,34H,3DH,30H,2AH('*'),32H,31H,0DH,0AH,55H
结果为 23H,46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),32H,31H(校验正确,该字符串原样保持),0DH,0AH,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H(校验错,整个字符串用字符'!'代替)。
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 26
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N+4 DUP(?)
RESULT DB N DUP(0)
HH DB 2 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+4 ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
MOV SI,0
MOV DI,0
MOV BX,2 ;两个ASCII字符串
REPEAT: MOV AH,0
SEARCH: MOV AL,SOURCE[SI]
INC SI
CMP AL,'#'
________ SEARCH
MOV RESULT[DI],AL
INC DI
SEARCH1:MOV AL,SOURCE[SI]
INC SI
CMP AL,____________
JE ASCII
MOV RESULT[DI],AL
INC DI
XOR AH,AL
JMP _______________
ASCII: MOV RESULT[DI],AL
INC DI
PUSH DI
MOV DI,0
MOV DH,2
MOV DL,AH ;异或结果暂存在DL中
MOV CL,4 ;先将异或结果高4位转换成ASCII字符
SHR AH,CL ;本行开始的4行语句将一个十六进制数转换为ASCII码
CHANGE: CMP AH,10
JL ADD_0
ADD AH,'A'-'0'-10
ADD_0: ADD AH,'0'
MOV HH[DI],AH
INC DI
DEC DH
JZ EXT
MOV AH,DL ;再将异或结果低4位转换成ASCII字符
AND AH,0FH
JMP CHANGE
EXT: POP DI
MOV AL,SOURCE[SI]
MOV RESULT[DI],AL
INC SI
INC DI
MOV AH,SOURCE[SI]
MOV RESULT[DI],AH
INC SI
INC DI
MOV DL,HH
MOV DH,HH+1
CMP AX,DX
________ ERR
MOV AL,0DH ;校验正确
MOV RESULT[DI],AL
INC DI
MOV AL,0AH
MOV RESULT[DI],AL
INC DI
JMP LP
ERR: SUB DI,11 ;校验错误
MOV AL,'!'
MOV CX,____________
COVER: MOV RESULT[DI],AL
INC DI
LOOP COVER
LP: ________________________
JZ EXIT
JMP REPEAT
EXIT: NOP
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第八题:
一、请编制程序,其功能是:内存中连续存放着10个十六位二进制数,每个数的序号依次定义为0,1,…,9。统计每个数中位为0的个数N0,N1,…,N9(均用一个字节表示),然后按序定义将N0至N9存入内存中,最后再用一个字节这10个数中为0的位的总数n(n=N0+N1+…+N9)。
例如:
内存中有 0000H,000FH,FFFFH…
结果为 10H,0CH,00H…最后为n
部分程序已给出, 其中原始数据由过程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****
MOV DI,OFFSET RESULT
MOV CL,N
MOV BX,0
MOV DH,0
PRO: MOV DL,0
MOV AX,SOURCE[BX]
MOV CH,_____________
COUNT: _________________________
________ JUMP
INC DL
JUMP: DEC CH
JNZ ________________
MOV [DI],DL
ADD DH,DL
INC DI
ADD _________________
DEC CL
JNZ PRO
MOV ________________
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;结果字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第九题:
一、请编制程序,其功能是:内存中有一个由16个十六位二进制数组成的数组(SOURCE)和一个字变量L。试将L作为逻辑尺对数组SOURCE进行下列处理:如L的第i位为0,则数组的第i个数不变;如L的第i位为1,则数组的第i个数按位取反。字L的位序从低到高依次为0至15,数组下标依次从0到15。
例如:L=0009H,数组为 139CH,89C6H,5437H,8819H…
变换为 EC63H,89C6H,5437H,77E6H…
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入(L在前,SOURCE在后)。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 16
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
L DW ?
SOURCE DW N 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,L ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,2*(N+1) ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
__________________
MOV CX,N
MOV DX,_________
L0: MOV AX,[SI]
________ L,DX
________ STORE
NOT AX
STORE: MOV [DI],AX
ADD DI,2
ADD SI,2
_____________________
LOOP L0
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,2*N ;结果字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第十题:
一、请编制程序,其功能是:计算10个有符号字节数据的绝对值之和(字型),并找出绝对值最大的数及其所在的偏移地址,最后将它们依次存入指定的内存中,结果以FFH结束。
例如:
内存中有 10H,01H,27H,00H,FEH,80H,00H,03H,FFH,01H
结果为 BFH,00H,80H,05H,00H,FFH
部分程序已给出, 其中原始数据由过程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 DB 6 DUP(0)
MAX DB ?
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 DX,SI
MOV CX.N-1
MOV AL,[SI]
ADD AL,0
JNS P1
_____________________
P1: MOV MAX,AL
ADD [DI],AL
___________________________
GOON: INC SI
MOV AL,[SI]
ADD AL,0
JNS P2
NEG AL
P2: ADD [DI],AL
___________________________
CMP MAX,AL
JAE __________________
MOV MAX,AL
MOV DX,SI
NEXT: LOOP GOON
ADD DI,2
MOV AL,MAX
MOV [DI],AL
INC DI
MOV [DI],DX
ADD DI,2
MOV BYTE PTR [DI],___________
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,6 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CSEG ENDS
END START
第十一题:
一、请编制程序,其功能是:以SOURCE开始的内存区域存放着多个字节的数据,其中有压缩BCD码和其他数据。现按下列编码规则进行编码:在第每个压缩BCD码前面加两个字节前缀代码BEH和CCH,并在其后加两个字后缀代码DDH和EDH;如果不是压缩BCD码,则该数据前后均加两个代码0DH和0EH。编码后的数据存放到RESULT指示的内存区域。
例如:
内存中有 12H,D9H,86H,54H…
结果为 BEH,CCH,12H,DDH,EDH,0EH,D9H,0DH,0EH,BEH,
CCH,86H,DDH,EDH,BEH,CCH,86H,DDH,EDH…
部分程序已给出, 其中原始数据由过程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(?)
RESULT DB 5*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
MOV ES,AX ;置附加段寄存器
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
MOV DI,OFFSET PDATA ;PDATA为正数数组存放缓冲区首址
MOV CX,N
CLP1: MOV AL,[SI]
MOV BL,AL
MOV AH,AL
________________________
AND AL,0F0H
_________________________
MOV CL,4
_________________________
POP CX
CMP ________________
JA CLP2
CMP AH,9
JA CLP2
MOV ________________
INC DI
MOV BYTE PTR[DI],0CCH
INC DI
MOV BYTE PTR[DI],BL
INC DI
MOV BYTE PTR[DI],0DDH
INC DI
MOV BYTE PTR[DI],0EDH
JMP CLP3
CLP2: MOV BYTE PTR[DI],0DH
INC DI
MOV BYTE PTR[DI],0EH
INC DI
MOV BYTE PTR[DI],BL
INC DI
MOV BYTE PTR[DI],0DH
INC DI
MOV BYTE PTR[DI],0EH
CLP3: INC SI
INC DI
_________________________
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N+2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第十二题:
一、请编制程序,其功能是:内存中连续存放的20个八位无符号数是一个自动抄表仪抄录的20个用户某月的用水量(立方米),为了控制用水量,水费计算公式如下(X表示用水量;Y表示水费,单位为分):
1、 Y=X*70 X<=5
2、 Y=X*100 5<X<=5
3、 Y=X*150 X>20
例如:
用水量(X): 04H, 10H, 18H…
水费 (Y):0118H,0640H,0E10H…
试计算出这20个用户应缴纳的水费,结果用字(WORD)表示。
部分程序已给出, 其中原始数据由过程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 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 ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
CLD
MOV CX,N
MOV BL,70
MOV BH,100
MOV DL,150
NEXT: ___________________________
CMP AL,5
J_______ GT5
___________________________
JMP STORE
GT5: CMP AL,20
J_______ GT20
____________________________
JMP STORE
GT20: ____________________________
STORE: MOV [DI],AX
____________________________
____________________________
LOOP NEXT
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N*2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第十三题:
一、请编制程序,其功能是:内存中连续存放的20个八位无符号数是一个自动抄表仪抄录的20个用户某月的用水量(立方米),为了控制用水量,水费计算公式如下(X表示用水量;Y表示水费,单位为分):
a) Y=X*70 X<=5
b) Y=10*70+(X-10)*120 X>10
例如:
用水量(X): 04H, 0FH, 18H…
水费 (Y):0118H,0514H,094CH…
试计算出这20个用户应缴纳的水费,结果用字(WORD)表示。
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
RATE1 EQU 70
RATE2 EQU 120
DELTA EQU 10
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N 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 ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
CLD
MOV CX,N
MOV BL,RATE1
MOV BH,RATE2
NEXT: ___________________________
CMP AL,DELTA
J_______ GREAT
MUL BL
JMP STORE
GREAT: ___________________________
MUL BH
___________________________
STORE: ___________________________
___________________________
INC SI
LOOP NEXT
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N*2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第十四题:
一、请编制程序,其功能是:对一个由可打印ASCII字符(ASCII码20H~7FH)组成的字符串可采用下列方法进行压缩:从串首开始向后扫描,如某字符单独出现该字符不变,如某字符连续出现n次,则该字符用ESC(1BH),n,<原字符>三个字节来代替(假定n不超过255)。
例如:
原串: 41H,43H,43H,43H,43H,43H,43H,61H,00H("ACCCCCCa")
压缩后: 41H,1BH,06H,43H,61H,00H
设内存中从SOURCE开始有一字符串,其以00H结束,长度不超过100。试编程对其进行压缩,结果存入RESULT开始的内存单元。
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 100
ESC_CODE EQU 27
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
MOV ES,AX ;置附加段寄存器
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
CLD
INC DI
L0: ___________________________
CMP AL,0
JE QUIT
MOV CX,OFFFFH ;SET THE COUNTER TO 0FFFFH
___________________________ ;字符串重复搜索,CX=0FFFFH-n
NEG CX ;10000H-CX→CX
___________________________ ;获得重复次数n
CMP CX,1
J_______ COMPRESS
MOV [SI],AL
INC SI
JMP __________________
COMPRESS:
MOV [SI],BYTE PTR ESC_CODE
MOV [SI+1],CL
MOV [SI+2],AL
___________________________
JMP L0
QUIT: MOV [SI],AL ;STORE THE '00H'
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第十五题:
一、请编制程序,其功能是:对一个由可打印ASCII字符(ASCII码20H~7FH)组成的字符串可采用下列方法进行压缩:从串首开始向后扫描,如某字符单独出现该字符不变,如某字符连续出现n次,则该字符用ESC(1BH),n,<原字符>三个字节来代替(假定n不超过255)。
例如:
设内存中从SOURCE开始有一用上述方法压缩的字符串,其以00H结束,长度不超过100。试编程对其进行解压缩,结果存入RESULT开始的内存单元。
原串: 41H,1BH,06H,43H,61H,00H
解压后: 41H,43H,43H,43H,43H,43H,43H,61H,00H("ACCCCCCa")
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 100
ESC_CODE EQU 27
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
MOV ES,AX ;置附加段寄存器
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
CLD
L0: LODSB
CMP AL,0
JE QUIT
CMP AL,ESC_CODE
J_______ EXPAND
___________________________
JMP L0
EXPAND: ___________________________ ;解压
XOR CX,CX
___________________________
___________________________
___________________________
___________________________
JMP L0
QUIT: STOSB ;STORE THE '00H'
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第十六题:
一、请编制程序,其功能是:对经常上下波动的数据可采用只记录峰值的数据压缩方法。即每次将采样到的当前值和前一次值比较,如数据变化方向改变(原变大现变小或原变小现变大),说明已过峰值,这时就将前一值(峰值)记录下来。
例如(下例数据均为无符号数):
原数据: 23H,45H,89H,67H,5CH,36H,3CH…
压缩后: 23H,89H,36H…
内存中从SOURCE连续存放着48个八位无符号数,假定无相邻两数相等的情况,编程按上述方法进行压缩,结果保存在RESULT开始的内存单元中。
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 40
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
MOV ES,AX ;置附加段寄存器
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
CLD
MOVSB
XOR AX,AX
XOR BX,BX
LODSB
MOV BL,[SI-2]
SUB AX,BX
MOV DX,AX
MOV CX,N-2
FILTER: XOR AX,AX
XOR BX,BX
LODSB ;X[n]
MOV BL,[SI-2] ;X[n-1]
SUB AX,BX ;X[n]-X[n-1]
___________________________ ;相邻两差值(AX,DX)符号位是否相同
___________________________
J_______ SKIP ;相同,数据方向未变
___________________________ ;不同,数据变化,保存峰值
STOSB
SKIP: ___________________________
LOOP FILTER
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第十七题:
一、请编制程序,其功能是:从10个有符号字节数据中取出负数并计算其绝对值之和(字型),然后存放在指定的内存区中,多余的空间填0。
例如:
内存中有: 80H,01H,02H,00H,FFH,7CH,FEH,7BH,FDH,81H
结果为 : 80H,FFH,FEH,FDH,81H,05H,01H,00H,00H,00H
部分程序已给出, 其中原始数据由过程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 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 SI,SOURCE
LEA DI,RESULT
MOV DX,0
MOV CX,N
CLD
CONT: LODSB
__________________________
JGE _________________
MOV [DI],AL
INC DI
__________________________
ADD DL,AL
__________________________
NEXT: LOOP CONT
MOV [DI],DX
ADD DI,2
MOV CX,20
SUB CX,DI
MOV AL,0
___________________________
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CSEG ENDS
END START
第十八题:
一、请编制程序,其功能是:以SOURCE开始的内存区域存放着20个字节的信息,其中有ASCII字符和汉字机内码。若一个字节中最高位为0,则表示ASCII字符,若连续两个字节的每个字节最高位均为1,则为汉字机内码(表示一个汉字)。将ASCII字符个数存入RESULT指示的单元,表示汉字的个数存入下一个单元,其后存放原来20个字节的信息。
例如:
内存中有 30H,38H,89H,A9H,E0H,97H,61H,4AH
结果为 04H,02H,30H,38H,89H,A9H,E0H,97H,61H,4AH
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
ESC_CODE EQU 27
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N+2 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****
LEA SI,SOURCE
MOV DI,OFFSET RESULT+2
MOV CX,N
MOV DX,0 ;ASCII字符个数在DL中,汉字个数在DH中
LPST: MOV AL,[SI]
MOV [DI],AL
________ AL,80H
JZ LASCII
INC SI
____________________________
DEC CX
JZ _____________________
MOV AL,[SI]
MOV [DI],AL
TEST AL,80H
JZ _____________________
INC DH
JMP LPCOM1
LASCII: _____________________________
LPCOM1: INC SI
INC DI
LOOP LPST
REST11: LEA DI,RESULT
MOV _________,DL
INC DI
MOV [DI],______________
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N+2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第十九题:
一、请编制程序,其功能是:一故障报警系统连续集20个字节数据存于SOURCE开始的内存区域,如果数据字节中有二进制位0(0代表有故障),则记录该数据字节中0的个数,并按数据字节在前,0的个数在后的顺序存放到RESULT开始的内存区域。
例如:
内存中有: FEH,90H,FFH,DDH…
结果为: FEH,01H,90H,06H,FFH,00H,DDH,02H…
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
ESC_CODE EQU 27
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N*2 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****
LEA SI,SOURCE
MOV DI,OFFSET RESULT
CLD
MOV DL,N
LP1: ___________________________ ;字节数计数器DL
MOV [DI],AL
MOV CX,_______________
MOV DH,0
LP2: ________ AL,1
JC __________________
INC DH
LP3: ________ LP2
INC DI
MOV [DI],_____________
___________________________
___________________________
JNZ __________________
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N*2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第二十题:
一、请编制程序,其功能是:有一抄表系统采集的数据中包括8位的窃水状态字节(一个字
节记录4块水表状态),格式为:
D7 D6 D5 D4 D3 D2 D1 D0
S4 S3 S2 S1 X4 X3 X2 X1
其中Si,Xi(i=1,2,3,4)分别表示第i块水表短路和断路状态位,1表示有短路或断路情况发生(表示有偷水情况),现共采集了5个字节的窃水状态,如果有窃水情况,则记录在RESULT中,记录格式为:表号,状态,表号,状态……没有短断路,则记录E0H,断路记录E1H,短路记录E2H,如01H,E1H,02H,E0H,03H,E2H,04H,E0H表示第一块表断路,第二块表无窃水状态,第三块表短路,第四块表也无窃水发生。
例如:
内存中有: 83H…
结果为: 01H,E1H,02H,E1H,03H,E0H,04H,E2H…
该内存中从SOURCE开始有一字符串,其以00H结束,长度不超过100。试编程对其进行压缩,结果存入RESULT开始的内存单元。
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 5
ESC_CODE EQU 27
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N*8 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****
LEA SI,SOURCE
MOV DI,OFFSET RESULT
MOV DH,N
LPM: MOV AL,[SI]
MOV BL,AL
INC SI
MOV CL,_____________
SHR BL,CL
MOV CX,4
MOV BH,0
LP0: SHR AL,1 ;BH放水表号
INC BH
MOV [DI],BH
__________________________
JC LP1
SHR BL,1
JC LP2
MOV DL,0E0H
JMP LPCOM
LPLP: LOOP __________________
JMP RET1
LP1: SHR BL,1
MOV DL,_______________
JMP LPCOM
LP2: MOV DL,0E2H
LPCOM: MOV [DI],DL
____________________________
JMP LPLP
RET1: DEC DH
________ LPM
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N*2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
第二十一题:
一、请编制程序,其功能是:以SOURCE开始的内存区域存放着若干字节的数据,以'#'作为数据的结束标志。将其中的空格滤除,对每个非空格数据的最高位清0后依次存放到RESULT指示的区域,其后存放一个空格符(20H),然后存放原来的空格个数,最后仍以'#'结束。
内存中有 45H,20H,87H,20H,A5H,32H,20H,20H,20H,23H
结果为 45H,07H,25H,32H,20H,05H,23H
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
ESC_CODE EQU 27
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
MOV ES,AX ;置附加段寄存器
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
MOV DI,OFFSET RESULT
XOR BL,BL
AGN1: MOV AL,[SI]
INC SI
CMP AL,' '
JE __________________
JMP AGN2
AGN11: INC BL
JMP AGN1
AGN2: CMP AL,_______________
JE DONE
AND AL,7FH
MOV [DI],AL
___________________________
___________________________
DONE: MOV AL,_______________
MOV [DI],AL
INC DI
MOV [DI],BL
INC DI
MOV AL,'#'
MOV ____________,AL
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第二十二题:
一、请编制程序,其功能是:内存中连续存放着9个ASCII字符(8位二进制数表示,最高位为零),把它们转换成串行通讯中偶校验码,并计算9个偶校验码的累加码(累加值的低8位二进制数),将九个偶校验码按原序存入内存,累加码存放在此序最后。
例如:
内存中有: 37H,38H,39H…
结果为 : B7H,B8H,39H…累加码
部分程序已给出, 其中原始数据由过程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 9 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-1 ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
MOV SI,OFFSET SOURCE
MOV DI,OFFSET RESULT
MOV DX,N-1
MOV AL,0
LP0: MOV BL,[SI]
MOV CX,8
________ AX
MOV AL,0
LP1: ________ BL,1
________ AL,0
LOOP LP1
AND AL,01H
ROR AL,1
OR _________,_________
MOV [DI],BL
________ AX
ADD AL,BL
INC DI
INC SI
DEC ____________________
JNZ LP0
_____________________________
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START