第六章答案
======================================= 1.下面的程序段有错吗?若有,请指出错误. CRAY PROC PUSH AX ADD AX,BX RET
ENDP CRAY
[解]:当然有错误,ENDP CRAY写反了,应该将其改成CRAY ENDP.
2.已知堆栈寄存器SS的内容是0F0A0H,堆栈指示器SP的内容是00B0H,先执行两条把8057H和0F79BH分别入栈的PUSH指令.然后再执行一POP指令.试画出示意图说明堆栈及SP内容的变化过程.
3.分析下面\的程序\画出堆栈最满时各单元的地址及内容. ; 6.3题的程序
;=========================================== S_SEG SEGMENT AT 1000H ;DEFINE STACK SEGMENT DW 200 DUP(?) TOS LABEL WORD
S_SEG ENDS
C_SEG SEGMENT ;DEFINE CODE SEGMENT ASSUME CS:C_SEG,SS:S_SEG MOV AX,S_SEG MOV SS,AX
MOV SP,OFFSET TOS PUSH DS MOV AX,0 PUSH AX ...
PUSH T_ADDR PUSH AX PUSHF ... POPF POP AX
POP T_ADDR RET
C_SEG ENDS ;END OF CODE SEGMENT END C_SEG ;END OF ASSEMBLY
4.分析下面\题的程序\的功能,写出堆栈最满时各单元的地址及内容. ; 6.4题的程序
;==================================== STACK SEGMENT AT 500H DW 128 DUP(?) TOS LABEL WORD STACK ENDS
CODE SEGMENT ;DEFINE CODE SEGMENT MAIN PROC FAR ;MAIN PART OF PROGRAM
ASSUME CS:CODE,SS:STACK
START: ;STARTING EXECUTION ADDRESS MOV AX,STACK MOV SS,AX
MOV SP,OFFSET TOS PUSH DS SUB AX,AX PUSH AX
;MAIN PART OF PROGRAM GOES HERE MOV AX,4321H CALL HTOA
RET ;RETURN TO DOS
MAIN ENDP ;END OF MAIN PART OF PROGRAM HTOA PROC NEAR ;DEFINE SUBPROCEDURE HTOA CMP AX,15 JLE B1 PUSH AX PUSH BP MOV BP,SP
MOV BX,[BP+2] AND BX,000FH MOV [BP+2],BX POP BP MOV CL,4 SHR AX,CL CALL HTOA POP AX B1:
ADD AL,30H CMP AL,3AH JL PRINTIT ADD AL,07H PRINTIT: MOV DL,AL MOV AH,2 INT 21H RET
HTOA ENDP ;END OF SUBPROCEDURE CODE ENDS ;END OF CODE SEGMENT END START ;END OF ASSEMBLY
5.下面是6.5题的程序清单,请在清单中填入此程序执行过程中的堆栈变化. 0000 STACKSG SEGMENT 0000 20 [. DW 32 DUP(?) ????
0040 ]
STACKSG ENDS
0000 CODESG SEGMENT PARA 'CODE' 0000 BEGIN PROC FAR
ASSUME CS:CODESG,SS:STACKSG 0000 1E PUSH DS 0001 2B C0 SUB AX,AX 0003 50 PUSH AX
0004 E8 0008 R CALL P10 0007 CB RET 0008 BEGIN ENDP 0008 B10 PROC 0008 E8 000C R CALL C10 000B C3 RET 000C B10 ENDP 000C C10 PROC 000C C3 RET 000D C10 ENDP 000D CODESG ENDS END BEGIN

