1

良い一日。私はアセンブリ言語に不慣れで、TASMで色付きの「HelloWorld」を印刷しようとしています。これが私のこれまでのコードです。「helloworld」を色なしで印刷するだけです。

.model small
.stack 100h

.data
message db 13,10,"Hello World!$"

.code
main proc near
   lea dx, message
   mov ah, 09h
   int 21h

   mov ah,4ch
   int 21h
main endp


私はこのようなものを読みました

mov ah,9    ;Function 9: Write character and attribute at cursor position
mov al,'H'  ;AL = character to display
mov bh,0    ;BH = page number
mov bl,02EH ;BL = attribute (yellow on green)
mov cx,1    ;CX = number of times to write character
int 10H  ;Int 10H: Video (show the character)


フォーラムではありますが、HelloWorldに組み込むことはできません。なぜその特定のレジスターなどを使用するのか混乱しています。私を助けてください。どうもありがとうございます!

編集

.model small
.stack 100h

.data
hello db 'Hello World!',0

.code
main proc near
    mov ax, @data
    mov ds, ax

    mov ax, 3
    int 10h

    mov si, 0             ; cl is the counter register, set it to
                      ; zero (the first character in the string)

start:                ; Beginning of loop
    mov al, hello[si]   ; Read the next byte from memory
    cmp al, 0           ; Compare the byte to null (the terminator)
    je endthis              ; If the byte is null, jump out of the loop

    mov ah, 09h
    mov al, hello[si]
    mov bh, 0
    mov bl,02EH
    mov cx,11
    int 10H  

    add si, 1           ; Move to the next byte in the string
    jmp start           ; Loop

endthis:    
    mov ah, 4ch
    int 21h

main endp
end main
4

3 に答える 3

0

アセンブリ言語は、他のプログラミング言語と同様に、任意の設計上の決定の結果です。特定のレジスタが割り込み呼び出し入力レジスタ (最適化) として使用される理由がある場合もありますが、多くの場合そうではなく、インターフェイス (ここint 10hまたはint 21h) を許可されているものとして取得する必要があります。

いくつかの感嘆符 (11 個の感嘆符を想定しています) の問題に関連して、割り込み呼び出し!!!!!!!!!!!に間違ったパラメーターがあります。int 10

mov cx,11

Ralf Brown の Interrupt Listによると、 のパラメータは次mov ah,9int 10hとおりです。

INT 10 - VIDEO - WRITE CHARACTER AND ATTRIBUTE AT CURSOR POSITION
    AH = 09h
    AL = character to display
    BH = page number (00h to number of pages - 1) (see #00010)
        background color in 256-color graphics modes (ET4000)
    BL = attribute (text mode) or color (graphics mode)
        if bit 7 set in <256-color graphics mode, character is XOR'ed
          onto screen
    CX = number of times to write character
Return: nothing
Notes:  all characters are displayed, including CR, LF, and BS
    replication count in CX may produce an unpredictable result in graphics
      modes if it is greater than the number of positions remaining in the
      current row
    With PhysTechSoft's PTS ROM-DOS the BH, BL, and CX values are ignored
      on entry.

したがって、 ではなく、mov cx,11にする必要がありますmov cx,1

2 つ目は、その時点で前の同一の命令で既にロードされているmov al, hello[si]ため、冗長です。ただし、これはコードの機能には影響しません。hello[si]al

編集:を使用してカーソル位置を設定および読み取る方法に関する情報を追加しましたint 10h

次のパラメーターを使用して、カーソル位置をmov ah,2,で更新する必要があるようです。int 10h

INT 10 - VIDEO - SET CURSOR POSITION
    AH = 02h
    BH = page number
        0-3 in modes 2&3
        0-7 in modes 0&1
        0 in graphics modes
    DH = row (00h is top)
    DL = column (00h is left)
Return: nothing

次のパラメータを使用してmov ah,3、 ,で現在のカーソル位置を読み取る必要がある場合があります。int 10h

INT 10 - VIDEO - GET CURSOR POSITION AND SIZE
    AH = 03h
    BH = page number
        0-3 in modes 2&3
        0-7 in modes 0&1
        0 in graphics modes
Return: AX = 0000h (Phoenix BIOS)
    CH = start scan line
    CL = end scan line
    DH = row (00h is top)
    DL = column (00h is left)
Notes:  a separate cursor is maintained for each of up to 8 display pages
    many ROM BIOSes incorrectly return the default size for a color display
      (start 06h, end 07h) when a monochrome display is attached
    With PhysTechSoft's PTS ROM-DOS the BH value is ignored on entry.
于 2013-03-10T16:25:00.630 に答える
0
.model small
.data
msg1 10,13,"hellow $"
.code
.startup
mov ah,09h
int 21h
.exit
end
于 2013-10-26T03:07:54.277 に答える
0

DOS 用のアセンブリでプログラミングしている場合は、 や などの一般的に使用される割り込みについて理解しておく必要がint 10hありint 21hます。各割り込みサブ関数には、1 つまたは複数のレジスタを介して渡す必要がある、対応する一連のパラメーターがあります。

貼り付けたサンプルコードで使用されている割り込みは「WRITE CHARACTER AND ATTRIBUTE AT CURSOR POSITION」で、その説明はここにあります。

色の属性を持つ文字列を表示するには、ループ内で文字列を反復処理し、適切なパラメーターを使用して文字ごとに割り込みを呼び出す必要があります。

于 2013-03-10T15:31:28.860 に答える