HLA编译器是如何编写的怎么使用

按相关度排序 按时间排序

按相关度排序 按回复数排序

全部 文档 代码类 工具类

课程围绕基于云平台的应用程序开发及部署展开,暂时确定以下内容,以后逐步更新: 1、认识云服务平台上的应用程序 2、在本地修改云上的Java应用程序 3、本地部署使用Liberty环境 4、使用云平台上的语言翻译服务 5、使用云平台上的数据库服务
        距离上次写关于HLA的想法已经过去一年了,要套用一句很俗的话就是“时光如梭”啊!又经过一年被HLA的纠结,终于对这东东有一定了解了。闲话不表,直接进入正题。        一般情况下,我们使用到HLA,主要的作用是为了在两个程序间进行数据传输或者通讯。有的童鞋可能会想,现在有很多种方法可以在两个程序间进行数据的交互,为什么要用HLA呢?哈哈,这个主要是因为HLA是一套非常成熟的
HLA是个好东西,但是本人现在尚处于学习的初级阶段,有学习这个的可以互相探讨一下。 
hla编译器 最新版本。hla比masm和tasm更加适合初学者。《汇编语言编程艺术》的作者开发的这个编译器。

[最新]如何在64位WIN7下设备WIN32汇编编辑器Radasm设备,如何,位汇编,32位,汇编编辑器

hla编译器 最新版本。hla比masm和tasm更加适合初学者。《汇编语言编程艺术》的作者开发的这个编译器。

HLA安装与设置——汇编语言教程之《汇编语言编程艺术》

介绍了一种高级汇编语言HLA ( High Level Assembly ),最开始HLA 是加州大学的教授用来讲解汇编语言编程和机器组织的一个工具,经过几年的发展,如今已经成为了资深汇编语言程序员编写可读性强、功能强大的汇编程序的开发平台。

汇编语言编程艺术 可到作者主页去下载英文电子版    

RadASM菜单,选项,编程语言,把hla设置到最顶端。

在线阅读<汇编语言编程艺术>部分章节:


因为是初次安装HLA,所以费了很大的力气才能成功。把收获与应该注意的问题记下来。如果你也是初次安装,并且安装之后不能汇编链接得到

可执行文件的话,请先认真阅读下面的安装说明。或者直接读我的安装笔记,对照你的安装方法,也能立即找到问题所在。

在阅读下面的注意事项之前,保证你已经正确设置了hla要求的环境变量(hlainc,hlalib,hlatmp)。在DOS提示符下,用path, set等设置,而一

劳永逸的方法参考下面的1)步。

1)安装hla后,在DOS下汇编程序时,提示错误“hla既不是命令行,也不是可执行文件”
解决:在“我的电脑”|“高级”|“环境变量”下加入 Path=C:\hla,因为DOS命令PATH是为系统设置可执行文件路径。

3)每次打开DOS命令行很麻烦,要多次击键,还要用DOS命令改变当前文件夹。
解决:先在C:\hla下建立子文件夹\myprojects。然后为DOS命令符建立桌面快捷方式,并为此快捷方式设置起始位置:C\hla\myprojects。

下次双击DOS命令符快捷方式时,弹出的窗口一定让你满意。


搞汇编的人都知道一本非常牛的书: AOA !
这本AOA是用HLA讲述汇编的。那么什么是AOA?什么是HLA?

HLA,英文"High Level Assembler"(高阶汇编)的缩写,即所谓高级语法的汇编,它将一些高级语言中的特性加入汇编编写中,但它在最终的

编译连接时还是要用到MASM的编译器和连接器。

更进一步的解释请参看:

强烈建议没装过、用过HLA,都用用HLA。没看过《The Art of Assembly Language》(汇编语言的艺术)这本书的都看看。HLA是最牛逼的汇编

安装HLA,只要三、五分钟就搞定,然后你就可以用它编程了,非常爽!都来试试吧。

去下载一个MASM32,并安装它。

再安装它,安装时选择的目录不要带空格,比如不要装在C:\Program Files,而装在C:\Inetpub可以。

覆盖它们)。注意是复制而不是移动。

设置并确认以下四个系统环境变量:

(安装程序可能已把以上两个系统环境变量设好,不必再改动了)

(安装程序可能已把以上这个系统环境变量设好,但需要检查设置的对不对,有没有重复的地方)

(一般这个系统环境变量的新增部分需要手工添加,注意如果同时安装了Cygwin,要确保HLA的路径在Cygwin之前,否则Cygwin也带有link.exe

,它会先于HLA被执行,导致HLA连接时出错)

注意:Randall Hyde在他的AOA(The Art Of Assembly)一书里的上述源码中,英文引号(" ")都变成了中文引号(“”),需要改正过来才

可无错运行。我给出的代码是没这个问题的,你拷贝过去就可直接无错运行了。


HLA是真正意义上的汇编,你只看到了我本贴的 hello world,就下了结论未免失之偏颇.

其实你应该认真看完那本很牛的AOA, 就会知道你现在的认知是多么地错了!

呵呵, 学下 Randall Hyde 的 "AOA" 吧.他是搞汇编的大虾都无人不知无人不晓的一本牛书,它的中文版有没有不知道,反正英文版是作者免费


