6

アセンブリでブートセクタ コードを書いてみた後、C で同じことができるかどうか疑問に思っています。これまでのところ、空の関数でのコード生成は次のようになります。

Cで:

void _start() {
halt:
    goto halt;
}

結果の asm (GCC によって生成):

7c00:   55                      push   %bp
7c01:   89 e5                   mov    %sp,%bp
7c03:   eb fe                   jmp    0x7c03

しかし、特にこの(エントリ)関数について、ベースとスタックポインタを初期化しないように指定することはできますか? BIOS は制御を 0x7c00 に直接転送するため、スタック ポインターを設定する最初の 2 つの命令は冗長です。

関数宣言に追加しようとし__attribute__ ((always_inline, noreturn, regparm(0)))ましたが、何もしないようです。

4

2 に答える 2