问答题
设原堆栈指针指向系统堆栈,在用户堆栈(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