在汇编语言中打印数组元素

3

我是一名新手汇编程序员,目前正在使用 emu8086

我尝试打印一个数组的两个元素,但是我无法打印第二个元素。

以下是我的代码:

.MODEL SMALL

.STACK 100H  

.DATA 
MSG DB 'HI','GOOD$'

.CODE 

MAIN PROC

MOV AX,@DATA
MOV DS,AX
 
MOV AH,2
MOV DL,MSG
INT 21H  

MOV AH,2
MOV DL,MSG+1
INT 21H 

MOV AH,4CH
INT 21H

MAIN ENDP

END MAIN

输出时打印了 hi,没有打印 good。请指正并告诉我如何打印第二个元素。


1
你可以循环整个数组并打印偏移量的值。请查看此链接: link - nim_10
6
1)当使用指令 int 21h / ah=02h 时,会打印单个字符。若要打印字符串,需要使用指令 int 21h / ah=09h。2)所有使用指令 int 21h / ah = 09h 打印的字符串都需要以 $ 结尾;目前只有 'GOOD'$ 结尾。3)'GOOD' 应该从 MSG+2 开始,而不是从 MSG+1 开始(如果你在 'HI' 后添加一个 $,则 'GOOD' 会从 MSG+3 开始)。如果创建另一个数组来包含每个字符串的地址,那么可以在循环中处理这些地址并简化代码。 - Michael
1个回答

2

如果你只想打印出“HIGOOD”,那么可以这样写:

MOV AH,2
MOV DL,MSG
INT 21H  
MOV DL,MSG+1
INT 21H
MOV DL,MSG+2
INT 21H  
MOV DL,MSG+3
INT 21H
MOV DL,MSG+4
INT 21H  
MOV DL,MSG+5
INT 21H

一种更好的方法是像MSG DB 'HI$','GOOD$'这样在两个字符串末尾加上"$",然后使用字符串输出函数09h:
MSG DB 'HI$','GOOD$'
...
mov ah, 09h
mov dx, offset MSG
int 21h
mov dx, offset MSG+3
int 21h

更好的方式是为您的字符串分配单独的标签:
MSG1 DB 'HI$'
MSG2 DB 'GOOD$'
...
mov ah, 09h
mov dx, offset MSG1
int 21h
mov dx, offset MSG2
int 21h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接