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 回答