I am trying to get my program to display a string on two different lines.
This is a .com program and I am using A86 assembler.
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
Here are your specific problems:
- You define
msg
twice (a86 will barf on that). - You call int21 fn9 with the same value of msg so you're not printing the two messages out, just two copies of the first.
- You don't have a newline character in either message so they'll abut each other rather than be on separate lines.
The solutions to those points (without providing the actual code).
- Label the second message as
msg2
. - Load
msg2
into dx before calling int21 for the second time. - Change the messages to put a newline before the '$' symbol (or at least the first one).
Update: Since some other helpful soul has already provided source, here's my solution. I would suggest you learn from this and modify your own code to do a similar thing. If you copy it verbatim from a public site for classwork, you'll almost certainly be caught out for plagiarism:
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
This outputs:
Hello Word.
Michael J. Crawley
Two definitions of msg?
I'm not familiar with a86, but with NASM & MASM you need an "org 100h" assembler directive at the beginning of a com program. The way it is now, offset msg is 0x2, and that'll try to print from the second byte of the program segment prefix (a 16 bit word that holds the segment of the top of memory available to you).
精彩评论