печать в программировании сборки с использованием FASM - PullRequest
0 голосов
/ 05 февраля 2012

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 05 февраля 2012

Да. Прямо сейчас, 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
2 голосов
/ 11 февраля 2012

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

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

finish:
    mov ax, 4c00h
    int 21h
...