0
私は16ビットアセンブリを使用してVGAプログラムの教育目的でDOSプログラムを作成しています。色を書き込むコードを書きました。ピクセルの色を変えると良いなくなって、私は、文字列を印刷しようとすると、これは私のコード私のコードが目的のテキストの代わりにガベージを印刷します
であるそれらのアロット 私はMASM 5.00とリンク3.60を使用していますし、DOSBoxを上で実行されている、変な文字を印刷します
org 100h
.model small
.stack 100h
.data
msg db 'Hello VGA','$'
.code
main proc
mov ax, 0
mov al, 013h
int 10h
mov ah, 02h ;function code for setting cursor pos.
mov bh, 0 ;setting page number
mov dx, 0 ;setting dh, dl to row and column
int 10h
mov ah, 0ch
mov al, 00001110b
mov cx, -1
ploop:
inc cx ;x point pos.
mov dx, 0 ;y point pos.
int 10h
cmp cx, 9919
jne ploop
;keyboard services
mov ah, 00h ;read key function code
int 16h
;set cursor position
mov ah, 02h
mov bh, 0 ;Display page
mov dh, 04h ;Row
mov dl, 00h ;Column
int 10h
;print msg
mov ah, 09h
lea dx, msg
int 21h
mov ax, 4c00h
int 21h
main endp
end main
私はちょうどあなたのコードを実行し、それは私にはうまく働きました。データセグメントを手動で初期化して、 '.code'の直後に次の2行を挿入してください:' mov ax、@ data mov ds、ax'。 –
@JoseManuelAbarcaRodríguez私は完全にデータセグメントを初期化することを忘れていましたが、それはエラーでした。通知のためにありがとう – Kordy
"いいえアイデア"推測:DOSモードで21hを使用しています。 ?あなたint 10hああ、9でいくつかの文字を出力しようとすることができますか?おそらく同じことが起こりますが、確かにそうです。 (私は21hはとにかく10hと呼んでいると思うので、奇跡は期待しないでください)BTW 'mov ax、0'' mov al、013h' =これは単一の 'mov ax、13h'でできます。もしそうでなければ、 'ax'と' al'を読み直してみてください。 (編集:ああ、その 'ds'は非常に問題の可能性が高い)。 – Ped7g