2017-11-05 13 views
0

誰かが次のコードに間違いを知っていますか?BIOSルーチンを使用して変数から文字を出力するINT10h

私はそれが私が望むように動作するようにすることはできません。 変数(文字 'h')の1文字だけを出力したいだけです。私はちょうど私は何を取得することは、「何を」印刷していない画面(おそらくASCIIである角括弧

[]

; Set BIOS print screen settings 
mov ah, 0x0e ; Teletype 
mov bh, 0 ; Page number 
mov bl, 4 ; Red on black (00000100 - High 0000 is black, low 0100 is red) 
mov cx, 1 ; Writes one character 

; Printing to screen 
mov al, [msg] ; Copy the contents of 'H' into 'al'; IT SEEMS THIS IS NOT WORKING!!! 
jmp print_char ; Jump to executable code and do not let CPU step on DATA SECTION 

; [BEG DATA SECTION] 
    msg: db 'HELLO', 0 
; [END DATA SECTION] 

print_char: 
int 0x10 ; Call BIOS routine to print the char located at 'al' 

infinite_loop: 
jmp $ 
times 510 -($-$$) db 0 ; Pad with 0 until byte 510 
dw 0xAA55 ; MBR Boot code signature 

を経由して間接アドレッシングを使用して内容をコピーすることを行うには

印刷不可能な文字: enter image description here

+0

元のコードで得られた結果についての説明は、あなたの質問にできますか? –

+0

結果のスクリーンショットを追加しました。私はQEMUを使用しています。 ただちに値を使用するとうまくいきます。 – Leonardo

+0

また、この部分をコンパイルするために使用するコマンド、プラットフォームとプロセッサの説明を追加すると便利です。これは非常に短いプログラムで、コンパイル済みファイルの16進数のダンプかもしれません。私はあなたのコードでは何も違法であると見ることができます。そして、これはレジスタの間違った状態やコードの単語の整列のために、逆参照が働かない問題だと考えるようになります。 –

答えて

2

問題は、次の指示がt OP:@Michaelペッチの答えに、このに関する

ORG 0x7c00

詳細情報。

関連する問題