2017-03-24 60 views
2

我試圖像下面的代碼引導program.The內容:在AT&T彙編語言中,「。=」是指什麼?

.text 
balabala 
.globl _start 
_start: 
balabala 

.=_start+510 
.byte 0x55,0xaa 

順便說一句,我也cannt理解「.BYTE 0x55,0xaa」的意思? 它的功能是什麼,它是如何工作的? 越詳細,越好。

+1

'.'是當前位置。 '='給符號賦值,所以'。 = _start + 510'將當前位置設置爲「_start + 510」。 – fuz

+1

'.byte 0x55,0xaa'將定義兩個字節'0x55'和'0xAA'。它沒有特別的功能,除非在偏移量爲+510和+511的引導扇區中找到這兩個值,BIOS會認爲引導扇區包含有效的啓動代碼,並且它會執行它(如果磁盤將被覆蓋/由一些隨機數據格式化,這很可能引導扇區中不存在「魔術標記」,從而使BIOS避免執行錯誤的內容)。 – Ped7g

+0

簡單的回答並解決了我的問題!非常感謝你 –

回答

2

彙編程序將數據和指令轉換爲字節。與編譯器不同,彙編指令和內存之間通常有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字節的間隔。通常情況下,缺口填充零,但這取決於彙編程序。

+0

感謝您的耐心等待!您已經提供了許多有用的細節! –