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

admin2009-02-15  18

问题 请编制程序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,RESULT     ;结果数据区首址
                 LEA           SI,NAME1      ;结果文件名
                 MOV           CX,2,N       ;结果字节数
                 CALL          SAVE           ;保存结果到文件
                 RET
   START         ENDP
   CODE          ENDS
                 END           START

选项

答案;* * * * 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 * * * *

解析
转载请注明原文地址:https://kaotiyun.com/show/mMrZ777K
0

最新回复(0)