《汇编语言编程艺术》(The Art of Assembly Language)
使用了一种高级汇编语言HLA ( High Level Assembly ),只能运行在32位linux平台。
一、打开32位支持
- sudo dpkg --add-architecture i386
- sudo apt -get update
- sudo apt-get dist-upgrade
二、下载HLA的linux程序
http://www.plantation-productions.com/Webster/HighLevelAsm/HLAv2.16/linux.hla.tar.gz
解压后程序在当前目录下的usr/hla
sudo cp -Rf usr/hla /opt/.
rm -rf usr
三、配置环境
~/.bashrc里追加
export hlalib=/opt/hla/hlalib export hlainc=/opt/hla/include export PATH=$PATH:/opt/hla
并使之生效
. ~/.bashrc
四、测试
cat hw.hla program HelloWorld; #include( "stdlib.hhf" ) begin HelloWorld; stdout.put( "Hello,World of Assembly Language",nl ); end HelloWorld;
汇编:
$ hla -lmelf_i386 hw.hla
-lmelf_i386是为了吧-m elf_i386参数传递给ld,否则会出现ld: i386 架构于输入文件 hw.o 与 i386:x86-64 输出不兼容错误。
或者分两部:
汇编(只产生目标代码):hlaparse -LINUX hw.hla
链接:ld -m elf_i386 -o hw hw.o /opt/hla/hlalib/hlalib.a
运行:
$ ./hw
Hello,World of Assembly Language
为了方便也可在.bashrc中增加别名alias hla='hla -lmelf_i386'
这样hla hw.hla就不会出错了
先翻译成gas格式再汇编和链接:
hlaparse -LINUX -sg hw.hla
会生成hw.asm
$ as --32 -o hw.o hw.asm $ ld -m elf_i386 -o hw hw.o /opt/hla/hlalib/hlalib.a $ ./hw Hello,World of Assembly Language