2

プログラムで2つの異なる行に文字列を表示させようとしています。

これは.comプログラムであり、A86アセンブラを使用しています。

jmp start               ; This will start the program

;============================

  msg   db  "Hello Word.$"      ; A string variable 
  msg   db  "Michael J. Crawley$"   ; A string variable with a value.

;============================

start:

  mov ah,09             ; subfunction 9 output a string

  mov dx,offset msg         ; DX for the string

  int 21h               ; Output the message

  int 21h               ; Output the message

exit:

  mov ah,4ch
  mov al,00             ; Exit code 

  int 21h               ; End program
4

3 に答える 3

3

ここにあなたの特定の問題があります:

  • あなたは2回定義しますmsg(a86はそれに吠えます)。
  • 同じ値のmsgを使用してint21fn9を呼び出すため、2つのメッセージを出力するのではなく、最初のメッセージを2つだけ出力します。
  • どちらのメッセージにも改行文字が含まれていないため、別々の行ではなく、互いに隣接します。

これらのポイントの解決策(実際のコードを提供しない場合)。

  • 2番目のメッセージに。というラベルを付けますmsg2
  • msg22回目にint21を呼び出す前に、dxにロードします。
  • メッセージを変更して、「$」記号(または少なくとも最初の記号)の前に改行を入れます。

更新:他の役立つ魂がすでにソースを提供しているので、ここに私の解決策があります。これから学び、同様のことを行うために独自のコードを変更することをお勧めします。授業のために公開サイトから逐語的にコピーすると、ほぼ確実に盗用に巻き込まれます。

         jmp start                   ; This will start the program

msg      db  "Hello Word.",0a,"$"    ; A string variable .
msg2     db  "Michael J. Crawley$"   ; A string variable with a value.

start:   mov ah,09                   ; subfunction 9 output a string
         mov dx,offset msg           ; DX for the string
         int 21h                     ; Output the message
         mov dx,offset msg2          ; DX for the string
         int 21h                     ; Output the message
exit:
         mov ah,4ch
         mov al,00                   ; Exit code 
         int 21h                     ; End program

これは以下を出力します:

Hello Word.
Michael J. Crawley
于 2010-02-12T04:29:09.107 に答える
1

msgの2つの定義?

于 2010-02-12T04:21:17.457 に答える
0

私はa86に精通していませんが、NASMとMASMでは、comプログラムの先頭に「org100h」アセンブラディレクティブが必要です。現在のように、offset msgは0x2であり、プログラムセグメントプレフィックスの2番目のバイト(使用可能なメモリの最上位のセグメントを保持する16ビットワード)から出力しようとします。

于 2010-02-12T04:47:14.010 に答える