c++习题定义堆栈类
1个回答
2018-04-09 · 知道合伙人互联网行家
关注
展开全部
题目给的是一.LST文件,先还原为PSTACK.ASM
STACKSG SEGMENT STACK
DW 32 DUP(?)
TOP LABEL WORD
STACKSG ENDS
CODESG SEGMENT
ASSUME CS:CODESG,SS:STACKSG
BEGIN PROC FAR
MOV AX,STACKSG
MOV SS,AX
MOV SP,OFFSET TOP
PUSH DS
XOR AX,AX
PUSH AX
CALL B10
RET
BEGIN ENDP
B10: PROC NEAR
CALL C10
RET
ENDP
C10: PROC NEAR
RET
ENDP
CODESG ENDS
END BEGIN
用MASM和LINK汇编链接得PSTACK.EXE
再运行CMD进到命令提示符下:
输入DEBUG PSTACK.EXE(回车),依次键入:
-d:0 显示如下:
13DC:0000 CD 20 FF 9F ... ...
先记下PSP段地址为13DCH;再输入
-r 显示:
... ...
DS=13DC ES=13DC SS=13EC CS=13F0 IP=0 ...
再输入
-t=0
-t
...
输入n个t后,到IP=40时,SP=0038H,堆栈最满.
此时执行
-dss:0,显示:
... ...
13EC:0030 00 00 14 00 F0 13 F0 0D-13 00 0F 00 00 00 DC 13
由于每台电脑执行程序时,浮动地址不一,题目给定
PSP=1234H,与本机PSP段地址为13DCH相差后,依次填入下表:
位移 栈内容 [十六进制]
(0032) (0014) ;IP 入栈
(0034) (1248) ;CS 入栈
(0036) (0584)
(0038) (0013) ;IP 入栈
(003A) (000F)
(003C) (0000);push ax 时入栈的数据
(003E) (1234);push ds 时入栈的段址
SP=0038H
STACKSG SEGMENT STACK
DW 32 DUP(?)
TOP LABEL WORD
STACKSG ENDS
CODESG SEGMENT
ASSUME CS:CODESG,SS:STACKSG
BEGIN PROC FAR
MOV AX,STACKSG
MOV SS,AX
MOV SP,OFFSET TOP
PUSH DS
XOR AX,AX
PUSH AX
CALL B10
RET
BEGIN ENDP
B10: PROC NEAR
CALL C10
RET
ENDP
C10: PROC NEAR
RET
ENDP
CODESG ENDS
END BEGIN
用MASM和LINK汇编链接得PSTACK.EXE
再运行CMD进到命令提示符下:
输入DEBUG PSTACK.EXE(回车),依次键入:
-d:0 显示如下:
13DC:0000 CD 20 FF 9F ... ...
先记下PSP段地址为13DCH;再输入
-r 显示:
... ...
DS=13DC ES=13DC SS=13EC CS=13F0 IP=0 ...
再输入
-t=0
-t
...
输入n个t后,到IP=40时,SP=0038H,堆栈最满.
此时执行
-dss:0,显示:
... ...
13EC:0030 00 00 14 00 F0 13 F0 0D-13 00 0F 00 00 00 DC 13
由于每台电脑执行程序时,浮动地址不一,题目给定
PSP=1234H,与本机PSP段地址为13DCH相差后,依次填入下表:
位移 栈内容 [十六进制]
(0032) (0014) ;IP 入栈
(0034) (1248) ;CS 入栈
(0036) (0584)
(0038) (0013) ;IP 入栈
(003A) (000F)
(003C) (0000);push ax 时入栈的数据
(003E) (1234);push ds 时入栈的段址
SP=0038H
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询