首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【微机原理】程序设计题基础知识讲解——6、中断调用与系统服务

【微机原理】程序设计题基础知识讲解——6、中断调用与系统服务

作者头像
命运之光
发布2025-06-13 15:53:57
发布2025-06-13 15:53:57
10300
代码可运行
举报
运行总次数:0
代码可运行

了解 INT 21H 系统中断的作用,解释不同功能号对应的服务内容,如显示字符串、输入字符串和退出程序。

中断调用与系统服务

1. INT 21H 指令简介
  • 作用:调用 DOS 系统中断 21H,实现多种系统服务,如显示字符串、输入字符串、文件操作和程序退出等。
  • 机制
    • 在调用 INT 21H 前,需要将 AH 寄存器设置为对应服务功能号,不同功能号对应不同服务。
    • 其他寄存器(如 DX、AL 等)存放具体的参数或数据地址。
2. 显示字符串
  • 功能号:AH = 09H
  • 要求: 字符串必须以特殊字符“ ”结束,DOS 根据“ ”判断字符串终止。DX 寄存器中存放字符串的首地址。
  • 示例
代码语言:javascript
代码运行次数:0
运行
复制
MOV AH, 09H          ; 设置功能号 09H,显示字符串
MOV DX, OFFSET MSG   ; MSG 为以 $ 结束的字符串
INT 21H              ; 调用中断 21H,显示字符串
  • 讲解要点
    • 在数据段中,可以定义:MSG DB 'Hello, DOS!', '$'
    • 调用 INT 21H 后,DOS 会将字符串输出到屏幕上。

为什么使用 **<font style="color:#DF2A3F;background-color:#FBF5CB;">DX</font>** 寄存器?

  • 在汇编语言中,寄存器的用途是约定好的。对于中断 21H 的功能号 09H,它要求:
    • AX 寄存器存储功能号(这里是 09H)。
    • DX 寄存器存储字符串的偏移地址(即字符串的内存地址)。
  • 这是中断服务程序(DOS 提供的中断)的约定,DX 是专门用来传递字符串地址的。
3. 输入字符串
  • 功能号:AH = 0AH
  • 要求
    • 使用一个特定格式的缓冲区,缓冲区第一字节存放最大输入字符数,第二字节存放实际输入字符数,后续空间用于存放输入的字符。
    • DX 寄存器中存放缓冲区的首地址。
  • 示例
代码语言:javascript
代码运行次数:0
运行
复制
MOV AH, 0AH          ; 设置功能号 0AH,输入字符串
MOV DX, OFFSET BUF   ; BUF 为输入缓冲区的首地址
INT 21H              ; 调用中断 21H,等待用户输入字符串
  • 讲解要点
    • 缓冲区的定义示例:
代码语言:javascript
代码运行次数:0
运行
复制
BUF DB 20, ?, 20 DUP(0)

其中 20 表示允许输入最多 20 个字符,“?” 表示实际输入字符数(初始时未知),后面预留 20 个字节用于存储输入字符。

代码语言:javascript
代码运行次数:0
运行
复制
- 输入结束后,缓冲区中会自动保存用户输入的数据。
4. 程序退出
  • 功能号:AH = 4CH
  • 用途
    • 通过调用 INT 21H 以功能号 4CH 结束程序,返回操作系统控制权。
  • 示例
代码语言:javascript
代码运行次数:0
运行
复制
MOV AH, 4CH          ; 设置功能号 4CH,退出程序
INT 21H              ; 调用中断 21H,结束程序

综合实例

示例程序:字符串显示和输入
代码语言:javascript
代码运行次数:0
运行
复制
DATA SEGMENT
    MSG     DB '请输入一段文字:$'   ; 提示信息,$为结束标志
    BUF     DB 20, ?, 20 DUP(0)       ; 输入缓冲区:最大输入20个字符,?用于存储实际输入字符数
    CRLF    DB 13,10,'$'             ; 回车换行字符串
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE, DS:DATA
START:
    ; 初始化数据段
    MOV AX, DATA
    MOV DS, AX

    ; 显示提示信息
    MOV AH, 09H
    MOV DX, OFFSET MSG
    INT 21H

    ; 调用输入字符串服务
    MOV AH, 0AH
    MOV DX, OFFSET BUF
    INT 21H

    ; 显示回车换行(可选)
    MOV AH, 09H
    MOV DX, OFFSET CRLF
    INT 21H

    ; 程序退出
    MOV AH, 4CH
    INT 21H
CODE ENDS
END START
  • 要点
    • 通过定义 MSG 和 BUF,展示了如何用数据段中定义字符串和输入缓冲区。
    • 使用 INT 21H 的不同功能号分别实现显示字符串(09H)和输入字符串(0AH)。
    • 最后通过功能号 4CH 正常退出程序。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 中断调用与系统服务
    • 1. INT 21H 指令简介
    • 2. 显示字符串
    • 3. 输入字符串
    • 4. 程序退出
  • 综合实例
    • 示例程序:字符串显示和输入
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档