第二十三题:
一、请编制程序,其功能是:以SOURCE开始的内存区域存放着红外数据通信系统传输的数据信息。其编码形式为:AACCXYXYDDEE,表示传送的数据为压缩BCD码XY。如AACC1212DDEE表示数据12。现要求编程实现解码,如果压缩BCD码不是以AACC开始或者不是以DDEE结束或中间两个BCD码不同,则此数据不解码。解码后的BCD码存入RESULT开始的内存区域。
例如:
原信息为 AAH,CCH,05H,05H,DDH,EEH,AAH,C8H,43H,43H,DDH,
0EH,AAH,CCH,87H,87H,DDH,EEH…
结果为 05H,87H…
部分程序已给出, 其中原始数据由过程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 6*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,6*N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
MOV DI,OFFSET RESULT
MOV CX,_______________
LPST: MOV DL,6
MCLP1: MOV AL,_______________
MOV BX,SI
CMP AL,0AAH
JNZ NEXTD
INC SI
MOV AL,[SI]
CMP AL,0CCH
____________________________
INC SI
MOV AL,[SI]
MOV DH,AL
INC SI
MOV AL,[SI]
_____________________________
JNZ NEXTD
INC SI
MOV AL,[SI]
CMP AL,0DDH
JNZ AEXTD
INC SI
MOV AL,[SI]
CMP AL,0EEH
JNZ NEXTD
INC SI
MOV [DI],DH
INC DI
NEXTD: _____________________________
MOV SI,BX
_____________________________
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第二十四题:
一、请编制程序,其功能是:将一数据采集系统中采集的80个字节无符号数(已存于SOURCE开始的内存区域)按算术平均数字滤波方法进行数字滤波,每8个数求一个平均值(舍去余数)。将10个平均值依次写入RESULT指示的内存区域。
例如:
原采集数据 1EH 31H 31H 33H 58H 75H 38H 34H 49H A2H 98H
DFH 99H 64H 64H B7H…
结果为 3DH CCH…
部分程序已给出, 其中原始数据由过程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 8*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,6*N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
MOV __________________
MOV DX,N
MAGN1: XOR AX,AX
XOR BX,BX
MOV CX,_______________
MAGN2: MOV AL,[SI] ;取数并求和放BX中
ADD BX,_______________
INC SI
____________________________
MOV AX,BX
____________________________
____________________________
____________________________
____________________________
DEC DX
________ MAGN1
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第二十五题:
一、请编制程序,其功能是:内存中连续存放着16个二进制字节数,在原16个数的第4和第5个数之间插入00H,在原16个数的第8和第9个数之间插入55H,在原16个数的第12和第13个数之间插入AAH,在原16个数最后加入FFH。将按上述方法插入4个字节数后得到的20个字节数存入内存中。
例如:
内存中有 10H,20H,30H,40H,50H,…,8FH(共16个字节)
结果为 10H,20H,30H,40H,00H,50H,…,8FH,FFH(共20个字节)
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入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
SOURCE DB N DUP(?)
INDATA DB 0FFH,0AAH,55H,00H
RESULT DB N+4 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****
___________________________
MOV DI,0
MOV CX,4
MOV BX,4
CHAN: ___________________________
MOV RESULT[DI],AH
___________________________
INC DI
DEC CX
JZ INSER1
JMP CHAN
INSER1: PUSH SI
MOV SI,BX
MOV AH,INDATA[SI-1]
MOV RESULT[DI],___________
DEC BX
JZ ______________________
MOV CX,04H
_______________________________
INC DI
JMP ______________________
EXIT: POP SI
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N+4 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第二十六题:
一、请编制程序,其功能是:内存中连续存放着16个16位二进制数,在原16个数的第4和第5个数之间插入00FFH,在原16个数的第8和第9个数之间插入FF00H,在原16个数的第12和第13个数之间插入55AAH,在原16个数最后加入AA55H。将按上述方法插入4个字节数后得到的20个字节数存入内存中。
例如:
内存中有 1020H,2002H,3033H,4440H,5008H,…,8FF8H(共16个字节)
结果为 1020H,2002H,3033H,4440H,00FFH,5008H,…,8FF8H,AA55H(共20个字节)
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入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
SOURCE DB N DUP(?)
INDATA DB 0AA55H,055AAH,0FF00H,00FFH
RESULT DB N+4 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 SI,0
___________________________
MOV CX,4
MOV BX,8
CHAN: MOV AX,SOURCE[SI]
___________________________
INC SI
___________________________
___________________________
INC DI
DEC CX
JZ INSER1
JMP CHAN
INSER1: PUSH SI
MOV SI,BX
MOV AH,INDATA[SI-2]
MOV RESULT[DI],___________
DEC BX
JZ EXIT
MOV CX,___________________
POP SI
INC DI
_______________________________
JMP ______________________
EXIT: POP SI
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,(N+4)*2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第二十七题:
一、请编制程序,其功能是:内存中连续存放着16个以八位二进制数表示的0~9之间的数字(包括数字0和9),请将它们转换为相应的ASCII字符,并且在原第1、5、9、13个数字前插入ASCII字符“$”(24H)。将按上述方法插入4个字符“$”后得到的20个字符存入内存中。
例如:
内存中有 00H,01H,01H,01H,02H,…,09H(共16个字节)
结果为 24H(’$’),30H(’0’),31H(’1’),31H(’1’),31H(’1’),24H(’$’),32H(’2’),…,39H(’9’)(共20个字节)
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
