请编制程序,其功能是:内存中连续存放着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从文件INP

题目

请编制程序,其功能是:内存中连续存放着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链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

[试题程序]

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

EA DX,SOURCE ; 数据区起始地址

OV CX,N ; 字节数

ALL LOAD ; 从'INPUT1.DAT'中读取数据

******** BEGIN ********

(1)

OV DI,0

OV CX,4

OV BX,4

CHAN: (2)

OV RESULT[DI],AH

(3)

NC DI

EC CX

Z INSER1

MP CHAN

INSER1: PUSH SI

MOV SI,BX

MOV AX,WORD PTR INDATA[SI-2]

MOV RESULT [DI], (4)

DEC BX

JZ (5)

MOV CX,04H

(6)

INC (7)

JMP CHAN

EXIT: &


相似考题

3.请编制程序,其功能是:内存中连续存放着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从文件INPUT.DAT中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。请填空BEGIN和END之间已给出的源程序使其完整,空白己用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。【试题程序】EXTRN LOAD:FAR,SAVE:FARN EQU 10STAC SEGMENT STACKDB 128 DUP (?)STAC ENDSDATA SEGMENTSOURCE DW N DUP(?)RESULT DB N+1 DUP(0)NAME0 DB 'INPUT.DAT',0NAME1 DB 'OUTPUT.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*2 ; 字节数CALL LOAD ; 从'INPUT.DAT'中读取数据; ******** BEGIN ********MOV DI,OFFSET RESULTMOV CL,NMOV BX,0MOV DR,0PRO: MOV DL,0MOV AX, SOURCE[BX]MOV CH, (1)COUNT: (2)(3) JUMPINC DLJUMP: DEC CHJNZ (4)MOV [DI], DLADD DH,DLINC DIADD (5)DEC CLJNZ PROMOV (6); ******** END ********LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名MOV CX,N+1 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START

4.请编制程序PROG1,ASM,其功能是:内存中连续存放着12个字节的数字ASCII码字符串,将它们转换成相应无符号数字,并在原第1、5、9个数字前插入一个24H数值。将这20个数值存入 RESULT指示的区域。例如:源数:30H,31H,32H,33H,34H,35H,36H,…结果:24H,00H,01H,02H,03H,24H,04H,…部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令也可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。PROG1.ASM文件内容如下:EXTRN LOAD:FAR,SAVE:FARN EQU 16STAC SEGMENT STACKDB 128 DUP(?)STAC ENDSDATA SEGMENTSOURCE DB NDUP(?)RESULT DB N+4DUP(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,NAMEO ;原始数据文件名MOV CX,N ;字节数CALL LOAD ;从INPUT1.DAT文件中读取数据; * * * * BECIN * * * *___________MOV DI,0MOV CX,4MOV BX,_INSER1: DEC BXJZ EXITMOV RESULT[DI),0FFH___________MOV CX,4CHAN: MOV AL,SOURCE[SI]___________MOV RESULT[DI],AL___________INC DIDEC CXJZ ______JMP CHANEXIT: NOP;* * * * END * * * *LKA DX,RESULT ;结果数据区首址LEA SI,NAME1 ;结果文件名&nb

参考答案和解析
正确答案:(1) MOV SI0 (2) MOV AHSOURCE [SI] (3) INC SI (4) AH (5) EXIT (6) POP SI (7) DI
(1) MOV SI,0 (2) MOV AH,SOURCE [SI] (3) INC SI (4) AH (5) EXIT (6) POP SI (7) DI
更多“请编制程序,其功能是:内存中连续存放着16个二进制字节数,在原16个数的第4和第5个数之间插入00H, ”相关问题
  • 第1题:

    一列数1,2,4,7,11,16,22,29,…这列数的组成规律是第2个数比第1个数多1;第3个数比第2个数多2;第4个数比第3个数多3;依此类推。那么这列数左起第1992个数除以5的余数是( )。

    A.0

    B.1

    C.2

    D.4


    正确答案:C
    根据这列数的组成规律,我们容易算出前l5个数被5除的余数,列表如下:

    数的序号

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

    被5除的余数

    1 2 4 2 1 1 2 4 2 1  1   2  4  2  1

    从表上可以看出,第1、2、3、4、5五个数被5除的余数,与第6、7、8、9、10五个数被5除的余数对应相同,也与第11、12、13、14、15五个数被5除的余数对应相同。因此,这一列数被5除所得的余数,每隔5个数循环出现。由于1992=5×398+2,所以第1992个数被5除的余数,与第二个数被5除的余数一样,也就是2。故本题正确答案为C。

  • 第2题:

    有10个连续奇数,第1个数等于第10个数的11/5,求第1个数?( )

    A.5

    B.11

    C.13

    D.15


    正确答案:D
    因为是10个连续奇数,且第一个比第10个数小,所以这10个数构成公差为2的递增等差数列。设最小项为a,则根据题意,可知:(11/5)·a=a+(10-1)× 2。解得:a=15。选D。

  • 第3题:

    增加I0.0-I0.5的设备通道,通道类型选为I寄存器,数据类型和通道个数为:

    A.通道的第00位,通道个数5

    B.通道的第00位,通道个数6

    C.通道的第01位,通道个数5

    D.通道的第01位,通道个数6


    12;8

  • 第4题:

    有10个连续奇数,第1个数等于第10个数的5/11,求第1个数?

    A、5

    B、11

    C、13

    D、15


    正确答案:D
    选D
    普通解法:设第1个数为x,则第10个数应该是x+18,x=5/11(x+18)。
    特殊解法:第1个数为第10个数的5/11,则第一个数为5的倍数,排除B、C。如果第一个数为5,则第10个数为11,显然不对。

  • 第5题:

    将奇数按顺序排成如图所示的数阵。从上到下称为行,图中数11为第3行,从左往右数的第2个数,数27为第4行第5个数。那么2021为第几行第几个数? 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 ……

    A.第44行第85个数

    B.第45行第85个数

    C.第32行第51个数

    D.第32行第50个数


    正确