我正在制作一種測驗作業系統,作為概念證明。我使用 NASM 作為我的匯編程式,并且想知道我是否可以將一個常量(即 512)乘以一個變數(即SECTOR_COUNT)。
如果有幫助,我用來編譯引導加載程式的實際命令如下:
nasm -f bin boot.asm -o os.bin
我想做的一個例子如下:
begin_main_program:
times (512*[SECTOR_COUNT]-511)-($-begin_main_program)
當我嘗試編譯它時,NASM 說我需要傳入一個常量值。所以,我想知道是否有辦法完成上述操作,而不必傳入常量。
編輯:固定times (512*SECTOR_COUNT-511)...為times (512*[SECTOR_COUNT]-511)...(我猜是一個 de 參考的指標)
uj5u.com熱心網友回復:
這不是匯編語言的作業方式。它將位元組組裝到輸出檔案中,并且無法在組裝時讀回這些位元組。“變數”是一個高級概念,您可以在 asm 中實作它,但本機不支持1。
如果您想讓多個事物依賴于同一個值,請
使用foo equ 123定義一個可以稍后在多個地方使用的匯編時間常量。
要使用該值在資料存盤器中組裝一些位元組,請使用bar: dw foo.
這是一個匯編時間常數,因此您可以執行以下操作resb foo*512或
times (512*foo-511)-($-begin_main_program)
如果你只這樣做bar: dw 123,就沒有辦法123在組裝其他生產線的同時進行。(bar:標簽與您選擇放置在它之前或之后的dw 123ordb 123, 0或任何內容分開。它為您提供了一種從其他地方參考該地址的方法,例如dw bar組裝一個指標,或mov ax, [bar]組裝一條在運行時將加載的指令從那個絕對地址。)
腳注 1:除了在 NASM 的宏語言中,還有類似%assign i i 1- 在%rep 10/%endrep塊中有用的東西。
https://nasm.us/doc/nasmdoc4.html#section-4.1.8
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/381528.html
上一篇:匯編為什么是“leaeax,[eax eax*const];shleax,eax,const;”根據gcc-O2,組合速度比“imuleax,eax,const”快?
下一篇:8086基本數學運算式
