沐枫小筑

script c c++ c++/cli c#
.net windows ria game and so ...

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  53 Posts :: 1 Stories :: 381 Comments :: 8 Trackbacks

  汇编语言的Hello World,汇编语言没有我想象的那么低级,它已经具备了不少高级语言的特性,代码也变得清晰,层次清楚,易于维护了。

a.asm
.386 
.model flat,stdcall 
includelib kernel32.lib 
includelib user32.lib 

MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
MessageBox equ 
<MessageBoxA>
ExitProcess PROTO :DWORD

.data 
MsgBoxCaption  db 
"Welcome",0 
MsgBoxText       db 
"Hello world!",0 

.code 
start: 
invoke MessageBox, 
0, addr MsgBoxText, addr MsgBoxCaption, 0 
invoke ExitProcess, 
0
end start 

ml a.asm /subsystem:windows
生成a.exe后直接执行

  是时候转变对汇编语言是低级语言的印象了。现在的宏汇编已经和高级语言没有太大的距离了。如下在的阶乘子程序:
factorial proc num:DWORD
    mov eax, 
1
    .
while num > 1
        imul eax, num
        dec num
    .endw
factorial endp

  用C语言来写:

DWORD factorial(num DWORD)
{
  DWORD val 
= 1;
  
while(num>1)
  
{
    val 
*= num;
    num 
--;
  }

  
return val;
}

  不过C++2005自带的MASM没有 *.inc文件,连2003的h2inc.exe都不提供。据说M$有可能会发布MASM8.0版本的开发包,但是至今没有任何消息。很郁闷!!!

  经过一翻搜索,终于找到第三方支持的MASM开发包。http://www.masm32.rantx.com/files/m32v9r.zip
支持网站:http://www.movsd.com/
     http://spiff.tripnet.se/~iczelion/

最新的版本用的 MASM 是6.14版本。附加的inc和lib文件非常全面。
之所以不用更新版本的MASM是为了避免License问题。关于6.14版本与更高版本之间的兼容比较,可以参考:
http://www.masm32.com/mlcompat.htm

更全面的中文教程(yycnet.yeah.net翻译)地址在下面:
http://211.147.7.6:9999/flyfish/source/win32asm.chm

对Masm8.0有兴趣,并想知道其改进,可再参考MSDN Library中关于MASM的参考。

posted on 2006-04-06 12:02 沐枫 阅读(3128) 评论(9)  编辑 收藏 所属分类: C++

Feedback

#1楼  2006-04-10 18:01 装配脑袋      
应该说,我们现在的命令试程序设计语言C/C++/C#/Java/VB与汇编都没有什么本质的区别,都是按照计算机的思维运行,特点是使用变量,以顺序、循环和分支作为主要流程。
  回复  引用  查看    

#2楼  2006-04-11 22:04 ace [未注册用户]
不知道汇编语言能不能变得更好OOP?
  回复  引用    

#3楼  2006-04-27 09:17 达达      
想要OOP可以试试HLASM,我没记错的话应该是叫这个
  回复  引用  查看    

#4楼  2006-09-21 18:41 hou [未注册用户]
我们老师讲到河泥所说的很不一样
  回复  引用    

#5楼 [楼主] 2006-09-22 08:47 沐枫      
嗯。出了学校就会知道,所有的东西和老师讲的都不太一样。
  回复  引用  查看    

#6楼  2007-01-17 21:31 wormz [未注册用户]
拜托,masm32的宏汇编就不要拿到这里说了,
C#/Java/VB与汇编都没有什么本质的区别
那是因为你对计算机理解的不够透彻吧~~

如果想研究汇编建议研究80386以上的保护模式的汇编
  回复  引用    

#7楼  2007-08-15 09:35 Rain [未注册用户]
宏汇编的本质就是提供更好包装的汇编,但与其这样还不如用高级语言.在当今非常重视开发效率问题的年代我觉得没有必要.真正的汇编基本上都是用在工控,嵌入式,游戏并且都是针对特定平台和CPU之上的.这样你就能见识到"低级"语言的魅力.
  回复  引用    

#8楼  2007-08-26 15:15 二手的程序员      
能不能说说用汇编开发Windows程序(不包括C++内嵌汇编),主要有什么用途和好处
  回复  引用  查看    

#9楼 [楼主] 2007-08-29 17:19 沐枫      
@二手的程序员
这个题目好象大了点,而且好象会打口水战的。

我个人认为,对于各种语言,需要了解的是它的特点和功能,以及它的由来(也就是它是为了解决什么类型的问题而诞生的),和衍生出来的各种工具。
然后,我们就可以在具体的项目选型中,综合评价这些开发语言和工具,就明白哪些开发语言和工具是适合的。
  回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-04-06 18:55 编辑过


相关链接: