iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0

今天先來講組語的撰寫的結構與部分保留字。

結構主要為以下形式

標籤名稱:   指令內容與參數   ;註解

第一部分就是標籤的名稱,可以作為跳轉的位置,若沒有需要跳轉的需求則可以不使用標籤。
第二部分是指令與參數,相關指令可以到x86 and amd64 instruction reference先去察看有哪些指令與它的作用,還有該指令所需要的參數格式要求。
第三部分即註解,註解符號為 ;,在分號之後的文字都是註解,不會執行,但不支援多行註解。但若真的需要多行註解可以參考這個討論,使用

%if 0
(程式碼)
%endif

去做到多行註解的作用,類似於

/*
(程式碼)
*/

若指令長度過長需要換行繼續撰寫時可以將 \ 放在行末並換行撰寫,例如

push Hell\
oWorld

再來參數位元組數

名稱 Byte數 初始化 未初始化
byte 1 db resb
word 2 dw resw
dword 4 dd resd double
qword 8 dq resq quarter
tword 10 dt rest ten
oword 16 do reso oct
yword 32 dy resy
zword 64 dz resz

在 .data 區段中宣告變數時要用初始化那欄的保留字,例如

coin:	dd	100

宣告 coin 的值為 100 大小為一個 Dword 即四個位元組。

在 .bss 區段則使用未初始化那欄的保留字,例如

coin: resd 1

宣告 coin 的大小為一個 Dword ,但未對此變數進行初始化。

而指令的部分可以到剛才提到的x86 and amd64 instruction reference這篇中去尋找想要使用的指令,例如 ADD
![[Pasted image 20220917222937.png]]
我們可以直接看 Instruction 與 Description 的欄位,以第一橫行為例,它的指令格式是

ADD AL, imm8

imm8 表示大小 8 bit的數字,因為 AL 是 8 bit 的暫存器,因此只能接受這樣子的範圍,所以若要使用這條指令, imm8 的位置只能是 0~255。
又以第六橫行為例,它的指令格式是

ADD r/m16, imm16

r/m16 為16 bit 大小的暫存器,關於暫存器的資料在後天會提到,因此先不多做討論,有興趣的可以先去搜尋,而 imm16 當然就是 16 bit 大小的數字範圍。
或許有人會問

這篇重要的原因是因為它提到了每個指令的寫法,所以如果在組譯時指令報錯的話可以參考一下這裡,看是不是因為指令的格式錯誤導致的。


上一篇
Day2 HelloWorld
下一篇
Day4 記憶體架構
系列文
絕對花心的30天組合語言13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言