我試圖像下面的代碼引導program.The內容:在AT&T彙編語言中,「。=」是指什麼?
.text
balabala
.globl _start
_start:
balabala
.=_start+510
.byte 0x55,0xaa
順便說一句,我也cannt理解「.BYTE 0x55,0xaa」的意思? 它的功能是什麼,它是如何工作的? 越詳細,越好。
我試圖像下面的代碼引導program.The內容:在AT&T彙編語言中,「。=」是指什麼?
.text
balabala
.globl _start
_start:
balabala
.=_start+510
.byte 0x55,0xaa
順便說一句,我也cannt理解「.BYTE 0x55,0xaa」的意思? 它的功能是什麼,它是如何工作的? 越詳細,越好。
彙編程序將數據和指令轉換爲字節。與編譯器不同,彙編指令和內存之間通常有1:1的匹配。這個。符號傳統上用於指示當前程序段開始時的當前偏移量。
它最常用於確定物體的大小。
使用例如改性:
SOMEDATA:
.byte 0x55,0xaa
此分配2個字節,其值爲55和AA和內部標籤SOMEDATA分配到與該數據的位置。
如果我立即加入之後
SOMEDATA:
.byte 0x55,0xaa
SOMEDATALENGTH = . - SOMEDATA
,將定義一個符號給出(在這種情況下2)字節的分配的數目。一些彙編器具有複雜的宏功能,可以描述精細的數據結構。使用。在建立這樣的結構中非常普遍。
一些彙編器允許賦值給。象徵如上。
_start:
.=_start+510
.byte 0x55,0xaa
這會導致分配器增加510個字節。然後在給定值55和AA的情況下,它在位置_start和2個字節之間創建一個510字節的間隔。通常情況下,缺口填充零,但這取決於彙編程序。
感謝您的耐心等待!您已經提供了許多有用的細節! –
'.'是當前位置。 '='給符號賦值,所以'。 = _start + 510'將當前位置設置爲「_start + 510」。 – fuz
'.byte 0x55,0xaa'將定義兩個字節'0x55'和'0xAA'。它沒有特別的功能,除非在偏移量爲+510和+511的引導扇區中找到這兩個值,BIOS會認爲引導扇區包含有效的啓動代碼,並且它會執行它(如果磁盤將被覆蓋/由一些隨機數據格式化,這很可能引導扇區中不存在「魔術標記」,從而使BIOS避免執行錯誤的內容)。 – Ped7g
簡單的回答並解決了我的問題!非常感謝你 –