0

以下のコードを使用してメッセージを印刷しようとしています。

org 100h
start:
    jmp begin

begin:
    mov ah, 9
    mov dx, msg
    msg db 'Ascii sign:.$'
    int 21h

finish:
    mov ax, 4c00h
    int 21h

コンパイルはできますが、何も表示されません。しかし、「msg db 'Ascii sign:.$'」という行を「jmp begin」の下に移動すると、メッセージが表示されます。

この背後にあるロジックを知りたいです。メッセージを宣言する場所に違いはありますか?

これはただの好奇心からです、ありがとう!

4

2 に答える 2

4

はい。現時点でmsgは、CPU が実行を試みるコードの途中で定義されています。通常は、データ セグメント内でデータを個別に定義します。FASM の構文は覚えていませんが、MASM または TASM では、通常次のようにします。

.model small
.data

msg db 'ASCII sign: .$'

.code
main proc
     mov ah, 9
     mov dx, offset msg
     int 21h
     mov ax, 4c00h
     int 21h
main endp
     end main
于 2012-02-05T07:04:06.117 に答える
2

本当にコード セクションに文字列が必要な場合は、それらを飛び越えてください。

begin:
    mov ah, 9
    mov dx, msg
    jmp overstring
    msg db 'Ascii sign:.$'
overstring:
    int 21h

finish:
    mov ax, 4c00h
    int 21h
于 2012-02-11T00:51:46.047 に答える