推荐文章:备考三级PC南开100题(2) 推荐文章简介: 第十一题:一、请编制程序,其功能是:以SOURCE开始的内存区域存放着多个字节的数据,其中有压缩BCD码和其他数据。现按下列编码规则进行编码:在第每个压缩BCD码前面加两个字节前缀代码BEH和CCH,并在其后加两个字后
第三十一题:
一、请编制程序,其功能是:内存中连续存放着10个16位二进制数,分别对每个数的高位字节和低位字节进行逻辑与运算及逻辑或运算。运算结果以字的形式按序连续存放(低位字节存入逻辑与运算的结果,高位字节存入逻辑或运算的结果)。
例如:
内存中有 AA55H,55AAH,FFAAH…
结果为 FF00H,FF00H,FFAAH…
部分程序已给出, 其中原始数据由过程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 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 DI,OFFSET RESULT
MOV CX,N
MOV BX,00
PRO: MOV AX,_______________
MOV DX,AX
AND _________,DH
________ AH,AL
MOV _________,DL
ADD BX,2
___________________________
JNZ PRO
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N*2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第三十二题:
一、请编制程序,其功能是:将连续20个字节的十六进制数顺序转换成40个ASCII字符(字母用大写)。转换的顺序是先高四位,后低四位。
例如: 原始数据是 AFH,14H…
转换后应是 41H,46H,31H,34H…
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请在BEGIN和END之间补充一段源程序,完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
DSEG SEGMENT
SOURCE DB N DUP(?)
RESULT DB 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,DS:DSEG,SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
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,N
LOOP2: MOV BL,2 MOV AL,[SI]
MOV AH,AL
PUSH CX
MOV CL,4
SHR AL,CL
POP CX
EXCH: CMP AL,9
JNA CHAR
ADD AL,07H
CHAR: ADD AL,30H
MOV [DI],AL
INC DI
DEC BL
JZ LOOP1
AND AH,0FH
MOV AL,AH
JMP EXCH
LOOP1: INC SI
LOOP LOOP2
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N*2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CSEG ENDS
END START
第三十三题:
一、请编制程序,其功能是:为一个ASCII字符串中所有的字符最高位加上奇校验位。字符串以00H结束,长度不超过20个字节。
例如: 字符串为 41H,42H,43H,00H(’ABC’)
转换后为 C1H,C2H,43H,00H
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请在BEGIN和END之间补充一段源程序,完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
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
DW 256 DUP(?)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
LOOP2: MOV AL,[SI] CMP AL,00H
JE EXIT
ADD AL,0
JNP LOOP1
OR AL,80H
LOOP1: MOV [DI],AL INC DI
INC SI
JMP LOOP2
EXIT: MOV [DI],AL
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CSEG ENDS
END START
第三十四题:
一、请编制程序,其功能是:为一个ASCII字符串中所有的大写字母全部变成小写字母,其它字符不变。字符串以00H结束,长度不超过20个字节。
例如: 字符串为 41H,42H,31H,65H,00H(’AB1e’)
转换后为 61H,62H,31H,65h,00H(’ab1e’)
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请在BEGIN和END之间补充一段源程序,完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
DATA SEGMENT PARA PUBLIC 'DATA'
SOURCE DB N DUP(?)
RESULT DB N DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
SSEG SEGMENT STACK
DB 256 DUP(?)
SSEG ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL FAR PTR LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
LOOP1: MOV AL,[SI] CMP AL,00H
JE EXIT
CMP AL,41H
JB KEEP
CMP AL,5AH
JNBE KEEP
ADD AL,20H
KEEP: MOV [DI],AL
INC DI INC SI
JMP LOOP1
EXIT: MOV [DI],AL
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL FAR PTR SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第三十五题:
一、请编制程序,其功能是:设20个8位有符号数构成一个数组,试依次去掉其中负的奇数,生成一个新的数组(顺序不变)。
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中(请自行在CX中设定输出长度)。
请在BEGIN和END之间补充一段源程序,完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
LE EQU 20
DSEG SEGMENT
SOURCE DB LEN DUP(?)
RESULT DB LEN DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DSEG ENDS
SSEG SEGMENT STACK
DW 256 DUP(?)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,LEN ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取20个字节的数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,20
LOOP1: MOV AL,[SI] MOV AH,AL
SHR AH,1
JNC KEEP
CMP AL,0
JNL KEEP
JMP EXIT
KEEP: MOV [DI],AL
INC DI
EXIT: INC SI LOOP LOOP1
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
CALL SAVE ;保存结果到文件
RET
START ENDP
CSEG ENDS
END START
第三十六题:
一、请编制程序,其功能是:将一个字符串中连续相同的字符仅用一个字符代替,生成一个新的字符串。字符串以00H结束,长度不超过20个字节。
例如: 原字符串为 41H,41H,41H,42H,31H,31H,00H(’AAAB11’)
新字符串为 41H,42H,31H,00H(’AB1’)
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中(请自行在CX中设定输出长度)。
请在BEGIN和END之间补充一段源程序,完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
试题程序:
EXTRN LOAD:FAR,SAVE:FAR
LE EQU 20
DSEG SEGMENT
SOURCE DB LEN DUP(?)
RESULT DB LEN DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DSEG ENDS
SSEG SEGMENT STACK
DW 256 DUP(?)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,LEN ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,20
LOOP1: MOV AL,[SI] CMP AL,00H JE EXIT
NEXT: INC SI
MOV AH,[SI]
CMP AL,AH
JE NEXT
MOV [DI],AL
INC DI
JMP LOOP1
EXIT: MOV [DI],AL
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
CALL SAVE ;保存结果到文件
RET
START ENDP
CSEG ENDS
END START
第三十七题:
一、请编制程序,其功能是:内存中连续存放着20个十六进制数,对每个数逻辑右移,使其最低位为“1”(值为零的字不变)。
例如:
内存中有: A704H(1010011100000100B)0000H,9A58H…
结果为: 29C1H(0010100111000001B)0000H,134BH…
部分程序已给出, 其中原始数据由过程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,2*N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,N
NEXT: MOV AX,[SI]
CMP AX,_______________
JE SKIP
LOOP1: ________ AX,0001H
J_______ SKIP
________ AX,1
JMP LOOP1
SKIP: MOV [DI],AX
ADD SI,2
ADD DI,2
___________________________
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N*2 ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第三十八题:
一、请编制程序,其功能是:内存中从SOURCE开始连续存放着20个十六位二进制数,试统计每个数中二进制位为1的个数。结果以字节存放。
例如:
内存中有: 139CH,5B8CH,1489H…
结果为: 07H, 08H, 05H…
部分程序已给出, 其中原始数据由过程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 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,2*N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
CLD
MOV DX,N
LOOP0: LODS_______________________
___________________________
MOV CX,16
LOOP1: ROL AX,1
J_______ NEXT
INC BX
NEXT: LOOP __________________
MOV [DI],BL
___________________________
DEC DX
JNZ LOOP0
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第三十九题:
一、请编制程序,其功能是:以SOURCE开始的内存区域存放着N个字节的压缩BCD码,将每个压缩BCD码转换成两个ASCII码,并在最高位增加偶校验位,结果存放到RESULT指示的内存区域。
例如:
原压缩BCD码:26H,75H,91H,33H…
结果为: B2H,36H,B7H,35H,39H,B1H,33H,33H…
部分程序已给出, 其中原始数据由过程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 2*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
MOV CX,N
SERCH1: MOV __________________
CMP AX,AL
AND AH,0FH
AND AL,0F0H
PUSH CX
MOV CL,4
___________________________
___________________________
ADD AL,30H
___________________________
OR AL,80H
SERCH2: MOV [DI],AL
INC DI
___________________________
JP SERCH3
OR AH,80H
SERCH3: MOV [DI],AH
INC DI
INC SI
________ SERCH1
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX, 2*N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
第四十题:
一、请编制程序,其功能是:内存中连续存放着两个无符号字节数序列AK和BK(k=0…9),求序列CK,CK=AK÷BK(运算结果按序以字的形式连续存放,其中低字节为商,高字节为余数)。
例如:
序列AK为: 01H,7FH,80H,FFH…
序列BK为: FFH,80H,7FH,01H…
序列CK为: 0100H(00H是商、01H为余数),7F00H,0101H,00FFH…
部分程序已给出, 其中原始数据由过程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,2*N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
;****BEGIN****
MOV SI,OFFSET SOURCE
MOV BX,0
___________________________
PRO: MOV __________________
________ _______,SOURCE[BX]
DIV __________________
MOV [DI],_____________
ADD DI,2
___________________________
DEC CX
________ PRO
;****END****
LEA DX,RESULT ;结果数据区首址
LEA SI,NAME1 ;结果文件名
MOV CX,2*N ;字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
|