печать в программировании на ассемблере с использованием FASM

Я пытаюсь напечатать сообщение, используя приведенный ниже код:

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», сообщение сможет отображаться.

Я хочу знать логику этого. Имеет ли это значение, где я объявлю сообщение?

Это чисто из любопытства, спасибо!


person Hold_My_Anger    schedule 05.02.2012    source источник


Ответы (2)


Да. Прямо сейчас msg определяется в середине кода, где ЦП попытается его выполнить. Обычно вы хотите определить данные отдельно, в сегменте данных. Я не помню синтаксиса для 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
person Jerry Coffin    schedule 05.02.2012

Если вам действительно нужны строки в разделе кода, просто перепрыгивайте через них.

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

finish:
    mov ax, 4c00h
    int 21h
person Gunner    schedule 11.02.2012