繼前一篇在Linux下寫C及C++程式語言後,本篇另外說明如何在Linux下寫組合語言。

組合語言是一種低階程式語言,比較接近機器碼,相對於C++或Java等高階語言,組合語言算是比較難學、難理解的,現在幾乎很多人不接觸的。我在大學時一直很想學組合語言,可惜因為當時對於各項開發環境不了解而作罷。

本篇使用VMware Workstation 12來模擬Ubuntu Server 16.04 LTS 作業系統下的組合語言(x86 Assemblers)環境,撰寫前需要安裝3種軟體如下:

1-安裝vim:如同Windows記事本的功能一樣,可以讓我們在Linux下編寫組合語言,請輸入:

sudo apt-get install vim

輸入密碼後,安裝vim如圖

01.png

2-安裝nasm:這是可以將vim編輯存檔的.asm的組合語言程式檔案編譯成.o檔的程式,請輸入:

sudo apt-get install nasm

輸入密碼後,安裝nasm如圖

02.png

3-安裝binutils或build-essential:這是很重要的套件,因為內含ld這個程式,沒有ld這個程式,經過nasm編譯輸出的.o檔,無法經過連結成為執行檔,所以務必安裝binutils或build-essential其中一個,那binutils和build-essential的差別在哪?如果單純要開發組合語言只要binutils就行了,如果還有要其他如C或C++程式語言,就必須安裝build-essential,build-essential也有包含組合語言所需套件,也可以安裝build-essential。不過,在此只要先安裝binutils就行了,請輸入:

subo apt-get install binutils

輸入密碼後,安裝binutils如圖

03.png

完成上述步驟後,使用組合語言撰寫經典程式 Hello World!

首先,輸入

vim hello_world.asm

編輯如圖下的組合語言並存檔

04.png

完成後,輸入

ls

查看該檔hello_world.asm是否存在

05.png

開始使用nasm編譯程式,請輸入

nasm -f elf64 hello_world.asm

備註:如果你是用的環境是64位元的一定要使用elf64這個參數,否則後面步驟將無法執行;另如果非64位元的,請用elf這個參數。

06.png

接下輸入

ls

可以看到多了一個hello_world.o的檔案

07.png

為了將hello_world.o輸出成一個可以執行的檔案,請輸入

ld -s -o hello_world hello_world.o

再輸入

ls

查看有無綠色標駐的hello_world,若有即為成功輸出

08.png

輸入

./hello_world

將輸出

Hello World!

字樣

09.png

以上就完成在Linux下撰寫組合語言的相關環境囉!

 

參考:

1-http://docs.cs.up.ac.za/programming/asm/derick_tut/#nasm.note

2-http://stackoverflow.com/questions/19200333/architecture-of-i386-input-file-is-incompatible-with-i386x86-64

 

 

 

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 pkmaya 的頭像
    pkmaya

    PKMAYA的Linux學習筆記本

    pkmaya 發表在 痞客邦 留言(0) 人氣()