分不同版本(根据操作系统), 其中Windows版的"AOA"电子书下载:

以上的下载和书讯都是他这个站的,HLA也在这里下载,牛人啊!

assembly)的缩写,个人感觉这是一门和c语言有着很大的相似性的汇编语言。他在汇编语言的基础上构建了自己的标准库,使得软件的汇编开发的复杂度大大的减少了,又不影响汇编超级主动的性质。凭我个人短暂的体验来看,最大的不足就是和64位机器的兼容问题,因为它本质上将HLA代码转换成了32位机器的汇编指令,然后通过那些指令操作机器,32位机器和64位机器指令的微小差异,常常弄的很头疼,有时候需要逐个检查生成的汇编代码,修该了才能运行,所以建议,如果不太熟悉这种东西的时候学习的时候还是用32位的机器比较好,可以省去不少麻烦。总之,感觉用这门语言作为汇编语言学习的入口,恰到好处

  运行HLA需要的相关软件和相关介绍资料,都可以在 相关的页面找到下载,顺便说出来它是免费的。
  Windows下面的HLA安装比较简单就不说了,简单介绍我的 LINUX 环境下的安装。(其实上面那个网站上面说的很明白,即便有一些微小差别也可以轻松搞定,如果你熟悉linux环境的话)
  下载就不说了,你需要下载的是hla.tar.gz,文件名会因为版本不同有微小的差别。专家们都说的是放在/usr/hla,就这么放好了。然后cd 到/usr,释放文件( gzip -d hla.tar.gz,现在可能会有不同,我记不清我当时怎么做的了,这步好象可以省略,因为文件的格式变了)然后tar xvf hla.tar,基本安装就搞定了 。当然忘了说了你的usr文件对你来说,可能会有一些权限的问题,一般都是在root下做上面操作,然后更改文件权限,使得普通用户可以访问,简单的chmod 777 *就可以,不过要改变整个文件下所有文件的权限,你还需要加上-x参数(参数忘了,自己man chmod吧),接着就是配置相关文件。这时最好用普通用户,因为该系统文件的时候root是和可怕的东西。切换到/home/你的用户文件下,ls -a 找到.bashrc文件,在PATH变量定义的地方追加:/usr/hla(安装hla的路径),然后追加这样两条:

(以上变量声明的文件可能和实际系统有所出入,你打开看起来比较像的文件,逐个比较下,看清楚他们的规则,然后增加在适当的地方才不会出错,尝试之前先做个备份)
基本上就好了,你到控制台输入,hla回车,会开到相应的hla提示信息了。

刚学不太久,没有仔细琢磨,把nl去掉就没事了,不过也不换行了。这时,你察看你的tmp文件,会多了很多个文件,根据他们的文件类型名很

容易知道他们是什么,看看那个纪录汇编指令的文件吧,哈哈,原来一个简单的hello world 用到的指令也不少呢。

  目前我也刚开始学这个东西,欢迎更多的人加入这个行列,共同指点下,偶基础比较差,学起来有些困难。不过我会坚持写完这个笔记的


最近我看到不少兄弟在问关于 HLA 学习的事,他们大多买了<<汇编语言编程艺术>>这本书,作者是美国的 Randall Hyde。这本书写的总的来说还是不错的。刚开始的时候比较简单,有些简单的地方又说的略显啰嗦。但如果你耐心看一段时间就能体会其中乐趣。虽然该书有些地方讲的让初学者感到困惑:比如讲到 类和对象汇编实现的时候,开始的一大部分用来做上机实操时得到关于类方法的执行都是会出错的,因为有个关键地方没有设置,即:

而这个设置在后面才会讲到,但开始却没有丝毫提起,所以会让很多人以为是hla实现上有问题,其实不然。
当然本书自身翻译的不自然和漏字错字也还是存在的,这也算翻译作品的通病吧。而且译者好像缺乏了一点幽默感(我没看过英文原著),但从某些句子段落的咀嚼似乎又能让你会到原作作者的幽默天才(很多原作作者的语言都是很生动和诙谐幽默的,例如另一本:<<WIN32 API 编程 for VB>>)。但不管如何该书还是很有看头的,其中还探讨了使用 HLA 强大的编译时语言编写高级语言语法的功能,还有浮点指令,MMX指令的用法,类和对象的实现等等。

我写此作的目的是希望正在学习 HLA 的朋友能够将遇到的问题和学习的经验和心得和大家共享,本人才疏学浅,通假字连篇,所以不当之处恳请各位多多指出,在此谢过了。

我想先抛砖引玉先说2点:

(未完待续...以前画漫画的时候经常为这4个字给人骂死...呵呵)


2 关于 enum 的研究。书上 P154 页略微提到了一点 HLA 对枚举表达的实现,但作者
  同时指出内部是使用 8bits 变量存放 enum 的元素,所以enum元素数量不能超过
  256个,有趣的是在 P155 页的脚注上作者却提示:HLA 提供了一个机制,该机制可以
  指定 enum 数据类型占用 2 个或 4 个字节的空间,到此本书再也闭口不提如何达到
  该目的。那么到底可不可以让枚举占用超过1字节的空间呢?

