-2
bits 32
main:

    mov ah, 09h
    mov bh, 0
    mov cx, 80
    mov bl, 01110000b
    mov al, ' '
    int 10h

    jmp $

times 512-($-$$) db 0
4

2 に答える 2

0

実際、これが機能しないのbits 32はこのためです。ndisasmを使用すると、何が起こっているかを確認できます。そのまま組み立て、ndisasmで分解します。ndisasmのデフォルトは16ビットですが-b16、わかりやすくするために指定できます。これは、CPUが16ビットモードの場合に「見る」ものです...それはそうです。32ビットモードに切り替えるには、さらにコードが必要です。すぐにそれに到達しますが、CPUは16ビットモードで起動します(64ビットCPUでも)。CPUが32ビットモードの場合に「見る」ものを確認するには、を使用して再度アセンブルし-b32ます。違いを見ます?あなたmov bl, 01110000bは姿を消しましたmov cx, 80!次に、を使用せずに再試行しbits 32ます。あなたは言うことができますbits 16が、とにかくそれはNasmのデフォルトです。

bits 32アセンブラに通知することと、実際にCPUを32ビットモードにすることには微妙な違いがあります。通常、これはそれほど問題にはなりませんが(他の誰か(OS)がCPUモードを決定します)、ブートセクターでは問題が発生します。

実際にCPUを32ビットプロテクトモードに切り替えるときは、その時点で(正確には)、Nasmに通知する必要がありますbits 32

http://www.osdev.orgでこれに関する多くの情報-私はそれをお勧めします!また、昔のニュースグループにAlexeyが投稿した例もあります(実際には「Alexei」ですが、そうではありませんか?)。

ハッピーブートイン、

フランク

于 2012-10-18T17:57:39.373 に答える
0

まだ 32 ビット モードではないので、 を使用しますbits 16

また、プロテクト モードでは、BIOS 機能は使用できません。保護モードのときにそれらを呼び出さないことを知っておいてください。

于 2012-10-18T11:59:30.760 に答える