assembly TASM -“Hello World”输出前面的符号

b1payxdu  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(118)

我的代码是:

.model tiny
.data
message: db "Hello World $";
.code
org 100h
main proc near
mov dx, offset message
mov ah,09h
int 21h
mov ah, 4ch
mov al, 00
int 21h
endp
end main

但在输出中我得到(截图)。这些符号从何而来?谢谢

使用以下工具构建:
tasm hello.asm
链接hello. obj
(默认输入)

js5cn81o

js5cn81o1#

您正在使用内存模型“tiny”和org 100h作为COM可执行文件格式,但链接MZ可执行文件。将/t标志传递给链接器:

tasm hello.asm
tlink /t hello.obj

它使用正确的内存布局创建hello.com
如果您想要MZ可执行格式(EXE),那么指定例如.model small,定义堆栈段并加载ds寄存器与数据段。message必须是变量,而不是标签(名称后没有:)。

.model small

.stack

.data
message db "Hello World $"

.code
main:
mov ax,@data
mov ds,ax
mov dx, offset message
mov ah,09h
int 21h
mov ah, 4ch
mov al, 00
int 21h
end main

链接到tlink hello.obj。它创建hello.exe

iaqfqrcu

iaqfqrcu2#

似乎在“Hello World”程序的TASM代码输出中遇到了意外的符号。该问题可能与段寄存器未正确设置有关。下面是您的代码的更新版本,其中包括段寄存器初始化:
汇编复制代码

.model tiny

.data message db“Hello World $”
.code org 100h main proc near mov ax,@data ;初始化DS段寄存器mov ds,ax

mov dx, offset message
mov ah, 09h
int 21h

mov ah, 4ch
mov al, 0
int 21h
endp

end main

请确保使用以下命令汇编和链接代码:
' tasm hello.asm tlink hello.obj '通过使用mov ax,@data和mov ds,ax指令初始化DS段寄存器,可以确保消息标签的偏移量指向数据段中的正确位置。这应该有助于解决输出中出现意外符号的问题。
如果您仍然遇到任何问题或有进一步的问题,请让我知道!

相关问题