网友您好, 请在下方输入框内输入要搜索的题目:

题目内容 (请给出正确答案)

请编制程序PROC1.ASM,其功能是:内存中有一个ASCII字符串(从S0URCE开始存放),试将其中所有连续的回车与换行符(0DH,0AH)置换成单个回车符(0DH)。字符串以00H结尾,长度(包括00H)不超过100个字节。

例如:字符串41H,42H,0DH,0AH,43H,00H

转换为41H,42H,0DH,43H,00H

部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUT- PUT1.DAT中。请编写BECIN到END之间的代码。对程序必须进行汇编,并与IO.OBJ连接产生PROC1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。

部分源程序如下:

EXTRN LOAD:FAR,SAVE:FAR

N EQU 100

STAC SEGMENT STACK

DB 128 DUP (?)

STAC ENDS

DATA SEGMENT

SOURCE DB N DUP (0)

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 ****

***** END *****

LEA DX, RFSULT ; 结果数据区首址

LEA SI, NAME1 ; 结果文件名

MOV CX,N ; 结果字节数

CALL SAVE

RET

START ENDP

CODE ENDS

END START

编程思路:

第一步:分析程序要求的功能。

本程序需要完成以下功能。

(1)据文件INPUT1.DAT中读取100个ASCII码存放在SOURCE开始的内存单元中。

(2)将SOURCE开始的100个字单元中的ASCII码,将0DH后的0AH删除,并将结果存放在RFSULT开始的内存单元中。

(3)将结果存放在OUTPUT1.DAT中。

第二步:用相应的汇编程序来实现其功能。

(1) 数据的读取和存入文件部分的实现,题目中已经给出。

(2) 如果是将数据在原地进行处理,那么每删除一个数据就要将其后面的所有数据向前移动一个位置,如果直接将扫描处理完毕的数据复制到结果地址中,将会节省移动数据的开销;

因为要删除0DH后面的0AH,所以,在扫描数组的过程中除了要了解当前数据元素的内容还要了解前一个数据的内容。解决方法可使用标志单元记录前一个数据是否为 0DH,然后当前数据元素根据标志单元的内容决定当前元素是否复制到结果中;也可在扫描数组的过程中,如果碰到一个0DH,则进入不同的程序段,这个程序段决定是否将当前数据元素复制到结果中。我们的参考答案采用了后一种方法。


参考答案

更多 “ 请编制程序PROC1.ASM,其功能是:内存中有一个ASCII字符串(从S0URCE开始存放),试将其中所有连续的回车与换行符(0DH,0AH)置换成单个回车符(0DH)。字符串以00H结尾,长度(包括00H)不超过100个字节。例如:字符串41H,42H,0DH,0AH,43H,00H转换为41H,42H,0DH,43H,00H部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUT- PUT1.DAT中。请编写BECIN到END之间的代码。对程序必须进行汇编,并与IO.OBJ连接产生PROC1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。部分源程序如下:EXTRN LOAD:FAR,SAVE:FARN EQU 100STAC SEGMENT STACKDB 128 DUP (?)STAC ENDSDATA SEGMENTSOURCE DB N DUP (0)RESULT DB N DUP (0)NAME0 DB 'INPUT1. DAT', 0NAME1 DB 'OUTPUT1. DAT', 0DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACSTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATAMOV DS, AXLEA DX, SOURCE ; 数据区起始地址LEA SI, NAME0 ; 原始数据文件名MOV CX,N ; 字节数CALL LOAD ; 从"INPUT1.DAT"中读取数据**** BEGIN ********* END *****LEA DX, RFSULT ; 结果数据区首址LEA SI, NAME1 ; 结果文件名MOV CX,N ; 结果字节数CALL SAVERETSTART ENDPCODE ENDSEND START编程思路:第一步:分析程序要求的功能。本程序需要完成以下功能。(1)据文件INPUT1.DAT中读取100个ASCII码存放在SOURCE开始的内存单元中。(2)将SOURCE开始的100个字单元中的ASCII码,将0DH后的0AH删除,并将结果存放在RFSULT开始的内存单元中。(3)将结果存放在OUTPUT1.DAT中。第二步:用相应的汇编程序来实现其功能。(1) 数据的读取和存入文件部分的实现,题目中已经给出。(2) 如果是将数据在原地进行处理,那么每删除一个数据就要将其后面的所有数据向前移动一个位置,如果直接将扫描处理完毕的数据复制到结果地址中,将会节省移动数据的开销;因为要删除0DH后面的0AH,所以,在扫描数组的过程中除了要了解当前数据元素的内容还要了解前一个数据的内容。解决方法可使用标志单元记录前一个数据是否为 0DH,然后当前数据元素根据标志单元的内容决定当前元素是否复制到结果中;也可在扫描数组的过程中,如果碰到一个0DH,则进入不同的程序段,这个程序段决定是否将当前数据元素复制到结果中。我们的参考答案采用了后一种方法。 ” 相关考题
考题 请编制程序,其功能是:内存中连续存放着16个12位无符号二进制数DB11DB10…DB0,其存放格式均为DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0请判别这16个12位二进制数是否大于800H:若大于800H,则相应地在内存中存入01H;否则,存入00H。最后存放这16个12位二进制数中大于800H的数的个数n(n用一个字节表示)。例如:内存中有12H,30H,84H,50H,80H,00H…结果为 00H,01H,00H…(共16个字节),后跟n部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:

