【问题标题】:print elements of array in assembly在汇编中打印数组的元素
【发布时间】:2016-05-23 06:51:37
【问题描述】:

我是组装新手,我正在使用 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 没有被打印。请纠正我如何打印第二个元素。

【问题讨论】:

  • 您可以循环整个数组并打印偏移量的值。检查此链接:link
  • 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 开始)。如果您创建另一个包含每个字符串的地址的数组,这将简化事情,然后您可以在循环中处理它。

标签: arrays assembly emu8086


【解决方案1】:

如果您只想打印“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多