请编制程序,其功能是:内存中连续存放着16个10位二进制数DB9DB8…DB0,每个二进制数据均用两个字节表示,其存放格式均为:转换结果按原序存放在内存中。例如:内存中有:C048H,4091H,0080H,…结果为: 23H,01H,45H,02H,00H,02H…部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。请填空BEGIN和END之间已给出的源程序使其完整

题目

请编制程序,其功能是:内存中连续存放着16个10位二进制数DB9DB8…DB0,每个二进制数据均用两个字节表示,其存放格式均为:

转换结果按原序存放在内存中。

例如:

内存中有:C048H,4091H,0080H,…

结果为: 23H,01H,45H,02H,00H,02H…

部分程序已给出,其中原始数据由过程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 DW N DUP(?)

RESULT DB N*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*2 ; 字节数

CALL LOAD ; 从"INPUT1.DAT"中读取数据

; ******** BEGIN ********

MOV DI,OFFSET RESULT

MOV BX,0

MOV CH,N

PRO: MOV AH,BYTE PTR SOURCE[BX]

MOV AL, (1)

MOV DL,AH ; 10 位无符号二进制数高八位

MOV DH,AL ; 10 位无符号二进制数低二位

MOV CL,2

SHL AX, (2)

SHL DX, (3)

MOV AL,DH

MOV [DI], (4)

MOV [DI+I], (5)

ADD DI,2

A


相似考题

1.请编制程序,其功能是:内存中连续存放着10个十六位二进制数。分别对每个数的高位字节和低位字节进行逻辑与运算及逻辑或运算。运算结果以字的形式按序连续存放(低位字节存入逻辑与运算的结果,高位字节存入逻辑或运算的结果)。例如:内存中有:AA55H,55AAH,FFAAH结果为: PP00H,FF00H,FFAAH部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放, 由过程SAVE保存到文件OUTPUT1.DAT中。请填空BEGIN和END之间已经给出的源程序使其完整,空白处已经用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。[试题程序]EXTRN LOAD:FAR,SAVE:FARN EQU 3STAC SEGMENT STACKDB 128 DUP (?)STAC ENDSDATA SEGMENTSOURCE DW N DUP(?)RESULT DW 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,NANE0 ;原始数据文件名MOV CX,N*2 ;字节数CALL LOAD ;从'INPUT1.DAT'中读取数据; ********* BEGIN **********MOV DI,OFFSET RESULTMOV CX,NMOV BX,00PRO: MOV AX, (1)MOV DX,AXAND (2) ,DH(3) AH,ALMOV (4) ,DLADD BX,2(5)ADD DI,2(6)JNZ PRO; ******** END ********LEA DX,RESULT ;结果数据区首址LEA SI,NAME1 ;结果文件名NOV CX,N*2 ;结果字节数CALL SAVE ;保存结果到文件RETSTART ENDPCODE ENDSEND START

4.请编制程序,其功能是:内存中连续存放着10个无符号8位格雷码表示的数,现将此10个数转换成10个8位二进制数,结果存入内存,其转换方法为二进制数的最高位D[7]与格雷码的最高位G[7]相同,二进制数的其余七位D[k](k=6,…,0)分别为格雷码的位G[k](k=6,…,0)与二进制数的位D[k+1](k=6,…,0)异或的结果。例如:内存中有:00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H结果为:00H,02H,32H,45H,081-I,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:FARN EQU 10STAC SEGMENT STACKDB 128 DUP(?)STAC ENDSDATA SEGMENTSOURCE DB N DUP(?) ; 顺序存放10个字节数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****LEA SI,SOURCELEA DI,RESULTMOV CX, 10AGN0: MOV AL,[SI](1)MOV CX,8MOV BX,0AGN1: MOV AH,0SHL BL,1(2) AL,1RCL AH, 1CMP AH, (3)(4)JMP NEXTSET ONE: OR BL,01HNEXT: MOV (5) ,BL(6)LOOP AGN1(7)MOV [DI],BLINC SIINC DILOOP AG

