• 2006-09-03

    HLA简单简单实例 ——《汇编语言编程艺术》

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.tuenhai.com/logs/3219335.html

    HLA简单简单实例 ——《汇编语言编程艺术》

    学习汇编是比较枯燥的,从HLA入门学习汇编就比较容易些。

    《汇编语言编程艺术》以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言编程的各种基础知识和编程技巧,内容涉及到数据表示、存储器管理、各种数据类型、过程、与汇编语言相关的体系结构、控制结构、文件、宏指令、位处理指令、字符串指令、MMX指令、类和对象,以及混合语言编程等,尤其是在高级汇编语言(HLA)方面,该书给予了细致深入的讲解。对于有意学习X86汇编语言编程的程序员来说,这是一本难得的好书。本书的作者Randall Hyde在大学中教授汇编语言十多年,并且开发了好几个商用软件,具有丰富的汇编语言开发经验。该书的英文电子版受到了成千上万的网站和高级程序员的高度评价,已经成为了高级汇编语言编程方面的一本经典之作。虽然该书的出版时间不长,但在Amazon上为该书作出评价的人很多,而且几乎所有的人都给予5星的评价,可见其内容之好。笔者相信,随着时间的推移,它在程序员中的影响回越来越大。 

    汇编语言编程艺术 可到作者主页去下载英文电子版  http://webster.cs.ucr.edu/  

    《汇编语言编程艺术》中文版部分章节在线阅读:
    http://act.it.sohu.com/book/serialize.php?id=531#content

    汇编语言编程艺术 网上还可以找到视频教程。比如这里 http://www.so138.com/so/so138.aspx?id=1269 可用讯雷下载。


    先安装Hla 和RadASM,RadmASM的安装设置见www.tuenhai.com的另一篇文章。本文例子用的是 HLA version 1.86, RadASM version 2.2.0.9。http://jhkdiy.go3.icpcn.com 有RadASM的中文教程。

    先在ra(RadASM的简称,下同)新建一工程,我取名testhla

    我们所有的学习实例都写在testhla.hla中。

    《汇编语言编程艺术》实例一:

    Program hello;

    #include("stdlib.hhf")

    begin hello;       
            stdout.put("hello,www.tuenhai.com");
            stdin.readLn();//不写这句,屏幕就会一闪而过
    end hello;

    在ra中,按F5编译,按Ctrl+Shift+F5运行。

    《汇编语言编程艺术》实例二:

    Program readLn;//从屏幕读取输入并显示

    #include("stdlib.hhf")

    static
            InitValue:int32 :=556677;
            NotInitialized:int32;


    begin readLn;
            stdout.put( "hello,tuenhai.com, InitValue's value is ",InitValue,nl );
            stdout.put( "Pls Enter an integer value");//如果输入非数字,会因类型不对而出错
            stdin.get( NotInitialized );
            stdout.put( "You entered ",NotInitialized, nl )
            stdin.readLn();//没有这行,屏幕会一闪而过
    end readLn;

    《汇编语言编程艺术》实例三:

    Program movAddSub;//学习mov add sub指令

    #include("stdlib.hhf")

    static
            i8:int8:=-8;
            i16:int16:=-16;
            i32:int32:=-32;

    begin movAddSub;
            mov(0,al);//8位寄存器al置0
            sub(i8,al);//al-=i8
            mov(al,i8);        //i8=al
           
            mov(0,ax);
            sub(i16,ax);
            mov(ax,i16);
           
            mov(0,eax);
            sub(i32,eax);
            mov(eax,i32);
           
            stdout.put("After negation:i8=",i8,nl,
            "i16=",i16,nl
            "i32=",i32,nl
            );//nl是换行,newline
           
            add(56789,i32);//i32+=56789
            stdout.put("after Add:i8=",i32);
           
            stdin.readLn();
    end movAddSub;

    《汇编语言编程艺术》实例四:

    Program forWhile;//学习for,while循环

    #include("stdlib.hhf")

    static
            i:int8;

    begin forWhile;
            for ( mov(0,i);i<30;add(2,i) ) do//for 循环,初始值;条件,步进
                    stdout.put("i=",i,nl);//在屏幕上打印出来
            endfor;
           
            stdout.put(nl,nl)
           
            mov(0,i);//i初始值为0
            while(i<15) do
                     stdout.put("i=",i,nl);
                     add(3,i);//步进为3
            endwhile;
           
            stdin.readLn();
    end forWhile;


    《汇编语言编程艺术》实例五:

    Program repeatForever;//学习repeat,forever

    #include("stdlib.hhf")

    static
            i:int32;

    begin repeatForever;
            mov(10,ebx);//ebx=10
            repeat
                    stdout.put("ebx=",ebx,nl)
                    sub(1,ebx);//ebx-=1
            until( ebx=0 );//当ebx=0时停止循环
           
            stdout.put(nl);//输出一个空行
           
            forever
                    stdout.put("Enter an integer less than 79",nl);
                    stdin.get(i);//读取输入值赋给i
                    breakif(i<79);//输入值正确就退出
                    stdout.put("The value needs to be less than 79",nl);//输入不正确就提示
            endfor;
            stdin.readLn();
    end repeatForever;


    《汇编语言编程艺术》实例六:

    Program testTry;//try..exception..endtry语句处理异常

    #include("stdlib.hhf")

    static
            i:int16;
            b:boolean:=false;

    begin testTry;
            repeat
                    try
                            stdout.put("Enter an integer less than 79",nl);
                            stdin.get(i);//把输入值赋给i
                            if (i<79) then//如果输入值正确就退出repeat
                                    mov(true,b);
                            endif;

                    exception(ex.ConversionError);//输入非数字时引发的异常
                            stdout.put("Illegal numeric value,please re-enter",nl);
                    exception(ex.ValueOutOfRange);//输入数字超过i(int16)的最大值时引发的异常
                            stdout.put("Value is out of range,please re-enter",nl);
                    endtry;
            until( b );//当ebx=0时停止循环
           
            stdin.readLn();
    end testTry;


    收藏到:Del.icio.us




    评论

  • 好!!学习了。。。
  • 你好,不知可否教我做个论坛自动发贴软件。谢谢。我邮箱103913137@qq.com QQ:103913137
  • 搞什么汇编,下一代windows连原有的windows API 都去掉了,屠恩海你真是太聪明了,聪明的不知道该干些啥,尽整这些没用的,浪费自己的生命,也浪费别人的,对你很失望!!!
  • 111111111111111111





  • 亚洲需要“思想市场”



    作者:英国《金融时报》居伊•德•容凯尔(Guy de Jonquieres)

    2006年9月5日 星期二







    搬到亚洲后最惊奇的发现之一是,对于亚洲令人叹为观止的崛起以及它的未来发展方向,很少存在理论层面的好奇心。尽管亚洲的全球影响力日益增加,但无论是经济学、商业、社会政策,还是国际关系,该地区诸多事务方面最具启发性的研究,有许多都发源于其它地区,主要是西方。



    亚洲不缺脑力人才或自封的智库。但大部分产生的是乏味的成果,往往不针对真正的难题,更别提解答了。许多成果只不过是官方宣传,而且几乎没有人看到自己的小天地之外。用熟悉亚洲的瑞士商学院教授让-皮埃尔•雷曼(Jean-Pierre Lehmann)的话来说,亚洲智库不少,但思想不多。



    诚然,许多西方智库也不过是其资金赞助者的喉舌。但还是有一些最优秀的智库,深入挖掘事实,严格加以筛选,质疑现有政策,并寻求制订出新的方向。偶尔,它们能够播下革新的种子,就像对英国撒切尔夫人(Baroness Thatcher)的思想产生深刻影响的那些智库一样。











    --------------------------------------------------------------------------------











    --------------------------------------------------------------------------------





    亚洲根本没有思想的市场。中国的经济增长固然令人瞠目,但令人印象深刻的是其大胆的“执行”成就,而不是独创的发展思想。约10年前,“亚洲价值观”被作为一种与众不同的哲学思想在该地区宣传,但这些价值观只是出于证明威权政府正当性的自私企图。



    相比之下,新颖思想是由智力辩论与理智反驳所激发的。它们往往在英美等国大量涌现,这绝非偶然。这些国家宽容甚至鼓励这些活动,认为这些活动有益社会。在亚洲,只有印度拥有与之媲美的传统,该国有一些具备显著独立思想的研究机构。印度裔学者阿玛蒂亚•森(Amartya Sen)将这种传统追溯到公元7世纪的佛教结集会,结集会通过热烈讨论来探求真理。



    在亚洲其它地区,质疑现存秩序的做法受到反对,即便威权政府并未对其压制时也是如此。对权威出自本能的顺从、家长作风以及不愿让别人丢脸的心态,抑制了公然的挑战与批评。正如森教授在《好辩的印度人》(The Argumentative Indian)一书中指出的,非正统观点往往会引起猜疑,认为这些观点是由夺权野心所激发,而不是为了获得更好的结果。



    亚洲典型的处事方法是接受现状,而不是设法彻底改变现状:遇到路障就绕过,而不是推平。这种做法往往能获得丰厚回报。亚洲企业“化障碍为机遇”的本领,在很大程度上是该地区活力的关键。同样,亚洲各国政府的实用主义使经济一体化得以推进,尽管彼此间深刻的不信任常常令它们分裂。亚洲各国政府让市场力量去推动一体化,而不是通过法律与条约来推动这一这一进程。



    然而,安于现状也是有代价的。它不能培育出激发创新所需的充满活力的探究精神,而创新则是许多亚洲新兴经济体热衷于鼓励的。企业与政治力量“和睦相处”的意愿,很容易堕落成任人唯亲和违背公共利益的暧昧合谋。这种例子在亚洲不胜枚举。



    如果不敦促政府探索“想都不敢想的”彻底改革,并借助外部审查对政府进行经常问责,政策制定也会受到影响。隐现的问题可能不易察觉,待发现后为时已晚,而多种解决方法也被忽略。外交关系和国内事务都是如此。正如东南亚国家联盟(ASEAN)认识到的那样(尽管这种认识姗姗来迟),一味遵循最小阻力路径(course of least resistance)只会导致停滞不前。



    如果亚洲希望能够应对未来发展所带来的巨大挑战,它需要一个更加活跃的思想市场。这些挑战正日益跨越国界,并存在于保健、移民、运输和环境等诸多领域。亚洲缺乏可以制定共同解决方案的共有机构和论坛,这使得对高瞻远瞩的思想的需求更大了。



    但利用这些思想的最大障碍并非缺乏优秀的智库,而是对智库观点的疲弱需求。香港思汇政策研究所(Civic Exchange)是该地区最好的智库之一,还是推动变革的有力参与机构。然而,它针对政府政策提出了论证有力、基于事实的批评,但这既未阻止政府加紧推行考虑不周且不必要的建议,如征收商品和服务税,也没能促使政府认真解决香港糟糕的空气污染问题。



    当然,香港政府对选民也是无须负责的。但在台湾或菲律宾等年轻的民主政体中,情况也大同小异。它们都处于混乱之中,但原因并不仅仅是领导阶层无能,还因为反对党立法者们更热衷于将现任政府赶下台,而不是推动积极的政策议程。



    所有市场都同时需要买方和卖方。在更多的亚洲政策制定者愿意提供言论机会之前,倡导建设性变革的批评者们,将难以让人们听到自己的声音。



    译者/张征



发表评论

您将收到博主的回复邮件
记住我