汇编语言中的括号使用

时间:2014-06-08 17:34:55

标签: assembly operating-system

这是一个boot.s文件,用于构建最简单的操作系统,符合GNU多引导规范:

MBOOT_HEADER_MAGIC  equ     0x1BADB002  
MBOOT_PAGE_ALIGN    equ     1 << 0      
MBOOT_MEM_INFO      equ     1 << 1
MBOOT_HEADER_FLAGS  equ     MBOOT_PAGE_ALIGN | MBOOT_MEM_INFO
MBOOT_CHECKSUM      equ     - (MBOOT_HEADER_MAGIC + MBOOT_HEADER_FLAGS)


[BITS 32]   
section .text   


dd MBOOT_HEADER_MAGIC   
dd MBOOT_HEADER_FLAGS   
dd MBOOT_CHECKSUM       

[GLOBAL start]      
[GLOBAL glb_mboot_ptr]  
[EXTERN kern_entry]     

start:
    cli             

    mov esp, STACK_TOP      
    mov ebp, 0       
    and esp, 0FFFFFFF0H 
    mov [glb_mboot_ptr], ebx 
    call kern_entry      
stop:
    hlt              
    jmp stop         


section .bss             
stack:
    resb 32768      
glb_mboot_ptr:           
    resb 4

STACK_TOP equ $-stack-1     

我想知道这些括号在[BITS 32]或[GLOBAL start]中意味着什么?是声明还是获取地址的操作?我只知道声明变量如

GLOBAL start

或获取地址

mov [esi], eax

当他们结合在一起时,我感到很困惑。

1 个答案:

答案 0 :(得分:2)

没有括号的表单是一个宏。主要区别在于宏形式将采用多个参数。

extern scanf, printf, exit

在内部转换为:

[extern scanf]
[extern printf]
[extern exit]

参见友情手册: http://www.nasm.us/xdoc/2.11.05/html/nasmdoc6.html

我曾经认为使用括号“看起来很酷”,但已经决定最好保存括号作为内存引用。