IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【计算机与UNIX汇编原理⑦】——DOS/BIOS功能调用【实现两数相加 + Hello World!】 -> 正文阅读

[系统运维]【计算机与UNIX汇编原理⑦】——DOS/BIOS功能调用【实现两数相加 + Hello World!】


🍻 国庆节快乐!



再一次 Hello World!🌏

上一篇文章链接: 【计算机和汇编原理⑤】——指令系统(下)【 2万5千字总结 】.
下一篇文章链接: 🚧 🚧…


一、功能调用简介

??● 在汇编里面要使用一些已经写好的子程序的话,我们就可以使用功能调用。且有两种方式:
????① 通过操作系统内核里面提供的一些子程序。(也叫做 DOS 功能调用)。
????② 绕开操作系统,直接调用主板芯片上固化的子程序。(叫做 BIOS 功能调用)

??■ DOS/BIOS 调用模式

DOS/BIOS 调用模式:
	MOV AH, 功能号
	设置入口参数
	INT n
	分析出口参数

??? 说明
????① 其中 n 值因子程序的不同而可能不同,比如:ROM BIOS 有 n = 5 ~ 1FH,而DOS 有 n = 20H、21H、23 ~ 2AH、2EH、2FH、33H 和 67H 等几种情况。有的 n 只对应一个子程序,有的 n 对应很多子程序。
????② 子程序调用结束后一般都有出口参数,这些出口参数常放在寄存器中,通过出口参数可以知道功能调用的成功与否。
????③ 在 DOS 功能子程序调用中,我们把通过 “INT 21H” 来实现的子程序调用称为 DOS 系统功能调用。



二、DOS常用功能调用

??● DOS 功能调用的例子如下:【简单了解即可】

在这里插入图片描述

??? 说明
????① 中断向量表在下学期会学,它是一种数据结构。它储存了我们要调用的子程序的真实地址。
????② “绿色” 部分放大即是我们的右边的 “用户程序”。当在 “右边” 执行到代码段的 “INT 21H” 后,系统会自动做计算 (根据 n =21H ,然后去中断向量表去找) 来找出子程序。
????③ 它执行完后还要回到原来的 “中断点”,但它不像以前讲的 CALL 命令。


1、功能号 01H (调用指令INT 21H)

??■ 入口参数:无。
??■ 出口参数:AL = 按键的 ASCII 码。注:若 AL = 0,表明按键是功能键、光标键,需再次调用此功能,才能返回按键的扩展码。
??? 功能:等待键入一个字符,有回显,并用 “Ctrl + C” 结束输入。【回显:当敲某个键时,屏幕上会对应出现该字符】

举例:
MOV AH, 1
INT 21H

??● 补充:“07H”——无回显+不响应Ctrl_c;“08H” 无回显+响应Ctrl_c。


2、功能号 02H (调用指令INT 21H)

??■ 入口参数:DL = 待显字符的 ASCII 码。
??■ 出口参数:无。
??? 功能:显示一个字符。响应组合键为 “Ctrl+C”。本功能在屏幕的当前位置显示一个字符,光标右移一格,如果是在一行末尾显示字符,则光标返回下一行的开始格。如果是在屏幕的右下角显示字符,则光标在返回时屏幕要上滚一行。【注意:该项功能会破坏AL寄存器的内容】

" 举例一: 在文本屏幕上显示字符 A "
MOV DL, 'A'
MOV AH, 2
INT 21H


" 举例二: 从键盘键入一个“Q”, 屏幕上回显一个“Q” "
.586

DATA SEGMENT USE16
DATA ENDS

CODE SEGMENT USE16
	 ASSUME CS:CODE,DS:DATA
	 
BEG: MOV	AX,DATA
	 MOV 	DS,AX
	
	 MOV 	AH,1		; 从键盘上获取一个字符(功能号 01H)
	 INT 	21H
	 MOV 	DL,AL
	 MOV	AH,2		; 显示(功能号 02H)
	 INT 	21H
	 
	 MOV 	AH,4CH		
	 INT 	21H
	 
CODE ENDS
END	BEG

??● 样例二的运行结果

在这里插入图片描述
??? 说明:要先 “Compile”,再 “Link”,最后才能 “Run”。


" 举例三:【两数相加】从键盘键入一个 1 位的加数,一个 1 位的被加数, 并将它们的和显示在屏幕上"
.586

DATA SEGMENT USE16
DATA ENDS

CODE SEGMENT USE16
	 ASSUME CS:CODE, DS:DATA
	 
BEG: MOV	AX, DATA
	 MOV 	DS, AX
	
	 MOV AH, 1
	 INT 21H 			; 键入3,(AL)=33H
	 SUB AL, 30H 		;(AL)=3
	 
	 MOV DL, AL 		;(DL)=3
	 MOV AH, 1
	 INT 21H 			; 键入4,(AL)=34H
	 SUB AL, 30H 		;(AL)=4
	 
	 ADD DL, AL 		; 相加:(DL)=7
	 ADD DL, 30H 		;(DL)=37H
	
	 MOV AH, 2			; 回显
	 INT 21H
	 
	 MOV 	AH,4CH		
	 INT 	21H
	 
CODE ENDS
END	BEG

??● 样例三的运行结果

在这里插入图片描述

??? 说明:键入的数字 “3” 是 ASCII 码(值为51),所以我们要减去 “30H(转化为十进制即是48)”。


3、功能号 09H (调用指令INT 21H)

