Assembly 从字符数组打印项目?

Assembly 从字符数组打印项目?,assembly,x86,x86-16,Assembly,X86,X86 16,我需要从如下字符数组打印单个字符: string DB 'ABC0','$' 我知道这样做可以打印整个字符串: lea dx, string mov ah, 0Ah int 21h 如何使用BIOS仅打印单个字符,例如“A”?: 使用DOS: 您需要使用int 21H/AH=02H mov dl, byte ptr[string] mov ah, 02h int 21h byte ptr表示希望从变量/指针中提取一个字节。要打印下一个字母,只需增加指针: inc

我需要从如下字符数组打印单个字符:

string DB 'ABC0','$'
我知道这样做可以打印整个字符串:

lea dx, string
mov ah, 0Ah
int 21h
如何使用BIOS仅打印单个字符,例如“A”?

使用DOS:


您需要使用int 21H/AH=02H

mov     dl, byte ptr[string]
mov     ah, 02h 
int     21h 
byte ptr
表示希望从变量/指针中提取一个字节。要打印下一个字母,只需增加指针:

inc string

你通常必须声明:incw[string]这类东西如果你想要一个单独的字母,你有两个问题需要解决。DX只有起始指针,它指向“A”,因此需要将指针向前调整到所需的字母。其次,您的打印函数mov-ah,INT21h只会从指向的字母盲目打印到$terminator,因此您需要一个INT21命令来打印单个字符(通常加载到AL中)
mov-ah,0Ah
/
int-21h
是缓冲输入,上次我检查过,不会打印任何内容。我怀疑原来的帖子有错。@Frank,是的,它行得通,为什么不行?如果
string
/
a
的起始地址是100,那么
b
是101对吗?因此,
inc字符串
会增加地址。在一个循环中,它在DosBox和Emu386中打印得很好。。。我会说,它将“A”增加到“B”——相同的结果——但不会增加地址。我不太熟悉Masm/Tasm语法。
mov     dl, byte ptr[string]
mov     ah, 02h 
int     21h 
inc string