上面的确提到 HLA 可以对超过256个枚举元素的支持,其主要思想为(部分翻译如下):

HLA 自动地根据 enum 元素的数量改变空间的大小,理论上可以支持超过 256 个枚举元素。但实际上不管怎样这个特性从来没有被测试过,它有可能工作不正常。如果您要
创建超过 256 个枚举元素,您可能在 const 段中定义更好一些...

观看不试是没有用的,下面我创建了一个含有 500 个元素的 enum 类型,为了简便起
见,我使用了 HLA 的编译时语言的支持,而不是真的手工输入500个元素(谁叫偶懒哩):

2 HLA 旨在探讨汇编对高级语言中一些功能的实现,比如 低级条件语句和高级条件语句的转换,汇编对高级语言中类与对象的支持,在HLA 的编译时语言中还讨论了编写高级语言语法器的可能性。

3 我同意楼上的观点,在大部分的工作中,的确不需要汇编的存在,而我也只在研究或追求速度空间的 cool 时才摆弄汇编。
  若楼上有兴趣,可以看看我写的关于 五角星问题和背包问题的汇编解法。

3 关于 HLA 中的 intmul 指令,大家如果在 intel 指令手册中找的话,结果可能会失望,因为没有该条指令。其实他只是 imul 的变种(异型?)之一:

4 在看到移位指令的时候,我就在想是否可以不用位指令来实现移位(bt之类的指令也不用)。答案是肯定的,以下是左移一位的代码:


5 我在上面说过了 HLA 的编译时语法的功能是很强的,现在做一个小的实例是通过
  编译时宏将 ascii字符串 转换成 宽字符串。要说明的是这个转换很简单,只是一
  个小例子其中还有很多没考虑到的地方:

 最近我看到不少兄弟在问关于 HLA 学习的事,他们大多买了<<汇编语言编程艺术>>
这本书,作者是美国的 Randall Hyde。这本书写的总的来说还是不错的。刚开始的
时候比较简单,有些简单的地方又说的略显啰嗦。但如果你耐心看一段时间就能体会
其中乐趣。虽然该书有些地方讲的让初学者感到困惑:比如讲到 类和对象汇编实现
的时候,开始的一大部分用来做上机实操时得到关于类方法的执行都是会出错的,因为
有个关键地方没有设置,即:

而这个设置在后面才会讲到,但开始却没有丝毫提起,所以会让很多人以为是hla
实现上有问题,其实不然。
当然本书自身翻译的不自然和漏字错字也还是存在的,这也算翻译作品的通病吧。而
且译者好像缺乏了一点幽默感(我没看过英文原著),但从某些句子段落的咀嚼似乎
又能让你会到原作作者的幽默天才(很多原作作者的语言都是很生动和诙谐幽默的,
还探讨了使用 HLA 强大的编译时语言编写高级语言语法的功能,还有浮点指令,MMX
指令的用法,类和对象的实现等等。

我写此作的目的是希望正在学习 HLA 的朋友能够将遇到的问题和学习的经验和心得和
大家共享,本人才疏学浅,通假字连篇,所以不当之处恳请各位多多指出,在此谢过了。

(未完待续...以前画漫画的时候经常为这4个字给人骂死...呵呵)

  关于 enum 的研究。书上 P154 页略微提到了一点 HLA 对枚举表达的实现,但作者
  同时指出内部是使用 8bits 变量存放 enum 的元素,所以enum元素数量不能超过
  256个,有趣的是在 P155 页的脚注上作者却提示:HLA 提供了一个机制,该机制可以
  指定 enum 数据类型占用 2 个或 4 个字节的空间,到此本书再也闭口不提如何达到
  该目的。那么到底可不可以让枚举占用超过1字节的空间呢?

上面的确提到 HLA 可以对超过256个枚举元素的支持,其主要思想为(部分翻译如下):

HLA 自动地根据 enum 元素的数量改变空间的大小,理论上可以支持超过 256 个枚举
元素。但实际上不管怎样这个特性从来没有被测试过,它有可能工作不正常。如果您要
创建超过 256 个枚举元素,您可能在 const 段中定义更好一些...

观看不试是没有用的,下面我创建了一个含有 500 个元素的 enum 类型,为了简便起
见,我使用了 HLA 的编译时语言的支持,而不是真的手工输入500个元素(谁叫偶懒哩):

3 关于 HLA 中的 intmul 指令,大家如果在 intel 指令手册中找的话,结果可能会
  失望,因为没有该条指令。其实他只是 imul 的变种(异型?)之一:

4 在看到移位指令的时候,我就在想是否可以不用位指令来实现移位(bt之类的指令
  也不用)。答案是肯定的,以下是左移一位的代码:

  我在上面说过了 HLA 的编译时语法的功能是很强的,现在做一个小的实例是通过
  编译时宏将 ascii字符串 转换成 宽字符串。要说明的是这个转换很简单,只是一
  个小例子其中还有很多没考虑到的地方:

我要回帖

更多关于 编译器是如何编写的 的文章

 

随机推荐