1

ビデオバッファに移動して、白い背景に青い文字「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

上記に変更を加えました。これで組み立てられますが、何も表示されません。

4

3 に答える 3

3

サンプル例:

名前「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

このサンプルがお役に立てば幸いです

于 2011-12-01T01:26:31.283 に答える
3
  1. 0b800hは、ビデオバッファのセグメントアドレスです。-内のセグメントアドレスmov word ptr [si], 44hオフセット(ここでは0b800h)のみをアドレス指定し、ビデオバッファを指しません。ビデオセグメントをにロードし、セグメントオーバーライド()を使用することをお勧めします。DSDSESES:

  2. 文字と色が一緒に単語を形成します。ビデオバッファには、最初に文字が表示され、次に色が表示されます。背景色と前景色はそれぞれニブル(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
于 2015-12-21T21:13:43.357 に答える
0

ここでリスト15を見てください:

http://stuff.pypt.lt/ggt80x86a/asm8.htm

于 2011-12-01T01:26:44.900 に答える