`
zzc1684
  • 浏览: 1190386 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

学 Win32 汇编[33] - 探讨 Win32 汇编的模块化编程

 
阅读更多

我觉得所谓的模块化有两种: "假模块化" 和 "真模块化".

所谓 "假模块化" 就是通过 include 指令把 *.inc 或 *.asm 文件的文本插入到当前位置.
这样最后还是一个大的 asm 文件, 这适合小型的模块化设计.

所谓 "真模块化" 就是一个或几个源文件先通过 lib.exe 编译成 *.lib 文件, 然后通过 includelib 指令引入使用.
这在 RadASM 环境中可通过建立 LIB Project 工程方便做到. 做大工程应该使用这种方式.



假如通过 Win32 App (no res) 模板建立了并实现了这样一个工程(Test33):


; Test33.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
;两数求和的函数
sum2 proc v1, v2
    mov eax, v1
    add eax, v2
    ret
sum2 endp
;三数求和的函数
sum3 proc v1, v2, v3
    mov eax, v1
    add eax, v2
    add eax, v3
    ret
sum3 endp
;
main proc
    invoke sum2, 11, 22
    PrintDec eax ;33
    invoke sum3, 11, 22, 33
    PrintDec eax ;66
    ret
main endp
end main


上面程序的 "假模块化" 的实现:


通过: 工程窗口 -> 右键 -> 新建 -> 源文件, 分别建立 num2.asm 和 num3.asm
现在要把整个程序分散一些分别到: Test33.inc、num2.asm、num3.asm



;Test33.inc
.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

;num2.asm .code ;这个 .code 可有可无 ;两数求和的函数 sum2 proc v1, v2   mov eax, v1   add eax, v2   ret sum2 endp
;num3.asm ;三数求和的函数 sum3 proc v1, v2, v3   mov eax, v1   add eax, v2   add eax, v3   ret sum3 endp
;Test33.asm ;这样主程序的代码就非常简单了 include Test33.Inc .code include sum2.asm include sum3.asm ; main proc   invoke sum2, 11, 22   PrintDec eax ;33   invoke sum3, 11, 22, 33   PrintDec eax ;66   ret main endp end main


上面程序的 "真模块化" 的实现:


准备把 num2 和 num3 两个函数分别作在两个模块里(其实一个模块可以包含很多东西).
文件 -> 新建工程(LIB Project) -> 随意取名为 sum2(准备实现 sum2 函数) -> 然后默认下去, 代码如下:


; sum2.asm
.386
.model flat, stdcall

.code
sum2 proc v1, v2
    mov eax, v1
    add eax, v2
    ret
sum2 endp
end ;注意这里只有 end, 模块等待调用, 不能指定入口函数

;然后执行构建(Alt+Shift+F5), 我们需要的 sum2.lib 已经在刚才建立的工程目录下了
;同样可以建立并得到 sum3.lib
; sum3.asm .386 .model flat, stdcall .code sum3 proc v1, v2, v3   mov eax, v1   add eax, v2   add eax, v3   ret sum3 endp end
;调用库测试: ;Test33_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 ;这里的引入路径可以是全路径, 这里是相对路径 includelib ..\sum2\sum2.lib includelib ..\sum3\sum3.lib ;子程序声明 sum2 proto :dword, :dword sum3 proto :dword, :dword, :dword .code main proc   invoke sum2, 11, 22   PrintDec eax ;33   invoke sum3, 11, 22, 33   PrintDec eax ;66   ret main endp end main
;假如把 sum2 proto :dword, :dword sum3 proto :dword, :dword, :dword ;分别写在 sum2.inc 和 sum3.inc, 程序可改为:
; Test33_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 include ..\sum2\sum2.Inc include ..\sum3\sum3.Inc includelib ..\sum2\sum2.lib includelib ..\sum3\sum3.lib .code main proc   invoke sum2, 11, 22   PrintDec eax ;33   invoke sum3, 11, 22, 33   PrintDec eax ;66   ret main endp end main ;其实把子程序的声明直接写在实现它的 asm 文件里也行, 但那样层次不分明.
分享到:
评论

相关推荐

    Win32汇编语言-罗云彬.chm

    Win32汇编语言-罗云彬.chm Win32汇编语言-罗云彬.chm Win32汇编语言-罗云彬.chm

    学习win32汇编-初级入门

    Win32应用程序虽然和其他32位应用程序(例如32位保护模式DOS程序)一样可以使用386汇编语言和保护模式编程,但是Win32应用程序的执行机制与其他32位应用程序有一定的差别,例如...,Win32汇编语言也有其特殊的编程方式...

    WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编

    WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编WIN32汇编

    win32汇编教程

    win32汇编教程。... 为了让网友们能更好的学习Win32汇编编程,于是我为大家将网上的资料整理成一个帮助文件。 本帮助文件包括:Iczelion的Win32汇编教程、Iczelion 的 ODBC 教程、Iczelion 的 VxD 教程共三部分

    Win32汇编 Win32汇编

    Win32汇编 Win32汇编 Win32汇编 Win32汇编

    Win32汇编语言全接触(CHM格式)

    很好的汇编教程…… ...-Iczelion的win32汇编教程 -Iczelion的ODBC教程 -Iczelion的VxD教程 -Iczelion的PE教程 -罗云彬的win32汇编教程 -win32ASM经验点滴 -X86汇编语言编程 -加密解密 -病毒的分析和防治

    Win32汇编程序设计教程

    Win32汇编编程系列 声明: 本帮助文件由yyc个人整理后出版,内容全摘自网络。版权归实际作者所有。 为了让网友们能更好的学习Win32汇编编程,于是我为大家将网上的资料整理成一个帮助文件。 本帮助文件包括:...

    win32汇编语言入门win32汇编语言入门

    win32汇编语言入门win32汇编语言入门win32汇编语言入门win32汇编语言入门win32汇编语言入门win32汇编语言入门

    Win32汇编编程系列

    win32汇编资料,包含win32汇编教程,ODBC教程,VxD串口编程,硬件参考资料

    Win32汇编语言编程(罗云彬编)

    本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛http://win32asm.yeah.net的站长。本书是作者多年来编程工作的总结,适合于欲通过Win32汇编语言编写Windows程序的读者...

    WIN32汇编程序源码级调试_VS2019_vs2019win32汇编_vs2019win32汇编_Win32汇编程序_汇编语言

    汇编语言下的windows窗口代码,学生管理系统

    亲测正确版-win32汇编贪吃蛇源码-win22汇编游戏源码

    win32汇编实现贪吃蛇 win32汇编多文件程序设计 亲测正确版-win32汇编贪吃蛇源码-win22汇编游戏源码 网络流传的很多没法使用,亲测让大家放心使用 汇编语言实现动态链表 以对话框做窗口模板并做为主界面 开发...

    win32asm汇编语言-罗云彬

    本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛http://win32asm.yeah.net的站长。本书是作者多年来编程工作的总结,适合于欲通过Win32汇编语言编写Windows程序的读者

    罗云斌win32汇编.rar

    本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛http://win32asm.yeah.net的站长。本书是作者多年来编程工作的总结,适合于欲通过Win32汇编语言编写Windows程序的读者

    从Dos到Win32汇编从Dos到Win32汇编[评价可免费]

    从Dos到Win32汇编从Dos到Win32汇编从Dos到Win32汇编从Dos到Win32汇编

    win32asm汇编语言-罗云彬.rar

    win32asm汇编语言-罗云彬.chm 学习32位汇编必备、、、、 经典教材 、、、不解释、、、

    win32汇编程序设计教程

    本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛http://win32asm.yeah.net的站长。本书是作者多年来编程工作的总结,适合于欲通过Win32汇编语言编写Windows程序的读者...

    WIN32汇编语言教程

    WIN32汇编语言教程 电子书WIN32汇编语言教程 电子书WIN32汇编语言教程 电子书WIN32汇编语言教程 电子书WIN32汇编语言教程 电子书WIN32汇编语言教程 电子书

    Win32汇编语言程序设计(罗云彬)chm

    本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛http://win32asm.yeah.net的站长。本书是作者多年来编程工作的总结,适合于欲通过Win32汇编语言编写Windows程序的读者...

    汇编模块-易语言模块

    汇编模块-易语言模块

Global site tag (gtag.js) - Google Analytics