Assembly 在两行上打印字符串
我试图让我的程序在两行上显示一个字符串 这是一个.com程序,我使用的是86汇编程序Assembly 在两行上打印字符串,assembly,dos,x86-16,a86,Assembly,Dos,X86 16,A86,我试图让我的程序在两行上显示一个字符串 这是一个.com程序,我使用的是86汇编程序 jmp start ; This will start the program ;============================ msg db "Hello Word.$" ; A string variable msg db "Michael J. Crawley$" ; A string variable with a value
jmp start ; This will start the program
;============================
msg db "Hello Word.$" ; A string variable
msg db "Michael J. Crawley$" ; A string variable with a value.
;============================
start:
mov ah,09 ; subfunction 9 output a string
mov dx,offset msg ; DX for the string
int 21h ; Output the message
int 21h ; Output the message
exit:
mov ah,4ch
mov al,00 ; Exit code
int 21h ; End program
味精的两种定义?以下是您的具体问题:
- 您定义了两次
(a86会在上面呕吐)msg
- 您使用相同的msg值调用int21 fn9,因此您不打印这两条消息,只打印第一条消息的两个副本
- 这两条消息中都没有换行符,因此它们将彼此相邻,而不是在单独的行上
- 将第二条消息标记为
msg2
- 在第二次调用int21之前,将
加载到dx中msg2
- 将消息更改为在“$”符号(或至少在第一个符号)之前添加换行符
更新:由于其他一些有用的灵魂已经提供了源代码,这里是我的解决方案。我建议您从中学习,并修改自己的代码来做类似的事情。如果你为了上课而从公共网站一字不差地复制它,你几乎肯定会被发现剽窃:
jmp start ; This will start the program
msg db "Hello Word.",0a,"$" ; A string variable .
msg2 db "Michael J. Crawley$" ; A string variable with a value.
start: mov ah,09 ; subfunction 9 output a string
mov dx,offset msg ; DX for the string
int 21h ; Output the message
mov dx,offset msg2 ; DX for the string
int 21h ; Output the message
exit:
mov ah,4ch
mov al,00 ; Exit code
int 21h ; End program
这将产生:
Hello Word.
Michael J. Crawley
我不熟悉a86,但是对于NASM&MASM,您需要在com程序开始时使用“ORG100H”汇编指令。按照现在的方式,偏移量msg是0x2,它将尝试从程序段前缀的第二个字节(一个16位的字,用于保存可用内存顶部的段)打印出来。代码有什么问题?它“编译”吗?你得到奇怪的输出吗?最好再补充一句,我不太明白。我应该删除一个。。。。db“Michael J.Crawley$”;一个带值的字符串变量。@Mike:不,每个变量都需要唯一的名称。您可以将第一个“msg”替换为“msg1”,第二个替换为“msg2”。DOS int21调用是否也会在AX中返回结果代码,因此必须在第二个调用之前重新加载?或者DOS只是设置了进位标志来表示错误。@Michael,不是fn9,它什么也不返回。不是。。。我不是那种复制粘贴的人,我真的很想学这个。我试试。0a是字符串的位置吗?@Mike,0a是换行符(ASCII 10)的十六进制代码。int21/fn9将其解释为一个请求,以下拉到一个新行的开头。这就是为什么a86如此优秀,为什么Harald如此傲慢:-)它将汇编一个文件,而不需要其他汇编程序所需的任何gumpff-我一直讨厌masm,并且它要求我必须提供25行administrivia来做一个5行hello世界计划。Turbo Assembler拿走了很多,但a86一直在使用。