在汇编语言中,输出字符串数据通常涉及使用DOS中断调用。以下是一个基本的示例,展示了如何使用INT 21H的09H号中断调用输出字符串:
定义字符串和结束标志
在数据段中定义字符串,并在末尾加上'$'作为字符串的结束标志。
准备输出
将字符串的地址加载到DX寄存器中。
将AH寄存器设置为09H,表示调用输出字符串的中断。
执行中断调用
使用INT 21H指令执行中断调用。
```assembly
DATAS SEGMENT
INPUT DB "Please input a string: ", '$' ; 输入提示信息
OUTPUT DB "Your input is: ", '$' ; 输出提示信息
BUFFER DB 20 DUP(0); 定义20字节的缓冲区
BUF_LEN DW ?; 待输入字符的长度
CRLF DB 0AH, 0DH, '$'; 回车换行符
DATAS ENDS
STACKS SEGMENT
DW 20 DUP(0); 定义20字节的堆栈空间
STACK ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS, SS:STACKS
START:
MOV AX, DATAS
MOV DS, AX
LEA DX, INPUT ; 将输入提示信息地址加载到DX
MOV AH, 09H; 设置AH为09H,表示输出字符串中断
INT 21H; 调用中断
LEA DX, BUFFER ; 将缓冲区地址加载到DX
MOV AH, 09H; 设置AH为09H,表示输出字符串中断
INT 21H; 调用中断
MOV AH, 4CH; 设置AH为4CH,表示结束程序
INT 21H; 调用中断
CODES ENDS
END START
```
解释
数据段定义
`INPUT` 和 `OUTPUT` 定义了输入和输出提示信息,并在末尾加上'$'作为结束标志。
`BUFFER` 定义了一个20字节的缓冲区,用于存储用户输入的字符。
`BUF_LEN` 用于存储实际输入字符的长度。
`CRLF` 定义了回车换行符。
堆栈段定义
定义了一个20字节的堆栈空间。
代码段定义
`ASSUME` 指令用于声明寄存器的假设使用。
程序开始
将数据段和堆栈段地址加载到AX和DS寄存器中。
将输入提示信息地址加载到DX寄存器中,并设置AH为09H,调用输出字符串中断。
将缓冲区地址加载到DX寄存器中,并设置AH为09H,调用输出字符串中断。
设置AH为4CH,调用结束程序中断。
通过这种方式,汇编程序可以输出字符串数据。注意,字符串必须以'$'结尾,以便操作系统知道何时停止输出。