下面的程序段有错吗若有,请指出错误。 CRAY PROC PUSH AX ADD AX, BX RET
ENDP CRAY
答:程序有错。改正如下: CRAY PROC ADD AX, BX RET
CRAY ENDP ;CRAY是过程名,应放在ENDP的前面 9BH F7H 57H 80H
F0A0:00B0H
先PUSH,SP-2
再PUSH,SP-2
POP, SP+2
题堆栈及SP内容的变化过程
已知堆栈寄存器SS的内容是0F0A0H,堆栈指示器SP的内容是00B0H,先执行两条把8057H和0F79BH分别入栈的PUSH指令,然后执行一条POP指令。试画出示意图说明堆栈及SP内容的变化过程。
答:变化过程如右图所示:
分析下面的程序,画出堆栈最满时各单元的地址及内容。 ;******************************************** S_SEG SEGMENT AT 1000H ;定义堆栈段 DW 200 DUP () ;200*2=190H TOS LABEL WORD S_SEG ENDS
;******************************************** C_SEG SEGMENT ;定义代码段 ASSUME CS: C_SEG, SS: S_SEG START: MOV AX, S_SEG (FLAGS) (AX) T_ADDR 0000
(DS)
1000:0184 :0186 :0188 :018A :018C :018E SP:
0186
题堆栈最满时各单元的地址及内容
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 START ;程序结束
答:堆栈最满时各单元的地址及内容如右图所示:
分析下面的程序,写出堆栈最满时各单元的地址及内容。 ;******************************************** STACK SEGMENT AT 500H ;定义堆栈段 DW 128 DUP () TOS LABEL WORD STACK ENDS
;******************************************** CODE SEGMENT ;定义代码段 MAIN PROC FAR ;主程序部分 ASSUME CS: CODE, SS: STACK START: 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
MAIN ENDP ;主程序部分结束
;-------------------------------------------------------------------- HTOA PROC NEAR ;HTOA子程序 CMP AX, 15 JLE B1 PUSH AX 0500:00EC :00EE :00F0 :00F2 :00F4 :00F6 :00F8 :00FA :00FC :00FE SP: 00EE
返回POP BP地址 0003H
返回POP BP地址 0002H
返回POP BP地址 0001H
主程序返回地址 0000 (DS)
题堆栈最满时各单元的地址及内容
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 BP
B1: ADD AL, 30H CMP AL, 3AH JL PRINTIT ADD AL, 7H
PRINTIT: MOV DL, AL MOV AH, 2 INT 21H RET
HOTA ENDP ;HOTA子程序结束
;-------------------------------------------------------------------- CODE ENDS ;代码段结束
;****************************************** END START ;程序结束
答:堆栈最满时各单元的地址及内容如右上图所示:
下面是一个程序清单,请在下面的图中填入此程序执行过程中的堆栈变化。 ;************************* 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 B10
;-------------------------------------- 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
答:程序执行过程中的堆栈变化如下图所示。
( 0016H ) ( 0018H ) ( 001AH ) ( 001CH ) ( 001EH ) ( 0020H ) SP: (DS)
( 0016H ) ( 0018H ) ( 001AH ) ( 001CH ) ( 001EH ) ( 0020H )
0000 (DS)
( 0016H ) ( 0018H ) ( 001AH ) ( 001CH ) ( 001EH ) ( 0020H )