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

  定义子过程的伪指令: PROC、ENDP

; Test9_1.asm 
.386 
.model flat, stdcall 
 
include  Windows.inc 
include  kernel32.inc 
include  masm32.inc 
include  debug.inc 
includelib kernel32.lib 
includelib masm32.lib 
includelib debug.lib 
 
.code 
   ;子过程 proc1: 
   proc1 proc 
      PrintText ''proc1'' 
   proc1 endp 
   
   ;子过程 proc2: 
   proc2 proc 
      PrintText ''proc2'' 
   proc2 endp 
   
   ;子过程 proc3: 
   proc3 proc 
      PrintText ''proc3'' 
   proc3 endp 
 
   ret 
end proc1 ;end 后面的 proc1 是入口的子过程名; 这也就是指定主过程. 
 
;可以把 end proc1 分别换做 end proc2 和 end proc3 尝试, 
;如果这是一个供其他程序调用的代码文件, 那么 end 后面就不需要指定. 

  模仿 C 语言的样子, 以后的程序结构应该这样:

; Test9_2.asm 
.386 
.model flat, stdcall 
 
include  Windows.inc 
include  kernel32.inc 
include  masm32.inc 
include  debug.inc 
includelib kernel32.lib 
includelib masm32.lib 
includelib debug.lib 
 
.data 
   szText db ''Hello World!'', 0DH, 0AH, 0 
   
.code 
main proc 
   PrintString szText ;Hello World! 
   ret 
main endp 
end main 

  局部变量要用 local 声明, 和全局变量区别不小:

; Test9_3.asm 
.386 
.model flat, stdcall 
 
include  windows.inc 
include  kernel32.inc 
include  masm32.inc 
include  debug.inc 
includelib kernel32.lib 
includelib masm32.lib 
includelib debug.lib 
 
.code 
main proc 
   ;局部变量中的类型不能使用缩写 
   LOCAL v1: dword 
   
   ;可用逗号间隔写在一行 
   LOCAL v2: dword, v3: dword 
   
   ;不指定类型时默认 DWORD(在 Win32 下) 
   LOCAL v4 
   
   ;数组 
   LOCAL v5[3]: dword 
   
   ;在手动初始化前, 局部变量中都是些垃圾值: 
   PrintDec v1 
   PrintDec v2 
   PrintDec v3 
   PrintDec v4 
   mov eax, v5[0] 
   PrintDec eax 
   ret 
main endp 
end main 

  调用子过程:

; Test9_4.asm 
.386 
.model flat, stdcall 
 
include  windows.inc 
include  kernel32.inc 
include  masm32.inc 
include  debug.inc 
includelib kernel32.lib 
includelib masm32.lib 
includelib debug.lib 
 
.code 
; 
proc1 proc 
   PrintDec 1 
   ret 
proc1 endp 
; 
proc2 proc 
   PrintDec 2 
   ret 
proc2 endp 
; 
main proc 
   PrintDec 0 
   call proc2 
   call proc1 
   ret 
main endp 
end main 
 
;注释: 
;最后一行 end main 决定了子过程将被率先调用, 这样它就成了主过程 
;然后主过程又通过 call 指令顺序调用了 proc2、proc1 
;这样最后的显示结果将是: 0 / 2 / 1 
;子过程应该用 ret 指令返回 

  一个求和函数的例子:

; Test9_5.asm 
.386 
.model flat, stdcall 
 
include  windows.inc 
include  kernel32.inc 
include  masm32.inc 
include  debug.inc 
includelib kernel32.lib 
includelib masm32.lib 
includelib debug.lib 
 
.code 
;求和的函数, 函数返回值在 eax 
sum proc v1: dword, v2: dword 
   mov eax, v1 
   add eax, v2 
   ret 
sum endp 
; 
main proc 
   invoke sum, 11, 22 
   PrintDec eax ;33 
   ret 
main endp 
end main 
(责任编辑:admin)

网学推荐

免费论文

原创论文

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