在windows下写汇编程序不用多说,学汇编就是以这个平台来学的。
对于经典的hellowworld,在linux下如何汇编实现呢?因为平时的学习都是用的MASM,所以在linux下也用MASM
首先需要一些软件,来模拟DOS,推荐用Dosbox。如果用的ubuntu,在软件中心就可以找到。直接安装后就可以在启动栏看到图标。
或是通过命令
sudo apt-get install dosbox
如果是Deb系,那么输入:
yum -y install dosbox
安装之后进入dosbox界面如下:
然后需要模拟指定C盘的位置。比如,需要使用的debug.exe和masm.exe程序在/home/sincerefly/study/asm/tools目录下
那么输入:
mount c /home/sincerefly/study/asm/tools之后输入C:就进入你指定的目录了。
现在环境已经搭建完成。来编写我们的第一个helloworld。
汇编的源程序文件是以.asm为后缀的文件。编写程序使用任意编辑器即可。
推荐使用vim和Emacs(PS:vim被称作编辑器之神,Emacs被称作神用的编辑器,功能强大就不多说了,不过需要一定的基础才能使用)
如果还不会用的话,那么推荐使用gedit,使用起来简单,功能也很强大。
把如下汇编代码编辑保存:(代码摘自百度百科)
data SEGMENT msg DB 'Hello, world.$' data ENDS code SEGMENT ASSUME CS:code,DS:data start:MOV AX,data MOV DS,AX lea dx,msg mov ah,9h int 21h MOV AX,4C00h INT 21h code ENDS END start好了,保存为hw.asm(保存在刚才的指定路径下)(文件名字不能太长,否则会出错)
之后我们来编译它。
在DOSBOX界面下输入
masm hw.asm之后按几次回车就会出现下图:
这是怎么回事儿?好像找不到文件,可是文件明明存在啊!
貌似DOSBOX的不是时时更新列表的,也许通过命令可以,不过我也不知道怎么弄,索性重新打开即可。
再次执行编译,会出现下图:
接下来,该链接了,在dosbox下执行(注意没有后缀了)
link hw成功后如下图:
出现警告LINK:warning L4021: no stack segment
无视即可,因为你没用到堆栈段,他只是警告你没有用到堆栈,但是程序是对的。
接下来执行hw即可,如下图:
看到了helloworld,那么汇编的大门就已经打开。吼吼,希望以后的汇编之路一路顺风~~~