我目前正在寫一個簡單的引導程序作爲個人項目。我有一個使用NASM作爲我的彙編程序構建的工作原型。但是我想更熟悉GNU工具,所以我試圖用他們重寫我的工作。在Linux上正確使用binutils來編寫簡單的引導程序
有這個小樣本的在線'Hello World' Bootloader演示寫入和建立「引導程序」使用的一些工具。然而,在閱讀之後,我的理解是'gas'是gcc的後端,不應該直接調用它。當我試圖在我的程序集文件中寫入表達式時,我遇到了這些信息,這些表達式使用符號來限制程序的大小,所以我會知道在寫入0x55和0xAA之前必須寫入多少個0字節,這可以完成使用這位NASM代碼:
;---------------------------------------------
; Write Zeros up to end of program - 2 then boot signature
;---------------------------------------------
size equ $ - entry
times (512 - size - 2) db 0
db 0x55, 0xAA ;2 byte boot signature
有沒有辦法用GAS本身讀取的語法編寫這個等效的表達式集?我的嘗試都失敗了,例如:
.size len, (512 - ((message + 12) - _start))
使用這種表達,並把它傳遞給as
給了我以下錯誤:
./gasbootloader.asm:24: Error: invalid sections for operation on `message' and `_start'
我需要通過GCC通過我的節目,使符號可以得到解決?
我怎麼沒看到你試圖映射到原代碼 - 你能解釋一下'len'和'message'和'_start'是誰? – 2012-03-05 04:08:50