在 86 汇编语言中,输出数据串(例如字符串)的方式通常依赖于操作系统和环境。对于 DOS 操作系统,常见的做法是使用 BIOS 中断或 DOS 中断。这里将展示如何在 DOS 环境下使用 86 汇编语言输出一个字符串。
使用 DOS 中断 21h 输出字符串
DOS 提供了 21h 中断,其中 AH 寄存器的值决定了执行的操作。例如,使用 AH = 09h 可以输出一个以 $ 结尾的字符串。
以下是一个简单的示例程序,演示如何输出一个数据串:
.model small
.stack 100h
.data
message db 'Hello, World!$' ; 数据串,以 '$' 结尾
.code
main:
; 设置段寄存器
mov ax, @data ; 将数据段地址加载到 AX
mov ds, ax ; 将 AX 中的地址加载到 DS
; 输出字符串
mov ah, 09h ; 设置 21h 中断的 AH 为 09h,用于输出字符串
lea dx, message ; 将字符串的地址加载到 DX
int 21h ; 调用 DOS 中断 21h 输出字符串
; 程序结束
mov ah, 4Ch ; 设置 21h 中断的 AH 为 4Ch,表示程序结束
int 21h ; 调用 DOS 中断 21h 退出程序
end main
解释:
1..model small: 指定了程序的内存模型为小型模型,即代码段和数据段共享同一个段。
2..stack 100h: 定义栈的大小。
3..data: 数据段,存放要输出的字符串。字符串 message db 'Hello, World!$' 以 $ 结尾,符合 DOS 中断 21h 的要求。
4..code: 代码段,包含程序的执行逻辑。
5.mov ax, @data 和 mov ds, ax: 设置数据段寄存器 ds,指向数据段的起始地址。
6.mov ah, 09h: 将 AH 寄存器设置为 09h,这是 DOS 中断 21h 的功能号,表示输出以 $ 结尾的字符串。
7.lea dx, message: 将 message 字符串的地址加载到 DX 寄存器。
8.int 21h: 调用 DOS 中断 21h,执行字符串输出操作。
9.mov ah, 4Ch: 设置 AH 为 4Ch,表示退出程序。
10.int 21h: 调用 DOS 中断 21h,退出程序。
结果:
程序运行后,屏幕上会显示:
Hello, World!
这是使用 86 汇编语言在 DOS 环境下输出一个数据串的基本方法。