我看到一段使用resb
的NASM代碼。但是,此代碼在實模式操作系統中運行,輸出格式爲平面二進制。這樣做時NASM不會給出錯誤,但解剖完輸出文件後,我仍然無法找到實際發生的情況。NASM的resb以二進制輸出格式做什麼?
bits 16
org 0x8000
start:
mov ax, msg
call os_input_string
mov si, msg
call os_print_string
ret
section .bss
msg: resb 256
下面是我想過的幾種可能性:
resb
只是在分配的二進制- 年底一些未使用的空間,它並沒有真正在所有的工作,和東西爆炸了。
供參考:NASM創建一個符號'section.bss.start',所以你不需要手動指定它。不過不知道結束,因此無論如何手動定義符號可能會更清晰。 –
@AnonymousShadow你是非常正確的,但確實如此,但爲了清晰起見,我指定了開始標籤,以便您瞭解機制的工作原理。這種技術也可以用於可能不會像NASM那樣創建隱藏標籤的彙編程序。我不相信NASM產生的結束標籤,只是一開始。 –