请编制程序,其功能是:内存中连续存放着两个由8位有符号整数组成的序列Ai和Bi(i=0,…,9;下同),Ai在前,Bi在后。求序列Ci,Ci=Ai+Bi。结果Ci用字单元按C0,…,C9的顺序存放。 例如: 序列Ai为:80H(-128D),3

admin2010-09-01  34

问题 请编制程序,其功能是:内存中连续存放着两个由8位有符号整数组成的序列Ai和Bi(i=0,…,9;下同),Ai在前,Bi在后。求序列Ci,Ci=Ai+Bi。结果Ci用字单元按C0,…,C9的顺序存放。
   例如:
   序列Ai为:80H(-128D),31H(+49D),61(+97D),7FH(+127D),…
   序列Bi为:80H(-128D),01(+1D),F1H(-15D),7FH(+127D),…
   部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.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  DB        N*2  DUP(?)        ; 顺序存放A0,L,A9,B0,L,B9
   RESULT  DW        N  DUP(0)          ; 顺序存放C0,L,C9
   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    ;结果从RESULT开始存放
           MOV        BX,0
           MOV        CX,N
   PRO:    MOV        AH,0
           MOV        AL,    (1)   ;序列Bi中的一个整数
           MOV        DL,AL                ;暂存Bi
             (2)    AL,SOURCE[BX]   ;Ci=Bi+Ai
           JNO        STAY                  ;无溢出转STAY
   JUMP1: MOV        AH,00                ;有溢出
           ADD        DL,0   
           JNS        JUMP                  ;Bi是正数(为一个正数加上一个正数,
                                            ;结果为负数的溢出情况)转JUNP(AH
                                            ;已为00H)
           MOV        AH,  (3)      ;Bi是负数(为一个负数加上一个负数,
                                            ;结果为正数的溢出情况)将结果变为
                                            ;负数
           JMP          (4)  
   STAY:    (5)                     ;AL中数的符号扩展到 AH
   JUMP:  MOV        [DI],AX
           ADD        DI,2
           INC        BX
           DEC        CX
           JNZ        PRO
   ********    END    ********
           LEA        DX,RESULT            ; 结果数据区首址
           LEA        SI,NAMEl             ; 结果文件名
           MOV        CX,N*2               ; 结果字节数
           CALL       SAVE                  ; 保存结果到文件
           RET
   START   ENDP
   CODE    ENDS
           END        START

选项

答案(1)source[bx+N] (2)add (3)Offh (4)jump (5)cbw

解析 本题是一道有关序列的计算题,要解决类题应先找出三个关键点:①序列的范围:②序列中数据的类型;③计算方法。
   本题是对两个序列中的数据按顺序进行累加,结果存放在第三个序列中。CBW和CWD是两条符号扩展指令,其中CBW是将AL中数的符号扩展到AH寄存器中,而CWD是将AX中数的符号扩展到DX寄存器中。
转载请注明原文地址:https://kaotiyun.com/show/0TgZ777K
0

随机试题
最新回复(0)