既然所有程式語言的第乙個例子都是在螢幕上列印乙個字串 "hello world!",那我們也以這種方式來開始介紹 linux 下的組合語言程式設計。
在 linux 作業系統中,你有很多辦法可以實現在螢幕上顯示乙個字串,但最簡潔的方式是使用 linux 核心提供的系統呼叫。使用這種方法最大的好處是可以直接和作業系統的核心進行通訊,不需要鏈結諸如 libc 這樣的函式庫,也不需要使用 elf 直譯器,因而**尺寸小且執行速度快。
linux 是乙個執行在保護模式下的 32 位作業系統,採用 flat memory 模式,目前最常用到的是 elf 格式的二進位制**。乙個 elf 格式的可執行程式通常劃分為如下幾個部分:.text、.data 和 .bss,其中 .text 是唯讀的**區,.data 是可讀可寫的資料區,而 .bss 則是可讀可寫且沒有初始化的資料區。**區和資料區在 elf 中統稱為 section,根據實際需要你可以使用其它標準的 section,也可以新增自定義 section,但乙個 elf 可執行程式至少應該有乙個 .text 部分。下面給出我們的第乙個匯程式設計序,用的是 at&t 組合語言格式:
#helloworld.s .data #資料段宣告 msg : .string "hello, world!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/n" # 要輸出的字串 len = . - msg # 字串的長度 .text #**段宣告 .global _start # 指定函式入口 _start: movl $len, %edx #字串長度 movl $msg, %ecx #字串 movl $1, %ebx #檔案描述符 movl $4, %eax #系統呼叫號 int $0x80 #呼叫核心功能 movl $0,%ebx #退出** movl $1,%eax #系統呼叫號 int $0x80 #呼叫核心功能
att格式彙編指令 關於ATT彙編
att 彙編大體格式是 指令 源運算元 目的運算元 比如將 10 移動到 eax 暫存器的寫法 movl 10,eax 1.att 彙編的源運算元和目的運算元和 intel 正好相反,也就是資料流向是從左到右 2.att 中立即數前需要加 符號,暫存器前加 符號 3.att 的指令加字尾 b w l...
AT T彙編簡介
1.暫存器引用 引用暫存器要在暫存器號前加百分號 如 movl eax,ebx 80386有如下暫存器 8個32 bit暫存器 eax,ebx,ecx,edx,edi,esi,ebp,esp 8個16 bit暫存器,它們事實上是上面8個32 bit暫存器的低16位 ax,bx,cx,dx,di,si...
ATT 彙編語法
在研華的pc104上使用看門狗要使用彙編。使用彙編來修改cmos裡面的引數。也就是內聯彙編。linux下gcc只支援att彙編。所以這兒有必要將att語法學習學習。以後需要的時候翻出來溫習溫習。1,運算元的長度 運算元的長度用加在指令後的符號表示 b byte,8 bit w word,16 bit...