当前位置: 网学 > 编程文档 > 汇编语言 > 正文

win32asm原理

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式

中文翻译:肖德时

这篇指南是想让读者能懂得怎样使用MASM。如果你不熟悉MASM,请
下载一个win32asm.exe并通过本指南学习下去。好的,现在准备好
让我们一起前进吧!

原理概述:
从80286开始就有了保护模式下的win32程序,但是这已经成为历史。
所以我们这里所涉及到的都是与我们相关的80386及以后的版本。
windows在单独的虚拟磁盘空间运行单个win32程序。这个意思就是
说每个win32程序都有自己独立的4GB寻址空间。但这并不意味着每
个win32程序都有4GB的物理存储空间,只仅仅是这个程序能在这个
范围里寻址而已。工作是由windows来处理并确认这个程序内存地址
的有效性。当然,这个程序必须是按照windows程序规则来编译的
才行。和win16程序不一样的是所有的win16程序互相“看到”对方。
这在win32下是没有的。这个特征帮助减少某程序代码覆盖另一程序
的可能。内存模式也和以往的win16世界完全的不同。在win32世界里,
我们不需要考虑内存模式或者是什么段。这里只有一种模式:Flat memory model.
这里也没有什么64K段地址的限制。内存是一个4GB的连续的大空间。
也就是说我们不必非要和段寄存器玩。我们也能用一些段寄存器来
寻址内存中的某处。这对程序员来说是一个极大的帮助。这也让
编译win32程序和c语言一样。
当你在win32下编译程序时,你必须要知道一些重要的规则。其中一个是:
windows内部使用esi、edi,ebp和ebx并不能在这寄存器中改变数值。所以
记住这条规则的意思就是:假如你在返回函数中使用这四个寄存器中某个
的话,不要忘记在返回window时恢复初值。一个返回函数就是在你的程序中
返回window。一个返还函数就是被windows调用的你自己的私有函数,最典型
的例子就是windows程序。但这并不意味着你不能使用这四个寄存器了,只要
你能确认在返回windows时恢复了它们的初值就行了。

代码内容:
下面就是win32汇编程序代码的主框架,如果你看不懂这些代码的话,也不要
着急,我将在后面给予详细的解释。
.386
.MODEL FLAT,STDCALL
.DATA
   <你的初使化数据>
   
.DATA?
   <你的未确定初使化数据>
   
.CONST
<你的常量>
.
.CODE
   <标记>
   <你的代码>
   
   end<标记>
   
就是这些,让我们分析一下这个主框架吧!
.386
这是一个汇编程序指令,告诉汇编编译程序使用80386指令集,你也可以用.486,.586。
但可靠的指令集还是用.386。这里还有两个实际上差不多的指令集:.386/.386p,.486/.486p;
那个有“p”的指令集只是在用到有特权指令时才用到。特权指令集是只在保护模式
下被这个cpu/操作系统所接受的。它们也只能被特权代码所使用,例如设备驱动程序。
多数情况下,你的程序是工作在非特权模式下所以安全的作法是使用不带“p"的指令。
.MODEL FLAT,STDCALL
.MODEL是标记内存模式的指令,在win32下,也仅仅只有这个模式:FLAT。
STDCALL是告诉编译器参数的传递模式。在这个模式中有:左到右或右到左。
并要在完成子程序后平衡堆栈。在win16下,有两种传递模式:c和pascal。C子程序传递
是右到左,最右边的参数将首先被压入,并在传递结束时要求平衡堆栈。例如:一个名为
foo的程序被调用,(int first_param,int second_param,int third_param)在C程序传递
中的汇编代码如下
         push      [third_param]          ;压入第三个参数
         push  &nbs
  • 下一篇资讯: 汇编语言的未来展望
  • 网学推荐

    免费论文

    原创论文

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