??■ 入口参数:DS:DX = 字符串首地址,字符串必须以 ‘$’ (即 ASCII 码 24H ) 为结束标志。
??■ 出口参数:无。
??? 功能:该项功能从屏幕当前位置开始,显示字符串,遇到结束标志 ‘$’ 时停止,但这个字符并不显示。【注意:9号功能也会破坏 AL 寄存器的内容】

" 例: 在屏幕上显示‘HELLO WORLD!’ "

.586
DATA SEGMENT USE16 			; 定义数据段
MESG DB 'HELLO WORLD!', '$'
DATA ENDS

CODE SEGMENT USE16 			; 定义代码段
ASSUME CS:CODE, DS:DATA
	BEG: MOV AX, DATA
		MOV DS, AX
		LAST: MOV AH, 9
		MOV DX, OFFSET MESG	; 把 MESG 的首地址给 DX 寄存器
		INT 21H
		
		MOV AH, 4CH
		INT 21H 			; 返回DOS
		
	CODE ENDS
END BEG

??● 运行结果

在这里插入图片描述

??? 说明:“ MESG DB ‘HELLO WORLD!’, ‘$’ ” 写成 “ MESG DB ‘HELLO WORLD!$’ ” 也可以。


4、功能号 0AH (调用指令INT 21H)

??■ 入口参数:DS:DX 指向放键入字符的缓冲区。
??■ 出口参数:存放于缓冲区的字符串,以回车键结尾。
??? 功能:等待键入一串字符,送用户程序数据缓冲区。【注意:缓冲区中的第一个字节由用户写入,其余字节由系统写入;如果输入的字节数少于定义的字节数,缓冲区其余字节将自动补零;输入的字节数大于定义的字节数,后来输入的字符被自动被丢弃且响铃警告。】

??● 例:使用 0AH号 DOS 功能调用, 从键盘获取最大长度为 100 的字符串(包含回车键):

??● 示意图:
在这里插入图片描述

??? 说明:“41H” 是 “A” 的十六进制的 ASCII 码。“0DH” 是回车符(CR,十进制的 ASCII 码为13)。

??● 代码如下

.586

DATA SEGMENT USE16 				; 定义数据段
	 BUF DB 100
		 DB ?
		 DB 10 DUP(?)
DATA ENDS

CODE SEGMENT USE16 				; 定义代码段
ASSUME CS:CODE, DS:DATA

	BEG: MOV AX, DATA
		MOV DS, AX
		
		MOV DX, OFFSET BUF	
		MOV AH, 0AH				; 功能号 0AH 
		INT 21H
		MOV DX, OFFSET BUF+2	;"BUF+2"的位置开始键入
		
		MOV BX, DX				; 键入字符的个数
		ADD BL, BUF+1
		
		MOV BYTE PTR [BX], '$'	; 间接寻址
		MOV AH, 09H				; 功能号09H[显示字符串]
		INT 21H
		
		MOV AH, 4CH
		INT 21H 				; 返回DOS
		
	CODE ENDS
END BEG

??? 说明:因为显示时重新刷新了屏幕,屏幕上原来输入时回显的字符串被去除了,同样内容的字符串被再次显示出来,所以屏幕上只看到了一个字符串 (并没有出现我们想看到的两个字符串 )。所以我们可以在 “单步调试” 中进行查看结果。

在这里插入图片描述


5、功能号 4CH (调用指令INT 21H)

??■ 入口参数:AL = 返回码(或者不设置)。
??■ 出口参数:无。
??? 功能:终止当前程序的运行,并把控制权交给调用它的程序。

MOV AH, 4CH
INT 21H 		; 返回DOS


三、BIOS常用功能调用

??● DOS 功能调用的例子如下:【简单了解即可】
在这里插入图片描述
??■ BIOS 调用模式

BIOS 调用模式:
	MOV AH, 功能号
	设置入口参数
	INT XXH (XXH为 BIOS 功能调用类型号) 
	分析出口参数

??● BIOS 调用模式有两个常用的功能调用:键盘功能调用(INT 16H)、文本显示功能调用(INT 10H)。


1、功能号 00H (调用指令INT 16H)

??■ 入口参数:无。
??■ 出口参数:AL = 键入字符的 ASCII 码。若 AL = 0,则 AH = 输入键的扩展码。

??? 功能:读取键入的一个字符,无回显,响应Ctrl_C,无键入则等待。

"举例:"
MOV AH, 00H
INT 16H
MOV CL, AL 		; 获得键盘输入字符的 ASCII 码, 并放入 CL 寄存器


2、功能号 0EH (调用指令INT 10H)

??■ 入口参数:AL = 待显字符的 ASCII 码。
??■ 出口参数:无。
??? 功能:在光标的当前位置显示一个字符,随后光标前进一格,满一行后自动换行,满一页则整屏信息上滚一 行。与 DOS 系统的 2 号功能调用具有相同的效果。

"举例:"
MOV AH, 0EH
MOV AL, 'A'
INT 10H 		; 在文本屏幕上显示字符 A


四、参考附录:

[1] 《微型计算机原理与接口技术(慕课板)》
清华大学出版社

[2] 《汇编语言程序设计(第2版)》

上一篇文章链接: 【计算机和汇编原理⑤】——指令系统(下)【 2万5千字总结 】.

下一篇文章链接: 🚧 🚧…


🍻 国庆节快乐!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 12:08:59  更:2021-10-08 12:10:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:52:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码