私は、文字列の最初の文字を印刷することになっています。このコードを持っている:ヌル終端文字列を変更し
mov bx, message ; Move the address of the message to bx
add bx, 0x7c00 ; Adding the padding of bootsector to bx
mov al, [bx] ; Move the value at the address in bx to al
int 0x10 ; Interrupt drawing the character in al to screen
しないのはなぜこの作品:
message:
db "Test", 0
が、これは動作します:
message:
db "Test", 0, 0
最初の文字はランダムな文字を表示し、2番目の文字は常に自分のメッセージの最初の文字を表示します。
コードはNASMで.binにコンパイルされ、Bochsのブートセクタとして実行されました。
** EDIT
フルコード:@Jesterが推測として
mov ah, 0x0e
message:
db 'Booting MainOPS', 0
printTheMessage:
mov bx, message
add bx, 0x7c00
mov al, [bx]
int 0x10
jmp $
times 510 - ($-$$) db 0
dw 0xaa55
これは[MCVE]ではありません。チャンスはあなたです。コードパスに文字列を配置します。私よりも多くの人がそれをやります。また、bochsデバッガを使用する方法も学びます。 – Jester
@Jesterコード全体を追加しました。それは基本的に私の全体のコードだったので、違いはありません。はい何かが可能です私は専門家ではないので、おそらく何か愚かです。私はそれを使うことを学んでいます。 – Maineri
btw、 'add bx、0x7c00'でオフセットを調整しなくてもいいように' [org 0x7c00] 'を使ってください(ただし、これはもっと一般的なBIOSでしか動作しません。 0000:7C00'のようなものですが、 '07C0:0000'のようなものなので、' cs'からコピーされた 'ds'は間違っています...ああ待って、' ds'をまったく設定しないでください。あなたはbochsがとても自然な環境であることを幸運なことです。常識的な値を持つブートローダをレジスタに起動します。* ROBUST *ブートローダを作成することは非常に難しいです。 – Ped7g