将字符串移动到文件汇编的末尾

问题描述 投票:0回答:1

我需要将消息字符串移至程序末尾,并且程序需要正确输出它。我怎样才能意识到这一点?

.model small
.stack 100h

.data

.code
main:
    mov ax, @data
    mov ds, ax

output:
    jmp message
    MOV dx, offset message
    mov ah, 09h
    int 21h

    mov ah, 4Ch
    int 21h


message:
 db 'Hello, World!', '$'

end main

assembly x86-16 dos tasm
1个回答
0
投票

我需要将消息字符串移至程序末尾,并且程序需要正确输出它。

我的理解是,您不希望消息字符串成为

.data
部分的一部分,而是驻留在
.code
部分。
您当前的解决方案(?)
jmp message
无法帮助您,因为它将绕过可以输出字符串的一件事,更糟糕的是,它将开始执行由消息字符串中恰好存在的任何字节形成的垃圾指令。
jmp message
显然必须删除,但需要进行一项更改。 DOS.PrintString 函数 09h 始终需要一个指向寄存器 DS:DX 中以 $ 结尾的字符串的远指针,因此您需要 将 CS 复制到 DS,因为该字符串现在驻留在代码段中。仅此而已!

main:
    push cs
    pop  ds
    mov  dx, offset message
    mov  ah, 09h
    int  21h

    mov  ax, 4C00h
    int  21h

message: db 'Hello, World!$'

end main
© www.soinside.com 2019 - 2024. All rights reserved.