鱼C论坛

 找回密码
 立即注册
查看: 6634|回复: 8

[技术交流] 【NASM系列教程1】nasm,你值得拥有

[复制链接]
发表于 2011-11-29 22:52:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 川本姨夫 于 2011-11-29 23:55 编辑

      昨天发了个nasm写win32程序的入门贴子,今天看还没通过审核,我就纳闷了,我没写反动内容啊(拉登跟我没关系的)~~   刚才下自习回来看见帖子被加分了,我当时老泪纵横啊,鱼哥哥,我这辈子非你不嫁了。。为了报答,我继续写


强势插入正题----
       nasm作为一个开源免费的汇编编译器,可能就有些鱼油们觉得便宜没好货了,why? 中国人的一贯观念,不要钱的都是垃圾啦。但是在国外,免费的才是最用心做的,像一些酒店里边提供免费早餐,一般情况下,中国人就会选择出去吃,但是当你去试一次,才会发现甚至比外边收费的都好,服务员是这么解释滴:”正是因为是免费的,我们才做的更好·····“    什么意思,自己参悟

       况且nasm确实是个很好的编译器,语法简单而清晰,完全不像masm各种莫名其妙的符号(悄悄给你说,我现在都看不懂有些东西,像那个什么什么的,我就不来丢人了),最后让我投诚用nasm的是有一段时间看于渊的自己动手写操作系统,编译那些引导扇区都是用的nasm,那时,我充分体验到了自己控制电脑的快感,对程序的每一步都了如指掌·······好像走题了

       所以今天我详细说说nasm的用法:
      
       一、下载nasm,和nasmX(这个主要是用一些头文件,nasm不用库文件的)。神马!?去哪下?拍你
      
       二、把nasm复制到nasmX的bin目录,或者直接找到golink,和nasm.exe放在一个目录里,编译连接工具就这样了,是不是很简单啊
      

       三、设置环境变量,,在环境变量的path里加上nasm和golink所在路径,不会的话去百度怎么设置环境变量,然后include目录的路径也加进去,没有include变量你就新建一个,实在不会就在源程序里的%include后包含相对路径吧,比如你的当前目录在D:\NASM(就是你的源文件所在目录),而include在D:\NASM\include,那就%include \include\XXOO.INC
     这该懂了把。。。
      

      刀磨完了是不是该砍柴了啊?
      源程序格式:
           

         %include ;包含文件
      

      entry XXOO   程序入口
      
      段名
      数据或代码
      段名         ;可以不要段名,就默认一个code段
      数据或代码

          完了,就这样,编译连接方法在昨天就发了,自己去看看吧- -
     手打一个最简单的:
%include "windows.inc"

%include "user32.inc"

%include "kernel32.inc"          ;不想包含头文件的话就要自己动手了,相当麻烦,这步我们还是做了吧

%include "nasmx.inc"             ;invoke就是一个包括在里边的宏,你可以看看打开invoke怎么实现的

entry XX ;入口点

extern MessageBoxA,ExitProcess    ;用invoke就不用这句

sztext db "nasm so easy",0
push MB_OK
push sztext                     ;不带[]就是地址
push sztext
push 0
call MessageBoxA 
push o
call ExitProcess ;over

         说一下nasm语法和masm的不同,除了伪指令的话,标号就是最大的不同了,像masm定义变量是 XXOO  DB   OOXX
  nasm就随意了,反正DB就是在当前位置填充数据,管你怎么写都可以,不要变量名也无所谓

     然后函数名其实也是个标号,masm的  XX  proc  uses  。。。。。。
     各种麻烦
     nasm简单:

   标号   直接加代码就行了
      

        注意内部的清理堆栈是自己处理的,但是我觉得自己处理比交给windows更有趣,还可以通过SUB EBP,XX来定义局部变量,然后用   [ebp+4]来寻址第一个变量,以此类推·······


        所以再用nasm的时候你心里要有内存,你要考虑程序的流程,你定义数据的地方会不会干扰程序运行,习惯了你就会觉得编程很有感觉,各种问题都可以站在机器的角度看,快成高手了哦,偷笑吧
     


       调用API嘛,你愿意用INVOKE的话nasm也有,但是我自己更喜欢push参数然后call,代码看起来更整齐,很有美感。。。

       说到底win32汇编的书基本就是教你怎么用API,汇编语言完全是用的高级语法,跟C没什么区别,但是用nasm可以体验到充分与CPU接触的感觉,不用学习那些乱七八糟的语法,直接用纯汇编写多霸气,如果你想学破解,nasm是你必须用的,masm把你拉得离cpu太远了,就成了高不成低不就的纠结的语言。。。。

     我觉得我讲的有那么详细了,如果不懂,那就。。。。我也不知道肿么办嘞。
     以后还有更多内容,慢慢补齐


     另外唠几句,我第一次知道鱼C是在百度空间里边,当时就觉得鱼C太伟大了,为大家做那么多免费视频,有多少新手多少菜鸟从小甲鱼背上起飞了哇。于是乎,我果断键入网址,进来才发现里边是一个和谐的大家庭,真的觉得很温暖,真心希望鱼C越来越好,大家的技术突飞猛进,说不定以后老外都要学我们的CPI  (chinese programming interface),哈哈。
      走过路过不要错过啊

     有钱的捧个钱场,没钱的捧个人场啊
     


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-29 23:29:24 | 显示全部楼层
我也觉得nasm好用。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-29 23:32:31 | 显示全部楼层
有时间再慢慢看,帮楼主顶一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-29 23:34:31 | 显示全部楼层
本帖最后由 川本姨夫 于 2011-11-29 23:36 编辑

额,代码14行差一个标号,就那个入口点,大家自己加上吧


手打失误,下次一定小心了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-29 23:40:00 | 显示全部楼层
罗云彬书上说 nasm 是学习 linux 汇编 的 重要部分 (原话我忘了) :lol:lol:lol  希望楼主 多出一些 此类教程 :P                          nasm学习教程最好 和 linux开源结合起来  ,那就更完美了。:lol:P:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 10:12:49 | 显示全部楼层
楼主好样的,要持续下去哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 20:11:51 | 显示全部楼层
绝对的高手啊!厉害,小弟我看都看不懂啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-8 19:00:44 | 显示全部楼层
ZHICHI YIXIA
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-19 19:26:41 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 22:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表