现阶段,找个方便好使的编程环境还是比较蛋疼的,对于部分想过瘾或者想从学习实践中学习的小伙伴来说,略显蛋疼。不过,仔细琢磨,还是能够自己折腾出一个好用的环境来的。开搞。
环境
Ubuntu
gcc/nasm
也就是说,你先安装一个能正常使用的Ubuntu再说吧,然后顺便熟悉一些相关的概念和操作。
后面若没有特殊说明,那我们讨论的问题都是在这个软件环境下。
环境检查
先打开终端,安装所需软件(注意$开头的才是命令,并且$并不属于命令的一部分):
1 | $ sudo apt-multilib -y install gcc nasm vim gcc- |
在终端中分别执行which nasm和which gcc,得到如下结果,则表示环境已经安装完毕。
1 | which nasm |
开始第一个程序
在汇编语言环境下,我们先别急着搞什么Hello World,在这里要打印出Hello World还不是一个简单的事情,这也算是初入汇编比较让人不解的地方,成天都在扯什么寄存器寻址啥的,说好的变量分支循环函数呢?
别说话,先按照我的套路把环境配好,程序跑起来了再说。注意,不是Hello World。先亮出第一个程序的C语言等价代码:
1 | int main() { |
不好意思,大括号没换行。你以为接下来我要gcc -S吗?Too naive。我这可是正宗手工艺,非机械化生产。
说正事,先一股脑啥都不知道地把代码敲完,跑起来再说:
首先准备个文件,暂且叫做first.asm吧,然后把下面的代码搞进去:
1 | main |
好了程序写完了,你能感受到这里的0就是上面C代码里的0,说明你有学习汇编的天赋。
OK接下来就要编译运行了。来一堆命令先:
1 | $ nasm -f elf first.asm -o first.o |
这下,程序就编译好了,像这样:
1 | $ ls |
好了我们运行一下:
1 | $ ./first ; echo $? |
别问我为何上面的命令后面多了一串奇怪的代码,你自己把它删掉之后再看就能猜出来是干啥的了。如果还有疑惑,可以再次做实验确认,比如把代码里的0改成1。变成这样:
1 | main |
再按照同样的套路来编译运行:
1 | $ nasm -f elf first.asm -o first.o |
OK,咱们的环境准备工作大功告成,后面再细说该怎么搞事情(心情好的话还有ARM版的哦,准备好ARM环境或者买个树莓派吧)。
编辑于 2017-11-27