试卷一
  一、 现有(DS)= 182AH,(ES)= 192AH,(SS)= 2000H,(SP)= 0FFF0H,(AX)= 07A8H,(BX)= 0510H,(SI)= 0004H,(187B0H)= 0042H,(187B4H)= 0B02H,(184BEH)= 0100H,(187C0H)= 2000H,(192A0H)= 38A4H,(197B4H)= 0200H,CF = 1
请写出下列各条指令独立执行完后,值发生变化的有关寄存器及存储单元的内容,不必写标志位。


  (1)MOV AH,[1000H]
  (2)ADC [BX],AX  
  (3)CBW      
  (4)TEST AX,8000H
  (5)MUL BYTE PTR 4[BX]
  (6)DIV BL
  (7)RCR WORD PTR [BX][SI],1
  (8)XCHG AX,ES:[BX + SI]
  (9)LES DI,[BX + SI + 0AH]
  (10)PUSH DS    

二、 下面是三个要连接在一起运行的汇编源程序,文件名分别为A1.ASM,A2.ASM和A3.ASM。
(1) 请在括号中填上适当的语句,以确保能正确汇编,连接和运行。
(2) 写出汇编,连接和运行这三个模块的命令。


A1.ASM的内容
------------------------------------------------------------


DSEG SEGMENT
  ONE   DB ?
  TWO   DB ?
  DAT   DB ?
  DSEG   ENDS
  ;
  CSEG1  SEGMENT PUBLIC
  MAIN   PROC FAR
   。
   。
   。
  MOV   AL,ONE
  CMP   AL,TWO
  JE    SAME
  CALL   FAR PTR NSAME
JMP EXIT
SAME:CALL FAR PTR PSAME
EXIT:RET
   MAIN  ENDP
   CSEG1 ENDS
END  MAIN


------------------------------------------------------------
A2.ASM的内容
------------------------------------------------------------


  CSEG2   SEGMENT PUBLIC
  PSAME   PROC FAR
  MOV    AL,ONE
  AND    AL,0FH
  MOV    DAT,AL
  RET
  PSAME   ENDP
  CSEG2   ENDS
  END


----------------------------------------------------------------
A3.ASM的内容
----------------------------------------------------------------


  CSEG3   SEGMENT PUBLIC
  NSAME   PROC FAR
  MOV    AL,TWO
  AND    AL,0FH
  MOV    DAT,AL
  RET
  NSAME   ENDP
  CSEG3   ENDS
  END
      

-------------------------



三、 下列各语句语法正确否(其中Y为数据段中的字变量):
   (1)MOV AX,SS:Y
   (2)MOV AX,BX + 1
   (3)IMUL AX
   (4)CALL DWORD PTR BX
   (5)MOV BX,[SP]
   (6)TEST AL,8000H
   (7)JMP [BX]
   (8)ADD Y,OFFSET Y
   (9)SUB BYTE PTR [SI],F3H
   (10)XOR BYTE PTR [BX],100
      

四、 画出下列程序执行过程中堆栈的变化过程,并给出执行完后X和Y单元的值。画堆栈状态时不必写堆栈每个单元的物理地址,只要标出栈顶的段内偏移地址即可。堆栈图的每一格填堆栈中的一个字。注意:仅当程序执行到一个标号处(如L1,BACK,EXIT等)时,才给出当前的堆栈状态图并写明该标号。
        DSEG   SEGMENT
        X DW 0
        Y DW 1
        Z DW S3
        DSEG   ENDS
        ;
        ST    SEGMENT STACK 'STACK'
        DW  100H DUP(?)
        TOP DW 100H
        ST  ENDS
        ;
        COD SEGMENT
        ASSUME CS:COD,DS:DSEG,SS:ST
        MAIN   PROC FAR
        MOV    AX,ST
        MOV    SS,AX
        MOV   SP,TOP
        PUSH   DS
        PUSH   CS
        POP    DS
        LEA    DX,S1
        MOV    AX,257EH
        INT   21H
        MOV   AX,0
        PUSH   AX
        MOV   AX,DSEG
        MOV   DS,AX
        L1:   CALL S2
        L2:   CMP X,1
        JNE   NEXT
        INT   7EH
        NEXT:  RET
        MAIN   ENDP
        ;
        S1    PROC FAR
        L3:   MOV BX,X
        ADD    Y,BX
        CMP    Y,1
        JLE    BACK
        PUSH   CS
        LEA   DX,S2
        PUSH   DX
        RET
        BACK:  RET 2
        S1    ENDP
        ;
        S2    PROC FAR
        L4:   INC X
        CMP    Y,1
        JE    BACK1
        MOV    BX,4
        JMP    X[BX]
        BACK1: RET
        S2    ENDP
        ;
        S3    PROC FAR
        L5:   INC X
        INC    Y
        RET    2
        S3    ENDP
        COD   ENDS
        END    MAIN
            


-----------------------------------------------------------------------

五、 假设有一台输入设备与主机相连,其对应中断类型号为0CH,输入数据端口为30H,该设备每向30H端口发送一个字节,就会产生一个中断,该中断的中断屏蔽位为第4位(从0计起)。当CPU发出中断结束命令后,该设备会向30H端口发送下一个数据。现要求编写如下一个程序:
(1) 能以中断方式接收输入设备发来的数据。
(2) 每当接收到80个字节的数据后,将这80个字节作为ASCII字符在屏幕上显示出来。即每产生80次中断才向屏幕上显示。
(3) 当接收到800个字节后(即向屏幕显示10次后),结束整个程序的执行。
(4) 向屏幕上显示时,只能使用写文件的方式。即把屏幕作为一个具有特殊文件代号的文件来处理。