网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
学 Win32 汇编 [17]: 关于压栈(PUSH)与出栈(POP) 之一
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/11/26
下载{$ArticleTitle}原创论文样式

1 2 3 下一页

  记得刚学多线程的时候, 碰到一个结构:

//Delphi 的语法描述 
PContext = ^TContext; 
_CONTEXT = record 
 ContextFlags: DWORD; 
 Dr0: DWORD; 
 Dr1: DWORD; 
 Dr2: DWORD; 
 Dr3: DWORD; 
 Dr6: DWORD; 
 Dr7: DWORD; 
 FloatSave: TFloatingSaveArea; 
 SegGs: DWORD; 
 SegFs: DWORD; 
 SegEs: DWORD; 
 SegDs: DWORD; 
 Edi: DWORD; 
 Esi: DWORD; 
 Ebx: DWORD; 
 Edx: DWORD; 
 Ecx: DWORD; 
 Eax: DWORD; 
 Ebp: DWORD; 
 Eip: DWORD; 
 SegCs: DWORD; 
 EFlags: DWORD; 
 Esp: DWORD; 
 SegSs: DWORD; 
end; 

  从这个结构中可以基本洞察多线程的基本原理:

  1、在切换到另一个线程之前, 先把当前线程在寄存器中的数据保存在这个结构;

  2、重新切回线程时, 再才这个结构中读出相关数据到寄存器, 从而继续运行...

  压栈、出栈也是类似的道理.

  一个程序包含若干子程序, 子程序中一般会有自己的参数或局部变量.

  在执行这个子程序前, 应该先把寄存器中的相关数据暂存一下(子程序也要使用寄存器), 这就是所谓的压栈(PUSH);

  等子程序执行完毕, 再把之前压到栈中的数据取回(而让程序继续执行), 这就是所谓的出栈(POP).

  什么是 "栈"?

  程序把内存划分了若干区域, 其中有 "全局数据区" 和 "局部数据区".

  全局数据所在的位置叫 "堆";

  局部数据(局部变量、局部常量、子程序参数)所在的位置叫 "栈", 也叫 "堆栈".(责任编辑:admin)

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号