[8086汇编]int 21h dos函数码

本文深入解析了8086汇编语言中21h中断的功能及应用,涵盖了控制台读写、获取系统信息和文件目录管理等关键操作。通过具体实例,如读取和输出字符、打印字符串及输入字符串,详述了各功能码的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在8086汇编中,会用到很多的中断调用,21h中断是最常用的,这里总结下21h的函数功能码,以及一些小的example code。

下图是int 21h DOS函数码。包括控制台读写,获取系统信息,文件目录管理等。

(int 21h DOS功能码)

 

01 Read character from STDIN

input: AH = 01

output: AL = read character

01功能码从标准输入中读取一个字符,读取的字符存放到寄存器AL中。

; test.asm, run in dosbox
; assembly: masm test.asm
; link    : link test.obj
; run     : test.exe
data segment
data ends

code segment
	assume ds:data,cs:code
main:
	
	
	mov ax, data
	mov ds, ax
	
	mov ah, 01h
	int 21h
	
	mov ah, 4ch
	int 21h

code ends
end main

汇编,链接上面的代码,然后运行,会发现光标闪动,输入一个字符后,程序结束。输入的字符存到寄存器AL中。

 

02 WRITE CHARACTER TO STANDARD OUTPUT

input: DL = character to write

return: AL = last character output

寄存器DL保存要输出到标准输出的字符,AL保存最后一个输出的字符。

; test.asm, run in dosbox
; assembly: masm test.asm
; link    : link test.obj
; run     : test.exe
data segment
data ends

code segment
	assume ds:data,cs:code
main:
	mov ax, data
	mov ds, ax
	
	mov dl, 'a'
	mov ah, 02h
	int 21h
	
	mov ah, 4ch
	int 21h

code ends
end main

在上面的代码中,使用mov指令在dl中存放了字符'a',然后ah存放2,调用21h,会打印字符'a'.

09 WRITE STRING TO STANDARD OUTPUT

input: DS:DX = '$' - terminated string

return: AL = 24h

09号功能码打印字符串,字符串以$结尾。

; test.asm, run in dosbox
; assembly: masm test.asm
; link    : link test.obj
; run     : test.exe
data segment
buf db "hello,world!",'$'
data ends

code segment
	assume ds:data,cs:code
main:
	mov ax, data
	mov ds, ax
	
	mov ah, 09h
	lea dx, buf
	int 21h
	
	mov ah, 4ch
	int 21h

code ends
end main

上面的代码中,在数据段定义了一个字符串buf,该字符串以$结尾。

lea指令将buf的地址存放到寄存器DX中,最后调用21h。

0A BRFFERED INPUT

input: DS:DX = string

0A功能码输入字符串,字符串地址存放到寄存器DX中。

; test.asm, run in dosbox
; assembly: masm test.asm
; link    : link test.obj
; run     : test.exe
data segment
buf db 20 dup('$')
data ends

code segment
	assume ds:data,cs:code
main:
	mov ax, data
	mov ds, ax
	
	mov ah, 0Ah
	lea dx, buf
	int 21h
	
	mov ah, 4ch
	int 21h

code ends
end main

上面的代码中将buf的地址存放到寄存器DX中,然后调用21h中断。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值