请编制程序PROG1.ASM,其功能是:将内存中的20个有符号字节数据依次除以5,并按照四舍五入原则(即余数绝对值的2倍小于除数,则舍去)将商存入指定的内存区域。例如:内存中有:10H,01H,27H,00H,FFH,FSH,……结果为:03H,00H,08H,00H,00H,FEH,……部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。填空BEGIN和END之间已

题目

请编制程序PROG1.ASM,其功能是:将内存中的20个有符号字节数据依次除以5,并按照四舍五入原则(即余数绝对值的2倍小于除数,则舍去)将商存入指定的内存区域。

例如:

内存中有:10H,01H,27H,00H,FFH,FSH,……

结果为:03H,00H,08H,00H,00H,FEH,……

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

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

对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。

试题程序:

EXTRN LOAD:FAR,SAVE:FAR

N EQU 20

X EQU 5

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

DB 256 DUP (?)

SSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEC, SS:SSEC, DS:DSEG

START PROC FAR

PUSH DS

XOR AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX

MOV ES,AX

LEA DX,SOURCE

LEA SI,NAME0

MOV CX,N

CALL LOAD

; *** BEGIN ***

LEA SI,SOURCE

LEA DI,RESULT

CONT: LODSB

CBW

MOV DL,X

IDIV DL

(1) ; 余数为负数吗

JNS PLUS

(2) ; 求绝对值

ADD AH,AH

CMP AH,DL

JB (3)

SUB AL,1

JMP NEXT

PLUS: ADD (4)

CMP AH,DL

JB NEXT

(5)

NEXT: STOSB

CMP SI,N

JB CONT

; *** END ***

LEA DX,RESULT

LEA SI,NAME 1

MOV CX,N

&nb


相似考题

3.请编制程序PROG1.ASM,其功能是:对10个无符号字节数据排序(升序),然后剔除第一个数和最后一个数,并按四舍五入原则计算其余8个数据的算术平均值。将剩余的8个数据存入指定的内存区域中,其后存放平均值。例如:内存中有:1,5,4,0,7,9,2,6,8,3结果为:1,2,3,4,5,6,7,8,5部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:EXTRN LOAD:FAR, SAVE:FARN EQU 10DSEG SEGMENTSOURCE DB N DUP(?)RESULT DB N-1 DUP(0)NAME0 DB 'INPUT1. DAT',0NAME1 DB 'OUTPUT 1.DAT',0TEMP DW 0DSEG ENDSSSEG SEGMENT STACKDB 256 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS: CSEG, SS: SSEG, DS: DSEG, ES: DSEGSTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DSEGMOV DS, AXMOV ES, AXLEA DX, SOURCELEA SI, NAME0MOV CX, NCALL LOAD;*** BEGIN ***MOV BX, (1)GOONI: (2)LEA SI, SOURCEGOONJ: MOV AL, [SI]CMP AL, [SI+1]JLE NEXTXCHG AL, [SI+1]MOV [SI], ALNEXT: ADD SI, 1LOOP GOONJ(3)JNZ GOONICLDLEA SI, SOURCELEA DI, RESULTMOV CX, (4)INC SILP2: LODSBCBWADD TEMP, AXSTOSBLP1: LOOP LP2MOV AX, TEMP(5)DIV DLADD AH, AH

更多“请编制程序PROG1.ASM,其功能是:将内存中的20个有符号字节数据依次除以5,并按照四舍五入原则(即余 ”相关问题
  • 第1题:

    (7)下列程序段的功能是:从文本框中输入一个数值,如果该数值满足“除以4余1,除以5余2”条件,则在窗体上输出文本框中的数值,否则,将焦点定位在文本框中,并清除文本框的内容。请填空。 Private Sub Command1_Click() x=Val(Text1.Text) IfThen Print x Else ________ Text1.Text="" End If End Sub


    正确答案:x Mod 4=1 And x Mod 5=2,Text1.SetFocus
    【解析】题目要求程序满足的条件是“除以4余1,除以5余2”,这个条件中包含了一个逻辑并和两个求模运算。其中,逻辑并运算符用“And”表示,取余运算符用Mod表示,因此,程序中的if条件应是“x Mod 4=1 Andx Mod 5=2”;SetFocus方法是将焦点移至指定的控件或窗体。

  • 第2题:

    请编制程序PROG1.ASM,其功能是:以逻辑尺L变量对内存中连续存放着16个字的数进行去高字节操作:当L的i位为1则将第i数据的高字节置为全0,当L的i位为0则第i数据不变。将处理的结果存入RESULT指示的内存区。

    例如:

    设L=0005H

    源数:1111H,2222H,3333H,4444H,5555H,6666H…

    结果:0011H,2222H,0033H,4444H,5555H,6666H…

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

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

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

    PROG1.ASM文件内容如下:

    EXTRN LOAD:FAR,SAVE:FAR

    N EQU 16

    STAC SEGMENT STACK

    DB 128 DUP(?)

    STAC ENDS

    DATA SEGMENT

    L DW ?

    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,L ;数据区起始地址

    LEA SI,NAMEO ;原始数据文件名

    MOV CX,2*(N+1) ;字节数

    CALL LOAD ;从input1.dat文件中读取数据

    ;* * * * BECIN * * * *

    LEA SI,SOURCE

    _______

    MOV CX,N

    MOV DX,_____

    LO: MOV AX,[SI]

    _____ L,DX

    _____ STORE

    NOT AX

    STORE: MOV [DI],AX

    ADD DI,2

    ADD SI,2

    LOOP LO

    ;* * * * END * * * *

    LEA DX,RES


    正确答案:;* * * * BEGIN * * * * LEA SISOURCE LEA DIRESULT ;取结果区首址 MOV CXN MOV DX1 ;定义递移检测位初值 LO: MOV AX[SI] TRST LDX ;测定当前数据的操作性质 JP STORE ;不操作 AND AX00FFH ;置高字节全0 STORE: MOV [DI]AX ADD DI2 ADD SI2 SHL DX1 ;递移检测位左移 LOOP 10 ; * * * * END * * * *
    ;* * * * BEGIN * * * * LEA SI,SOURCE LEA DI,RESULT ;取结果区首址 MOV CX,N MOV DX,1 ;定义递移检测位初值 LO: MOV AX,[SI] TRST L,DX ;测定当前数据的操作性质 JP STORE ;不操作 AND AX,00FFH ;置高字节全0 STORE: MOV [DI],AX ADD DI,2 ADD SI,2 SHL DX,1 ;递移检测位左移 LOOP 10 ; * * * * END * * * *

  • 第3题:

    5、用移位运算将一个无符号数除以4,请指出如何移位。


    左,3

  • 第4题:

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

  • 第5题:

    以下程序段的功能是:从文本框中输入一个数值,如果该数值满足“除以4余1,除以5余2”条件,则在窗体上输出文本框中的数值,否则,将焦点定位在文本框中,并清除文本框的内容。请填空。


    正确答案:
    XMod4=1AndXMod5=2Text1.SetFocus【解析】题目要求程序满足的条件是“除以4余1,除以5余2”,这个条件中包含了一个逻辑并和两个求模运算。其中,逻辑并运算符用“And”表示,取余运算符用Mod表示,因此。程序中的“条件应是“XMod4=1AndXMod5=2”:SetFocus方法是将焦点移至指定的控件或窗体。