ビデオバッファに移動して、白い背景に青い文字「D」を書き込もうとしています。このコードの何が問題になっていますか?
Irvine16.incを含める 。コード メインPROC mov ax、@ data mov ds、ax mov si、0b800h mov word ptr [si]、44h mov word ptr [si + 2] 0701h mov ah、08h int 21h 出口 メインENDP
上記に変更を加えました。これで組み立てられますが、何も表示されません。
サンプル例:
名前「hello-world」
org 100h
; ビデオモードを設定する     
mov ax、3; テキストモード80x25、16色、8ページ(ah = 0、al = 3)
int 10h; やれ!
; 点滅をキャンセルし、16色すべてを有効にします。
mov ax、1003h
mov bx、0
int 10h
; セグメントレジスタの設定:
mov ax、0b800h
mov ds、ax
; 「HelloWorld」を印刷する
; 最初のバイトはASCIIコード、2番目のバイトはカラーコードです。
mov [02h]、'h'
mov [04h]、'e'
mov [06h]、'l'
mov [08h]、'l'
mov [0ah]、'o'
mov [0ch]、'、'
mov [0eh]、'w'
mov [10h]、'o'
mov [12h]、'r'
mov [14h]、'l'
mov [16h]、'd'
mov [18h]、'!'
; すべての文字に色を付ける:
mov cx、12; 文字数。
mov di、03h; 'h'の後のバイトから開始
c:mov [di]、11101100b; 黄色(1110)に明るい赤(1100)
    di、2を追加します; vgaメモリ内の次のASCIIコードをスキップします。
    ループc
; キーが押されるのを待ちます。
mov ah、0
int 16h
ret
このサンプルがお役に立てば幸いです
0b800hは、ビデオバッファのセグメントアドレスです。-内のセグメントアドレスmov word ptr [si], 44hのオフセット(ここでは0b800h)のみをアドレス指定し、ビデオバッファを指しません。ビデオセグメントをにロードし、セグメントオーバーライド()を使用することをお勧めします。DSDSESES:
文字と色が一緒に単語を形成します。ビデオバッファには、最初に文字が表示され、次に色が表示されます。背景色と前景色はそれぞれニブル(4ビット)を使用します。「リトルエンディアン」(グーグル)のため、単語の形式は色/文字である必要があります(例:白/青/「D」= 7144h)。
これはIrvine16互換の例です。
INCLUDE Irvine16.inc
INCLUDELIB Irvine16.lib
.CODE
main PROC
;   mov ax,@data                ; No .DATA in this example
;   mov ds,ax
    mov si, 0b800h              ; Initialize ES with video buffer
    mov es, si
    xor si, si                  ; Position 0 is top left
    mov word ptr es:[si], 7144h ; White background ('7'), blue foreground (1), letter 'D' (44)
    mov ah, 08h                 ; Wait for key - http://www.ctyme.com/intr/rb-2561.htm
    int 21h
    exit                        ; Irvine16: end of program
main ENDP
END main
    ここでリスト15を見てください: