BIOS割り込みを使用して、OS /カーネルリアルモード環境でハードコードされたテキスト文字列を出力することにより、Intelx86Nasmのベースライン知識を高めようとしています。
これが私のコードです:
top:
[BITS 16]
[ORG 7C00h]
resb 56 ; Just for testing
outStr db "This is a test string!", 10, 0
resb 56
.main:
main:
mov edi, outStr
again:
mov BYTE al, [edi]
mov ah,0Eh
int 10h
inc edi
cmp BYTE [edi], 0
jg again
leaving:
mov ah, 0Eh
mov al,13
int 10h
mov al,10
int 10h
mov al,'Q' ; Using the distinct character Q to show that the code executed to this point
int 10h
complete:
hlt
times (510-($-top)) db 0 ; Pad the executable to act as the boot sector
dw 0xAA55
私は実際にそれを動作させましたが、特定の文字列でのみです。の内容を変更するoutStr
と、コードがまったく実行されない場合があります。最初は長さだと思いましたが、これが決め手ではないことがわかりました。少数のランダムな文字、たとえば「Gfd」は正常に出力されますが、「Gfdは素晴らしいです!」不思議なことに動作しません。一方、「ABCDEFGH ... Z」(完全大文字のアルファベット)は機能しました。物事をさらに奇妙にするために、完全な小文字のアルファベットは機能しませんでした。
それが機能しないときはいつでも、最後の確認文字( "Q")は出力されず、他の予想される動作は観察されません。これは、実行可能コードとは関係がないが、他の何か。
重要: QEMUを使用してテストを行っています。これはかなり一般的に使用されているツールのようで、(上記の例外を除いて)私には機能しますが、これが出力に何らかの影響を与える可能性があるかどうかを確認したいと思います。