欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

新人求教,该如何解决

更新时间: 2014-01-05 03:16:46 责任编辑: Author_N1

 

新人求教
1.prograCode segment
2.main proc far
3. assume  cs:prograCode
4.start:
push ds
6. push ax
mov ch,4
rotate: mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl next
add al,7h
next:
mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
ret

main endp
prograCode ends
end


第六行为啥非要需要将ax压入栈中,不压入栈程序执行完毕貌似“乱飞”了,这是为啥呢,求教
--参考方法--
程序刚得到运行时,ds 指向程序自身的 psp,ax=0000,这样它是和上一行的 push ds 一起将 psp:0000 压栈;main 子程的最后不是有 ret 指令吗,由于 main 是 far 属性的,所以 ret 即为 retf ,和子程开始压栈的 psp:0000 对应,即这时 retf 会返回到 psp:0000 处,那里有个 int20h 指令,这是个很古老应该被淘汰的“结束程序返回DOS” 的功能调用。现在通常是建议使用下面的代码实现“结束程序返回DOS”
  mov ax, 4c00h  ; al 可以设置程序的退出码
  int  21h

--参考方法--
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:16:46
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20346/
本文WWW.DOC100.NET DOC100.NET版权所有。