资源描述
三级PC南开100题
第一题:
一、请编制程序,其功能是:将内存中由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
SEARC
展开阅读全文