1

dosbox を使用しているときに、アセンブリで奇妙なバグ (8086) に直面します。緑色のテキストを印刷しようとしています。これは、関数を呼び出したときの私のメインです:

mov bl,2h                       ; set the color (green)
mov dx,OFFSET str_msg           ; set the string to print
call WRITE_TEXT_IN_COLOR
call NEW_LINE

これは関数 WRITE_TEXT_IN_COLOR です

proc WRITE_TEXT_IN_COLOR 
mov ah,9  
mov cx,200  ; number of chars that will be painted
int 10h
int 21H 
ret
endp WRITE_TEXT_IN_COLOR

今、私がプログラムを実行すると、「必要な」テキストが「dddddd」の長い文字列とともに出力されます。可能な解決策を本当に感謝します。

4

1 に答える 1

1

CX のカウントがメッセージの実際の長さと正確に等しい場合、コードは機能します。CX の数値がメッセージの長さよりも大きい場合、BIOS は AL レジスタにあった (設定を忘れた) 文字コードで超過分を表示します。

以下の変更を提案します

mov bx,0002h          ; set the color (green) AND select page 0
mov dx,OFFSET str_msg ; set the string to print
call WRITE_TEXT_IN_COLOR
call NEW_LINE

proc WRITE_TEXT_IN_COLOR 
 mov ax,0920h  ;AH=Function number AL=Space character  
 mov cx,200  ; number of chars that will be painted
 int 10h     ;BIOS function 09h
 int 21H     ;DOS function 09h
 ret
endp WRITE_TEXT_IN_COLOR
于 2015-05-02T13:25:30.070 に答える