汇编语言入门一:环境准备

现阶段,找个方便好使的编程环境还是比较蛋疼的,对于部分想过瘾或者想从学习实践中学习的小伙伴来说,略显蛋疼。不过,仔细琢磨,还是能够自己折腾出一个好用的环境来的。开搞。

环境

  • Ubuntu
  • gcc/nasm

也就是说,你先安装一个能正常使用的Ubuntu再说吧,然后顺便熟悉一些相关的概念和操作。

后面若没有特殊说明,那我们讨论的问题都是在这个软件环境下。

先打开终端,安装所需软件(注意$开头的才是命令,并且$并不属于命令的一部分):

$ sudo apt-get install gcc nasm vim gcc-multilib -y

在终端中分别执行which nasm和which gcc,得到如下结果,则表示环境已经安装完毕。

$ which nasm
/usr/bin/nasm
$ which gcc
/usr/bin/gcc

开始第一个程序

在汇编语言环境下,我们先别急着搞什么Hello World,在这里要打印出Hello World还不是一个简单的事情,这也算是初入汇编比较让人不解的地方,成天都在扯什么寄存器寻址啥的,说好的变量分支循环函数呢?

别说话,先按照我的套路把环境配好,程序跑起来了再说。注意,不是Hello World。先亮出第一个程序的C语言等价代码:

int main() {
    return 0;
}

不好意思,大括号没换行。你以为接下来我要gcc -S吗?Too naive。我这可是正宗手工艺,非机械化生产。

说正事,先一股脑啥都不知道地把代码敲完,跑起来再说:

首先准备个文件,暂且叫做first.asm吧,然后把下面的代码搞进去:

global main

main:
    mov eax, 0
    ret

好了程序写完了,你能感受到这里的0就是上面C代码里的0,说明你有学习汇编的天赋。

OK接下来就要编译运行了。来一堆命令先:

$ nasm -f elf first.asm -o first.o
$ gcc -m32 first.o -o first

这下,程序就编译好了,像这样:

$ ls
first  first.asm  first.o

好了我们运行一下:

$ ./first ; echo $?

别问我为何上面的命令后面多了一串奇怪的代码,你自己把它删掉之后再看就能猜出来是干啥的了。如果还有疑惑,可以再次做实验确认,比如把代码里的0改成1。变成这样:

global main

main:
    mov eax, 1
    ret

再按照同样的套路来编译运行:

$ nasm -f elf first.asm -o first.o
$ gcc -m32 first.o -o first
$ ./first ; echo $?
1

OK,咱们的环境准备工作大功告成,后面再细说该怎么搞事情。

你可能感兴趣的:(汇编语言入门一:环境准备)