问答题 设原堆栈指针指向系统堆栈,在用户堆栈(0200:0800)栈顶的第一个单元存放了一个数,下面的子程序完成这样的功能:将栈顶的数取出,转换为一个表格中的代码(表格首址为DS:0000),再输出到0200H端口,并返回。改正下面程序中的错误。
   DAI:    PUSH    DX
           PUSH    AX
           MOV     SP,0800
           MOV     SI,0A00
           MOV     SS,0200
           POP     AX
           XLAT
           OUT     0200,AL
           POP     AX
           POP     DX
           RET
【正确答案】正确的程序应为:
   DAI:PUSH    DX
        PUSH    AX
        MOV    BP,SP    ;保存系统堆栈指针
        MOV    DI,SS
        MOV    AX,0200H    ;设用户堆栈指针
        MOV    SS,AX
        LEA    SP,[0800H]
        MOV    BX,0A00H    ;表格变换
        POP    AX
        XLAT
        MOV    DX,0200H    ;输出到0200H端口
        OUT    DX,AL
        MOV    SP,BP       ;恢复系统堆栈指针
        MOV    SS,DI
        POP    AX           ;恢复AX和DX寄存器
        POP    DX
        RFT
【答案解析】