汇编中pop和push是成对使用的,如果我只用push不用pop,最后执行时会出现无效命令,求大神指教。
.MODELSMALL.STACK64DIOSPSEGMENTAT40HORG17HKBSTATDB?DIOSPENDS.DATADISSHITEDB'INPUTSHIT...
.MODEL SMALL
.STACK 64
DIOSP SEGMENT AT 40H
ORG 17H
KBSTAT DB ?
DIOSP ENDS
.DATA
DISSHITE DB 'INPUT SHITE'
DISCHAR DB 'INPUT CHAR'
DISALT DB 'INPUT ALT'
.CODE
MAIN PROC FAR
MOV AX,DIOSP
MOV ES,AX
MOV BL,ES:KBSTAT
A10:
MOV AH,10H
INT 16H
CMP AL,0DH
JE A50
TEST BL,00000011B
//JZ A30
LEA BP,DISSHITE
CALL DISPLAY
A50:
MOV AX,4C00H
INT 21H
MAIN ENDP
DISPLAY PROC NEAR
PUSH ES
MOV AX,@data
MOV ES,AX
MOV AX,1300H
MOV BX,0017H
MOV CX,11
MOV DX,1520H
INT 10H
RET
DISPLAY ENDP
END MAIN 展开
.STACK 64
DIOSP SEGMENT AT 40H
ORG 17H
KBSTAT DB ?
DIOSP ENDS
.DATA
DISSHITE DB 'INPUT SHITE'
DISCHAR DB 'INPUT CHAR'
DISALT DB 'INPUT ALT'
.CODE
MAIN PROC FAR
MOV AX,DIOSP
MOV ES,AX
MOV BL,ES:KBSTAT
A10:
MOV AH,10H
INT 16H
CMP AL,0DH
JE A50
TEST BL,00000011B
//JZ A30
LEA BP,DISSHITE
CALL DISPLAY
A50:
MOV AX,4C00H
INT 21H
MAIN ENDP
DISPLAY PROC NEAR
PUSH ES
MOV AX,@data
MOV ES,AX
MOV AX,1300H
MOV BX,0017H
MOV CX,11
MOV DX,1520H
INT 10H
RET
DISPLAY ENDP
END MAIN 展开
4个回答
展开全部
典型的堆栈不平衡嘛。这样肯定会有问题,想都不要想。
就像楼上说的,如果在retn前没有平衡堆栈,那么retn的时候,返回地址是错的,程序会跑哪去都有可能。
call的时候会将下一条指令地址压栈,retn的时后会pop一次,弹出之前保存的eip,然后将当前eip的值还原,这样才能实现整个call的正常调用。
如果调用的时候堆栈没平衡好,就比如lz说的push之后忘了pop,那么程序执行retn的时候,还是会认为栈顶是保存的eip值,照样会设置eip的值,这样程序就乱套了,给什么样的错误提示就看系统心情了。
就像楼上说的,如果在retn前没有平衡堆栈,那么retn的时候,返回地址是错的,程序会跑哪去都有可能。
call的时候会将下一条指令地址压栈,retn的时后会pop一次,弹出之前保存的eip,然后将当前eip的值还原,这样才能实现整个call的正常调用。
如果调用的时候堆栈没平衡好,就比如lz说的push之后忘了pop,那么程序执行retn的时候,还是会认为栈顶是保存的eip值,照样会设置eip的值,这样程序就乱套了,给什么样的错误提示就看系统心情了。
展开全部
因为程序中有子程序返回指令RET,它要求出栈的断点应该和你调用CALL时入栈保护的断点一致才能正确返回,这就要求程序中PUSH和POP指令成对出现,否则就会出现错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DISPLAY PROC NEAR
PUSH ES ;ES压栈
……
……
;没有POP
RET ;那就以ES内容,当做返回地址
;出现什么情况,都是可能的。
DISPLAY ENDP
PUSH ES ;ES压栈
……
……
;没有POP
RET ;那就以ES内容,当做返回地址
;出现什么情况,都是可能的。
DISPLAY ENDP
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
必须成对出现,
就如: 出门上班,下班回家.
上/下车;
等等
否则程序无法执行.
就如: 出门上班,下班回家.
上/下车;
等等
否则程序无法执行.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询