参考答案和解析
正确答案:(1) BYTE PTR SOURCE[BX+1] (2) CL (3) CL (4) AH (5) AL
(1) BYTE PTR SOURCE[BX+1] (2) CL (3) CL (4) AH (5) AL
更多“ 请编制程序,其功能是:内存中连续存放着16个10位二进制数DB9DB8…DB0,每个二进制数据均用两个字节表示,其存放格式均为:转换结果按原序存放在内存中。例如:内存中有:C048H,4091H,0080H,…结”相关问题
  • 第1题:

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

    N EQU 10

    STAC SEGMENT STACK

    DB 128 DUP (?)

    STAC ENDS

    DATA SEGMENT

    SOURCE DW N DUP(?)

    RESULT DB N+1 DUP(0)

    NAME0 DB 'INPUT.DAT',0

    NAME1 DB 'OUTPUT.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 ; 从'INPUT.DAT'中读取数据

    ; ******** BEGIN ********

    MOV DI,OFFSET RESULT

    MOV CL,N

    MOV BX,0

    MOV DR,0

    PRO: MOV DL,0

    MOV AX, SOURCE[BX]

    MOV CH, (1)

    COUNT: (2)

    (3) JUMP

    INC DL

    JUMP: DEC CH

    JNZ (4)

    MOV [DI], DL

    ADD DH,DL

    INC DI

    ADD (5)

    DEC CL

    JNZ PRO

    MOV (6)

    ; ******** END ********

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

    LEA SI,NAME1 ; 结果文件名

    MOV CX,N+1 ; 结果字节数

    CALL SAVE ; 保存结果到文件

    RET

    START ENDP

    CODE ENDS

    END START


    正确答案:(1) 16 (2) SHL AX1 (3) JB(4) COUNT (5) BX2 (6) [DI]DH
    (1) 16 (2) SHL AX,1 (3) JB(4) COUNT (5) BX,2 (6) [DI],DH 解析:本题所采用的算法是逐个读取原始数据区中的数据并统计其中0的个数,将得到的统计数据存入结果数据区,同时将这个统计数据累加起来,当完成最后一个数据的统计时,也就得到所有数据中。的个数。针对此算法所应用的技巧,即对单个数据的统计采用将数据逻辑左移一位,然后最高位被移到CF,再根据CF的状态决定是否需要将计数器加1,直到处理完最后一个二进制位为止。

  • 第2题:

    请编制程序,其功能是:对经常上下波动的数据采用只记录峰值的数据压缩方法,即每次将采样到的当前值和前一次值比较,如数据变向改变(原变大现变小或原变小现变大),说明已过峰值,这时就将当前值记录下来。

    例如(下列数据均为无符号数):

    原数据:23H,45H,89H,67H,5CH,36H,3CH,78H…

    压缩后:23H,89H,36H…

    内存中从SOURCE开始连续存放着40个八位无符号数,假定相邻两数无相等的情况,编程按上述方法进行压缩,结果保存在RESULT开始的内存单元中。

    部分程序已给出,请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。

    原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。

    对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

    试题程序:


    正确答案:(1)XORDXAX (2)ANDDH80H (3)Z (4)STOSB (5)MOVDXAX
    (1)XORDX,AX (2)ANDDH,80H (3)Z (4)STOSB (5)MOVDX,AX 解析:此程序要实现的功能是:将经常上下波动的数据采用只记录峰值的数据压缩方法,即每次将采样到的当前值和前一次值比较,如数据变向改变,即原变大现变小或原变小现变大,说明已过峰值,这时就将当前值记录下来。
    程序的堆栈段定义了一个128字节的堆栈区。堆栈段下面是数据段。数据段中定义了四个字节型变量:原始数据区SOURCE、结果数据区RESULT、原始数据文件名NAME0、结果数据文件名NAMEI。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、Ss。
    将原始数据的偏移地址装入到SI中,结果数据存放的偏移地址装入到DI中。CLD指令将方向标志DF清0,在数据操作时,实现地址指针自动增量。然后用MOVSB指令将SI中内容送到DI中。先将两个寄存器,AX、BX清0。然后用LOADSB指令将SI中内容装入到AL中,即取数X[1]。接着将SI-2中的内容,即X[0]送BL中,即取数X[0]。将AX减去BX,即x[1]-X[0],差值放在AX中。接着将差值暂存在DX中。CX赋初值为N-2,用于控制循环处理的次数。
    FILTER段,先做差值,通过判断相邻两个差值的符号是否相等,来观察数据改变方向是否发生了变化。寄存器AX、BX先清0。然后用LOADSB指令将SI中内容装入到AL中,即取数X[n],接着将SI-2中的内容送BL,即BL等于X[n-1)。然后将AX减去BX,即X[n]-X[n-1),差值结果放在AX中。接下来要比较后一差值AX与前一差值DX符号位是否相同。先将DX和AX进行异或操作,结果放DX中,因为只需看最高位,即符号位,所以,再将DH和80H进行逻辑与操作,若结果为0,即ZF=1,说明两个差值DX和AX符号位相同,转SKIP段执行,继续搜索下面的数据;否则,ZF=0,说明两个差值DX和 AX符号位不相同,则将当前值记录下来,即将AL存入到DI中。从上面的分析看来,第(1)空填写"XOR DX,AX",第(2)空填写"ANDDH,80H",第(3)空填写"Z",第(4)空填写"STOSB"。
    SKIP段,是两个差值DX和BX符号位相同时,继续搜索数据,将新的差值存在DX中,准备和接下来的差值比较。所以第(15)空填写"MOV DX,AX"。然后从FILTER入口处循环,继续判断数据变化方向情况,一共循环N-2次。

  • 第3题:

    关于二进制文件说法错误的是 ______。

    A.文本文件中,每个字节单元的内容均为字符的ASCII码。

    B.二进制文件中,字符串仍然保存为每个字符的ASCII码。

    C.数10,在文本文件中表示为1和0二个字符的ASCII码,而在二进制文件中表示为二进制数“0000 10100”

    D.文本文件中,文件内容在内存中的映像与在磁盘上的映像完全一样。


    正确答案:D

  • 第4题:

    下面有关内存和外存的叙述中,错误的是

    A.与外存相比,内存容量较小而速度较快

    B.内存的编址单位是字节,磁盘的编址单位也是字节

    C.CPU当前正在执行的指令都必须存放在内存储器中

    D.外存中的数据需要先送入内存后才能被CPU处理


    正确答案:B

  • 第5题:

    关于用户当前正在运行的程序与数据,下列说法中不正确的有( )。

    A.都必须存放在内存的ROM中

    B.都必须存放在内存的RAM中

    C.都必须存放在内存的硬盘中

    D.都必须存放在内存的光盘中


    正确答案:ACD
    用户当前正在运行的程序和数据,都存放在内存的RAM中。故ACD选项错误。

  • 第6题:

    下列是有关计算机中指令和数据存放位置的叙述,其中正确的是()。

    A.指令存放在内存中,数据存放在外存中
    B.指令和数据任何时候都存放在内存中
    C.指令和数据任何时候都存放在外存中
    D.程序被启动前指令和数据都存放在外存中,而启动后指令和数据被装入内存

    答案:D
    解析:
    主存由RAM构成,只有在通电后才能存数据,断电时数据丢失。通常情况下指令和数据都存放在外存中,只有在启动后指令和数据被装入内存。

  • 第7题:

    处于后备状态的作业存放在()中。

    • A、外存
    • B、内存
    • C、外存和内存
    • D、扩展内存

    正确答案:A

  • 第8题:

    (2009)计算机的内存储器以及外存储器的容量通常是:()

    • A、以字节即8位二进制数为单位来表示
    • B、以字节即16位二进制数为单位来表示
    • C、以二进制数为单位来表示
    • D、以双字即32位二进制数为单位来表示

    正确答案:A

  • 第9题:

    指令和数据均存放在内存中,计算机如何区分它们是指令还是数据?


    正确答案:计算机可以从时间和空间两方面来区分指令和数据,在时间上,取指周期从内存中取出的是指令,而执行周期从内存取出或往内存中写入的是数据,在空间上,从内存中取出指令送控制器,而执行周期从内存从取的数据送运算器、往内存写入的数据也是来自于运算器。

  • 第10题:

    问答题
    指令和数据均存放在内存中,计算机如何区分它们是指令还是数据?

    正确答案: 计算机可以从时间和空间两方面来区分指令和数据,在时间上,取指周期从内存中取出的是指令,而执行周期从内存取出或往内存中写入的是数据,在空间上,从内存中取出指令送控制器,而执行周期从内存从取的数据送运算器、往内存写入的数据也是来自于运算器。
    解析: 暂无解析

  • 第11题:

    单选题
    一台计算机的字长是4个字节,它表示()。
    A

    能处理的数据最大是4位十进制数

    B

    能处理的数据最大是32位二进制数

    C

    CPU与内存之间每次都是传输32位数据

    D

    内存储器每4个字节为一个存储单元


    正确答案: A
    解析: 暂无解析

  • 第12题:

    问答题
    指令和数据均存放在内存中,CPU如何从时间和空间上区分它们是指令还是数据?

    正确答案: 从时间上讲,取指令事件发生在“取指周期”,取数据事件发生在“执行周期”。从空间上讲,从内存读出指令流流向控制器(指令寄存器)。从内存读出数据流流向运算器(通用寄存器)。
    解析: 暂无解析

  • 第13题:

    请编制程序,其功能是:内存中连续存放着20个无符号字节数序列,请将它们排成升序(从小到大)。

    例如:

    内存中有01H,04H,02H…(假设后17个字节均大与04H)

    结果为 01H,02H,04H…(后跟17个字节,按从小到大的顺序排列)

    部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。

    请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并白行编程来完成所要求的功能。

    对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

    试题程序:


    正确答案:(1)INC DI (2)NEXT0 (3)N-1 (4)SB (5)NEXT3 (6)AL (7)NEXT2 (8)BX (9)NEXT1
    (1)INC DI (2)NEXT0 (3)N-1 (4)SB (5)NEXT3 (6)AL (7)NEXT2 (8)BX (9)NEXT1 解析:此程序是用冒泡排序法实现一个含20个无符号数的序列的升序排序的功能。冒泡排序方法为:将第一个数据与相邻的数进行比较,若次序不对,两数交换位置。依次类推,直至第N-1个数和第N个数进行过比较为止。上述过程称为第一趟冒泡排序。第一趟冒泡排序经过N-1次比较后,最大的数已经到了数组尾,第二趟仅需比较N-2次比较就够了,一共比较N-1趟就完成了排序。这样共有两重循环:CX是内循环次数,而BX是外循环次数。
    程序的堆栈段定义了一个128字节的堆栈区.堆栈段下面是数据段.数据段中定义了四个字节型变量:原始数据区SOURCE、结果数据区RESULT、原始数据文件名NAME0、结果数据文件名NAMEI。数据段下面是代码段,告诉汇编程序,代码段。数据段和堆栈段分别属于段寄存器CS、DS,SS。
    先将原始数据的偏移地址装入到SI中,结果数据存放的偏移地址装入到DI中。CX赋初值为N,用于控制循环处理的次数。
    NEXT0段,将SI中内容送AL,再将AL存入到DI中。然后SI地址加1,DI地址加1。所以第(1)空填写"INC DI"。继续取数据AL,存数据,从入口处NEXT0循环。所以第(2)空填写"NEXT0"。CLD指令是将方向标志DF清0,在数据操作时,实现地址指针自动增量。第(3)空是给BX赋初值N-1。因为外循环需要比较N-1趟。
    NEXT1段,将结果数据地址装入到SI中,BC赋值给CX。
    NEXT2段,是开始做一趟内的比较。第(4)空是考查LODSB指令,是将SI作为地址指针中的数据装入到AI中,同时修改SI,SI地址加1,指向下一个元素。将AL与下一元素[SI]做比较,若[SI]大于等于AL,则转向NEXT3;否则,将AL与[SI]交换。第(5)、(6)空分别填写"NEXT3","AL"。AL与[SI]交换后,再将送[SI-1)中。
    NEXT3段,当完成一趟内的相邻两个数的比较后,从NEXT2入口处循环,在该趟内,将AL继续与其他数的比较。所以第(7)空填写"NEXT2"。每次完成一趟比较,BX应减1,若BX不为0,则继续进行外循环,进行第二趟比较,循环入口处是NEXT1。所以第(8)空和第(9)空分别填写"BX","NEXT1"。

  • 第14题:

    请编制程序,其功能是:内存中连续存放着20个无符号二进制字序列Xi(i=1,2,…,20),字的最高3位为000,此序列对应某一信号在一段时间内的连续变化,现对该信号进行一阶低通数字滤波,其滤波方程为:

    Yi=(15*Yi-1/16)+(Xi/16),Y0=0

    Yi(i=1,2…,20)为滤波后得到的新序列,结果存入内存。

    例如:

    内存中有01FFH,02FFH…

    结果 001H,004DH…

    部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。

    请填空BEGIN和END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

    试题程序:


    正确答案:BX (2)ADD (3)SUB (4)MOV BXAX (5)INC DI (6)INC SI
    BX (2)ADD (3)SUB (4)MOV BX,AX (5)INC DI (6)INC SI 解析:此程序要实现的功能是:内存中连续存放着20个无符号二进制字序列Xi(i=1,2…,20),字的最高3位为000,此序列对应某一信号在一段时间内的连续变化,现对该信号进行一阶低通数字滤波,其滤波方程为:
    Yi=(15*Yi-1/16)+(Xi/16),Y0=0。Yi(i=1,2,…,20)为滤波后得到的新序列,结果存入内存。
    此程序的关键是要会将滤波方程灵活地拆开来,才能更好地理解程序。上面的公式可以拆成这样:Yi=Yi-1+Xi/16-Yi-1/16,Y0=0。Yi(i=1,2,…,20)。
    程序的堆栈段定义了一个128个字节的堆栈区。堆栈段下面是数据段。数据段中定义了两个字型变量:原始数据区SOURCE、结果数据区RESULT;两个字节型变量:原始数据文件名NAME0、结果数据文件名NAME1。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。
    先将原始数据的偏移地址装入到SI中,结果数据存放的偏移地址装入到DI中。CX赋值为N,用于控制循环处理的次数。BX赋初值为0,表示Y0=0。注意:BX总是存放前一计算的结果,即Yi-1。
    AGN0段,先将BX暂存DX,表示Yi-1。所以第(1)空填写"BX"。取第一个无符号二进制字即 SI中内容Xi送AX,然后将CX压入堆栈,保存原现场,再给CX赋值为4,等用完了CX的这个值后,将CX从堆栈中弹出,返回操作系统。
    AGN1段,先将BX和AX都逻辑右移一位,然后再从AGN1入口处循环,继续将BX和AX逻辑右移一位,这样一共循环四次,就将BX和AX都逻辑右移了四位,即BX和AX的值都变成了原来的1/16,即Yi-1/16和Xi/16。然后将CX从堆栈中弹出。将AX即Xi/16与DX即Yi-1相加,结果先放AX中。然后再将AX减去BX即Yi-1/16,结果放AX中,就得到了Yi的值。然后将结果AX印Yi存入到DI中。再将AX值即Yi赋给BX,BX将作为计算下一个值Yi+1,的参照数。DI地址两次加1,准备存储下—个Yi, SI地址也两次加1,准备取下一个Xi进行计算。因为原始数据Xi和结果数据Yi都是 字序列,每个数存放在内存中连续两个地址空间中。然后从AGN0入口处循环,继续计算,进行下一次滤波,得到下一个值即Yi+1。从上面的分析来看,第(2)空填写"ADD",第(3)空填写"SUB",第(4)空填写"MOV BX, AX",第(5)空填写"INC DI",第(6)空填写"INC SI"。

  • 第15题:

    请编制程序,其功能是:内存中连续存放着20个十六位二进制数,对每个数逻辑右移,使其最低位为"1"(值为零的字不变)。

    例如:

    内存中有A704H(1010011100000100B),0000H,9A58H…

    结果为 29C1H(0010100111000001B),0000H,134BH…

    部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。

    请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并白行编程来完成所要求的功能。

    对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

    试题程序:


    正确答案:(1)0 (2)TEST (3)NZ (4)SHR (5)LOOP NEXT
    (1)0 (2)TEST (3)NZ (4)SHR (5)LOOP NEXT 解析:此程序要求对内存中的20个十六位二进制数的每一个数逻辑右移,直到最低位为1为止。考查了SHR,TEST,LOOP等指令的用法。
    程序的堆栈段定义了一个128字节的堆栈区。堆栈段下面是数据段。数据段中定义了两个字型变量:原始数据区SOURCE、结果数据区RESULT;两个字节型变量:原始数据文件名NAME0、结果数据文件名NAME1。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。
    先将原始数据偏移地址装入到SI中,结果数据偏移地址装入到DI中,CX赋初值为N,用于控制循环处理的次数。
    NEXT段,将SI中内容送AX中,再将AX与0做比较,如果AL等于0,转向SKIP段。所以第(1)空填写"0"。
    LOOP1段的开始要填写第(2)空,这里是要判断AX的最低位是否为1,判断的方法是将AX和0001H做TEST指令。注意:这里千万不能用指令"ANDAX,0001H",否则会改变AX的初值.而TEST指令不改变AX的值,它的结果只显示在几个状态标志位上。所以第(2)空填写"TEST"。当TEST的结果ZF=0,说明AX的最低位为1,AL不需要再逻辑右移了,转向SKIP段;否则,ZF=1,说明AX的最低位为0,还需要将AX继续逻辑右移1位,无条件转向LOOP1段,AX再逻辑右移1位,再判断,若仍不满足最低位为1,继续右移1位,直到AX最低位变为1为止。所以第(3)、(4)空分别填写"NZ"和 "SHR"。
    再来看SKIP段,当AX的最低位为1,或者AX等于0000H时,直接将AX存入到DI中,SI和DI地址都加2,因为原始数据和结果数据都是字型的,它们在内存中都占两个地址。接着从NEXT处循环,处理下一个十六位二进制数。所以第(5)空填写"LOOP NEXT"。

  • 第16题:

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

    试题程序:


    正确答案:(1)UPPER2 (2)'Z' (3)A (4)AL0DFH (5)AL (6)SI (7)DI (8)LOOP
    (1)UPPER2 (2)'Z' (3)A (4)AL,0DFH (5)AL (6)SI (7)DI (8)LOOP 解析:此程序要求实现的功能是:将内存中连续存放着的20个ASCII字符,如果是小写字母a~z之间的字符,把它们转换成相应的大写字符;若为其他字符,不作转换。
    程序的堆栈段定义了一个128字节的堆栈区。堆栈段下面是数据段。数据段中定义了四个字节型变量:原始数据区SOURCE、结果数据区RESULT、原始数据文件名NAME0、结果数据文件名NAME1。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。
    先将原始数据的偏移地址装入到SI中,结果数据存放的偏移地址装入到DI中,CX赋值为N,用于控制循环处理的次数。
    NEXT段,取第一个原始ASCII字符,即将SI中内容送AL,将AL与'a'做比较,若AL小于字符'a'的ASCII值,说明AL为大写字母或其他字符,则转向UPPER2处执行;否则,将AL与字符'z'再做比较,若AL大于字符'z'的ASCII值,说明AL为其他字符,仍转向UPPER2处执行;否则,AL大于等于字符'a'的ASCII值,小于等于字符'2'的ASCII值,说明AL为小写字母a~z之间的字符。因为小写字母的ASCII值范围是61H~7AH,大写字母的ASCII值范围是41H~5AH,所以要将小写字母变成大写字母的话,只需将小写字母的ASCII值和0DFH进行逻辑与操作。读者可以试一下,将61H~7AH之间的值和0DFH进行逻辑与操作,看是否能得到41H~5AH之间的值。从上面的分析来看,第(1)空填写"UPPER2",第(2)空填写"'2'",第(3)空填写"A",第(4)空填写"AL,0DFH"。
    UPPER2段,当字符AL不为小写字母,为大写字母或其他字符时,不需将它做任何变换,直接将该字符AL存入到DI中。所以第(5)空填写"AL"。接着,SI地址加1,准备取下一个字符,继续判断;
    DI地址加1,准备存储下一个转换后或不需转换的字符。然后从NEXT入口处循环,继续下一个字符的处理。一共循环CX即20次,才能完成程序的功能。所以第(6)空填写"SI",第(7)空填写"DI",第(8)空填写"LOOP"。

  • 第17题:

    计算机的内存储器以及外存储器的容量通常是:
    (A)以字节即8位二进制数为单位来表示
    (B)以字节即16位二进制为单位来表示
    (C)以二进制为单位来表示
    (D)以双字即32位二迸制数为单位来表示


    答案:A
    解析:

  • 第18题:

    通常所说某计算机的内存容量32M,其数据单位是()。

    • A、二进制位
    • B、字节
    • C、字长
    • D、字

    正确答案:B

  • 第19题:

    内存某字节单元中存放的二进制代码为94H,若将它看作是一个压缩的BCD码,则对应的数为()。

    • A、148
    • B、-20
    • C、-108
    • D、94

    正确答案:D

  • 第20题:

    一台计算机的字长是4个字节,它表示()。

    • A、能处理的数据最大是4位十进制数
    • B、能处理的数据最大是32位二进制数
    • C、CPU与内存之间每次都是传输32位数据
    • D、内存储器每4个字节为一个存储单元

    正确答案:C

  • 第21题:

    微型计算机中的内存储器是按()进行编址的。

    • A、二进制
    • B、字节
    • C、字
    • D、位

    正确答案:B

  • 第22题:

    单选题
    计算机“字长”为64位,是表示()
    A

    内存的每个存储单元为64位二进制数

    B

    每个字节包含64bit

    C

    CPU一次可并行处理64位二进制数

    D

    CPU只能运行用64位指令编写的程序


    正确答案: B
    解析: 暂无解析

  • 第23题:

    单选题
    (2009)计算机的内存储器以及外存储器的容量通常是:()
    A

    以字节即8位二进制数为单位来表示

    B

    以字节即16位二进制数为单位来表示

    C

    以二进制数为单位来表示

    D

    以双字即32位二进制数为单位来表示


    正确答案: A
    解析: 内存储器容量是指内存存储容量,即内容储存器能够存储信息的字节数。外储器是可将程序和数据永久保存的存储介质,可以说其容量是无限的。字节是信息存储中常用的基本单位。