考题 请编制程序,其功能是:内存中连续存放着20个无符号字节数序列,请将它们排成升序(从小到大)。例如:内存中有01H,04H,02H…(假设后17个字节均大与04H)结果为 01H,02H,04H…(后跟17个字节,按从小到大的顺序排列)部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并白行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:

考题 请编制程序,其功能为:设由20个8位有符号数构成一个数组,试依次去掉其中负的奇数,生成一个新的数组(顺序不变)。结果存放在RESULT开始的内存单元中。部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1.DAT中读入从SOURCE开始的内存单元,运算结果要求从RESULT开始存放,由SAVE过程保存到OUTPUT1.DAT文件中。请在BEOIN和END之间补充使其完整。对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终产生运行结果。部分程序如下:; PROG1.ASMEXTRN LOAD:FAR,SAVE:FARLEN EQU 20DSEG SEGMENTSOURCE DW N DUP (?)RESULT DW N DUP (0)NAME0 DB 'INPUT1.DAT',0NAME1 DB 'OUTPUT1.DAT',0DSEG ENDSSSEG SEGMENT STACKDB 256 DUP (?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG;SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX, DSEGMOV DS,AXMOV ES, AXLEA DX, SOURCELEA SI,NAME0MOV CX,NCALL LOAD; *** BEGIN ***………………………………; *** END ***LEA DX, RESULTLEA SI,NAME1MOV CX,NCALL SAVERETSTART ENDPCSEG ENDSEND START

考题 请编制程序,其功能是:内存中连续存放着20个无符号二进制字序列Xi(i=1,2,…,20),字的最高3位为000,此序列对应某一信号在一段时间内的连续变化,现对该信号进行一阶低通数字滤波,其滤波方程为:Yi=(15*Yi-1/16)+(Xi/16),Y0=0Yi(i=1,2…,20)为滤波后得到的新序列,结果存入内存。例如:内存中有01FFH,02FFH…结果 001H,004DH…部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。请填空BEGIN和END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:

考题 请编制程序,其功能是:内存中连续存放着20个十六位二进制数,对每个数逻辑右移,使其最低位为"1"(值为零的字不变)。例如:内存中有A704H(1010011100000100B),0000H,9A58H…结果为 29C1H(0010100111000001B),0000H,134BH…部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并白行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:

考题 请编制程序,其功能是:以SOURCE开始的内存区域存放着若干字节的数据,以''作为数据的结束标志。将其中的空格滤除,对每个非空格数据的最高位清0后依次存放到RESULT指示的区域,其后存放一个空格符(20),然后存放原来的空格个数,最后仍以''结束。例如:内存中有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链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:

考题 请编制程序,其功能为:将一个ASCII字符串中所有大写字母全部变成小写字母,其他字母不变。字符串以00H结束,长度不超过20个字节。部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1.DAT中读入从SOURCE开始的内存单元,运算结果要求从RESULT开始存放,由SAVE过程保存到OUTPUT1.DAT文件中。请在BEGIN和END之间补充使其完整,完成要求的功能。或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终产生运行结果。部分程序如下:;PROG1.ASMEXTRN LOAD:FAR, SAVE:FARN EQU 20DSEG SEGMENTSOURCE DW N DUP (?)RESULT DW N DUP (0)NAME0 DB 'INPUT1.DAT',0NAME1 DB 'OUTPUT1.DAT',0DSEG ENDSSSEG SEGMENT STACKDB 256 DUP (?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG;SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXLEA DX, SOURCELEA SI,NAME0MOV CX,NCALL LOAD; *** BEGIN ***………………; *** END ***LEA DX, RESULTLEA SI,NAME1MOV CX,NCALL SAVERETSTART ENDPCSEG ENDSEND START

考题 请编制程序,其功能是:内存中连续存放着20个ASCII字符,如果是小写字母a~z之间的字符,请把它们转换成相应的大写字符;若为其他字符,不作转换。例如:内存中有61H('a'),62H('b'),31H('1'),41H('A'),42H('B')…结果为 41H('A'),42H('B'),31H,41H('A'),42H('B')…部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。请填空BEGIN和END之间已给出的源程序使其完整(空白己用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:

考题 【单选题】birth = card[6:14]描述正确的是?A.从card字符串的序号6开始,到序号14结束,且不包含序号14。存放到birth中B.从card字符串的序号6开始,到序号13结束,且不包含序号13。存放到birth中C.从card字符串的序号6开始,到序号15结束,且不包含序号15。存放到birth中D.从card字符串的序号5开始,到序号13结束,且不包含序号13。存放到birth中