当前课程知识点:微机原理与接口技术 >  第8周 汇编语言程序设计 >  第34讲 系统功能调用 >  系统功能调用_02

返回《微机原理与接口技术》慕课在线视频课程列表

系统功能调用_02在线视频

系统功能调用_02

下一节:程序设计示例1

返回《微机原理与接口技术》慕课在线视频列表

系统功能调用_02课程教案、知识点、字幕

第一个子功能我们叫单字符的输入

单字符输入当然

它的输入是什么?

就是键盘 我们都是从键盘输入的

所以对于这个子功能来讲 它没有入口参数

入口就是键盘

这个键盘这个功能它的功能号是1号

这个1必须事先送给AH

因为它没有入口参数

所以你功能号写完了以后

然后INT 21H 这两行语句执行完

屏幕上就会出现一个光标在闪烁

就提示你可以敲一下键

你敲得哪一个键呢?

敲完了这个键

键盘的扫描码它会进去转换成ASCII码

存储在哪里呢?

存储在的地方就是这个子程序的出口参数

也就是说你敲了一下键

敲到哪里去了?

敲到AL里头了

这就是这个子程序固定的保证你的出口

也就是说你敲得这下键

它所对应的ASCII码在AL中

这就是它的出口参数

好 我们下边来看一个例

比如这几行指令

头上这两行红颜色的

就是刚才我们说单字符输入的

调用单字符输入这个子程序的这样一个指令

好 这两行指令执行完以后

屏幕上现在就开始有光标闪

这个光标闪以后它就提示你输入

因为这是只能单字符输入

所以你只能敲一下键

下面我们来看一下底下这几行指令

第一行指令

就第三行指令

这里是CMP AL和大写的Y

大写字母Y来比较

那么也就是说刚才我们说

这两行单字符输入

调用单字符输入这个子功能的程序完了以后

它的出口参数在AL里

也就是说你敲得这个键

的ASCII码在AL里

所以下边它就用AL值和Y去比

如果相等 转到YES

如果不相等 它再去跟N比

如果相等 就会转到NO

如果既不是Y 也不是N

那么会干什么呢?

它无条件的返回到GET KEY

也就是让你重新去敲一下键

所以这个是什么呢?

这个就是我们经常看到的那种

屏幕上会弹出一个对话框让你选择YES or NO

所以这个是汇编程序实现的一个

交互式的一个对话框

单字符输入很简单 因为只能敲一下键

所以它的出口在AL里没有问题

但是经常情况下更多的时候

我们会输入一串字符

所以这种时候

我们不可能把输入的字符都放在寄存器里

而必须放在内存里

那么下边我们就来学第二个功能

就是字符串输入的一个功能

这个功能

可以用来接收键盘上输入的一串字符

而输入的这一串字符又必须放在内存里

放在内存的这个

就接收你输入字符的内存区域

我们称为字符输入缓冲区

因为字符串输入的这个子功能

是别人设计的 不是我们设计的

比如人家到底是怎么设计的我们也不知道

但是人家有一个非常明确的要求

就是这个字符输入缓冲区

必须要有一种固定的格式

所以调用这样的子功能的时候

请大家一定要注意这个

输入缓冲区它的一个格式

这个格式是这样 它由三个部分来组成

首先它要有一个字节

这一个字节里头放的是什么呢?

也就是这个N1是什么意思?

是你需要定义的字符输入缓冲区的大小

也就是说你准备输入100个字符

那么你就是需要定义100个单元 至少是这样

那么这个N1就等于100

那么这是第二个单元里头

它还要让你留出一个单元

这个单元里是你实际键入的字符个数

比如你现在希望输入几十个字符

那么你就定义了100个字符的存储空间

那么结果你敲了一下"HELLO"你就不想敲了

也就是说"HELLO"只有几个字符呢?

H E L L O 这只有5个字符

所以你实际敲得键实际上只有5个

那么这个实际的键入的个数

是系统自动去数的 根据你敲了几下键

它在N2这个位置上就填上几

那么从这到这里

是可以让你实际输入字符的存放处

比如你定义了10个字符空间

但是你最多只能敲9个字符

为什么 因为你敲完了之后我们必定要回车

而回车也是一个ASCII码

它一定要占用一个字节单元

所以这个整个才是你的缓冲区的大小

因此 这里的N1

一定要等于这个缓冲区的大小

也就是说缓冲区要定义10个字符

那么你这个N1就要等于10

缓冲区等于100个字符 N1就等于100

因为这个N1必须是字节

所以这个缓冲区最大只能是255

字符输入

字符串输入这个功能号是10号功能

缓冲区的定义格式

必须按照刚才我们那样的格式来定义

所以它的使用它的方法就是这样

首先 我们把10号功能10送进AL里

然后这个缓冲区

它要求你必须定义在数据段

缓冲区的首地址必须送给DX

这个请大家注意

DX不是我们第三章学的间指寄存器之一

我们在上一讲讲

在上一章里讲指令系统的时候

我们曾经讲到寄存器间接寻址里头

能够放进方括号里作为间指寄存器表示

操作数偏移地址的寄存器

也就是叫间指寄存器 只有四个

DX DP SI DI

没有这个DX

但是在这个功能号里头

它要求你这个缓冲区必须定义在数据段

而且这个偏移地址必须送给DX

这个没有办法 这是别人规定的

然后 我们INT 21H

我们也做一个简单的练习来说明

比如我们定义了这样一个字符串的

在数据段里定义了这样一个字符输入缓冲区

大家看这个缓冲区的格式

就是我们刚才说到的那三个部分

第一个部分是我准备定义的缓冲区的大小

就是20 现在是20

第二个我们可以用一个问号

你也可以写成0

你其实写成任何数字都不要紧

但是一定要把这个位置留下来

留下来干什么?

留给系统来数你敲了几下键

你敲了5 这里面就是5

你敲了6 就是6

请注意这个敲得几下键里头不包含

回车键

也就是说 比如你敲1 2 3 4 5

然后回车

那么问号这个地方会是5

会变成5 而不包括那个回车

那么第三部分就是你真正

输入的字符串所存放的地方

现在这个地方

必须要和前面你所希望定义的那个大小要一致

你希望它定义20

所以后边就是20个字节单元

用DUP这样的重复操作符来定义

这就是字符输入缓冲区的格式

请大家务必注意

这个是我们调用操作系统内核

INT 21H这个功能包里10号功能

它所要求的字符输入缓冲区的格式

我们一般意义上的缓冲区不需要这样的格式

在数据段里定义了一个这样的字符输入缓冲区之后

我们在代码段里就可以用这样三行语句

来接收字符串了

比如现在这三行语句第一行我们说

把这个缓冲区的首地址DAT1送给DX

第二行是功能号10送给AH

然后INT 21H

这三行指令执行完了以后

屏幕上也同样出现这样一个光标闪烁的界面

字符界面

这个时候你就可以在里面不仅敲一个字符了

你可以敲一串字符

当然你最多可以敲多少呢?

因为现在你定义的缓冲区的大小是20

所以你最多可以敲19个字符

然后是回车键

刚才我们定义的这样一个字符输入缓冲区

我们用内存这样一个图来看

就是这样的格式

第一个单元里将会是20所对应的

二进制或者十六进制的形式 就是14H

第二个单元里我这里给大家用了问号表示

当然实际上不可能显示成问号

就是一个随机值吧

等你开始敲键盘以后这个随机值马上就归零

根据你敲得这个个数 然后它填进去

然后只有在这个DX加2

也就是说从第三个单元开始

是你实际键入的字符所存放的地方

最后一个单元一定是回车符

所以刚才定义了20个字节单元的缓冲区的大小

现在你最多只能输入19个字符

这个就是字符输入

字符串输入的一个功能号

第三个我们来看一下单字符显示输出

我们刚才

单字符输入和字符串的输入我们都讲完了

那么像那两种输入

它整个调用的人家的子程序

它的入口参数 入口就是键盘

所以它没有一个明确的 没有一个入口了

没有入口参数的设置了

但是它的出口一定要有

对于单字符的输入它的

你敲了一下键出到哪里去了?

出到AL寄存器里

对于字符串的输入出到哪里去了?

出到你定义的那个字符输入缓冲区里了

但是字符的显示输出它的出口在哪里呢?

出口就是屏幕

所以它现在需要你设置入口

也就是说你要准备显示的东西放在哪里

然后它才会负责把你放到屏幕上去

那么对于单字符的显示输出

因为只显示一个字符

一个字符就是它对应的ASCII码

这个ASCII码就是8位的

所以它要求把你要显示的这个字符的ASCII码

送给DL寄存器

它的功能号是2号 然后INT 21H

这样子完了以后

你在DL里头的那个字符就会被显示在屏幕上了

比如我们执行这样子三行语句

我们功能号2送给AH

然后给DL里送了41H

这个41H是什么玩意呢?

是大写字母A的ASCII码

所以这三行指令执行完以后

屏幕上就会显示出一个大写字母A

这就是我们的第三个功能号

单字符的显示输出

可能你马上就会想到

你显示一个字符你可能还需要显示一串字符

所以我们下一个功能号就是

字符串的显示输出了

字符串显示输出的功能号是9

你写09H 写9都可以

就像刚才我们的字符串输入功能号是10

你写10 写0AH都没有问题

因为编译器都给你统统的翻译成二进制数了

字符串的显示输出同样的它的输出出口就是屏幕

所以它的入口就是字符

因为要显示输出的字符串在汇编程序里

要求你事先必须要定义好这个字符串

这个字符串的定义是这样

它要求你必须定义在数据段

而且这个首地址也必须由DX来标示

这个和字符串的输入是一样的

所以下边我们来说一下

就是怎么样来定义这个字符串

字符串的显示输出请大家要注意这么几点

首先我们回忆一下我们介绍的数据定义伪指令

我们定义的字符 字符串

必须用DB伪指令来定义

在汇编程序里头要求

字符串定义完了以后 后边需要加一个'$'

这个'$'是作为字符串结尾的一个标识

字符显示

字符串的显示输出

不能够接收那些不能显示的字符的ASCII码

所以你要想显示一定是要可显示的

如果你显示的字符串

希望能够有一些格式上的控制或者美观的话

那么会需要做一些简单的处理

请大家注意这种是我们操作系统最底层的东西

而且最是

刚才我们已经明确讲它是DOS

所以DOS的界面就是字符界面

不是我们今天WINDOWS的这种可视化的界面

所以我们今天在WINDOWS环境下

我们可以把我们的文本 文档处理的非常漂亮

我们要显示出来的东西都可以编辑的很好

这个实际上是借助了很多的工具软件

在字符界面下没有任何的工具软件

所以你希望把这些字符怎么处理

全部要靠这些你自己用语言去处理

好 下边我们先做一个最简单的介绍就是

怎么样能够实现你显示完了字符之后

光标不是在你最后一个字符的底下闪

而是会回车或者换行在你的下一行闪烁

我们用例子来说明

我们刚才说字符串的显示输出必须要

必须要事先定义你要显示的字符串

而且这个字符串又必须要定义在数据段里

所以下边我们假设现在这个DATA段就是数据段

在这里我们定义一个变量 名字叫MESS1

然后字符串定义必须用DB伪指令

然后定义了这样一个字符串

用双引号或者单引号括起来都是可以的

那么在这里我们

大家看我们准备要显示的这个字符串就是

'Input string:'

如果没有后面红颜色的这个0DH 0AH

可以 没有任何问题

就是'Input String:' 后面'$'

这就是一个完整的字符串的定义了

但是定义完了以后你接着如果执行这样

在代码段中执行这样三行指令

就是9号功能送给AH

然后MESS1的偏移地址送给DX

然后INT 21H这三行指令执行完了之后

屏幕上会显示的'Input String:'

就是如果没有红颜色的这个0D和0AH的话

光标就会在冒号底下闪烁

那么这句话的意思显然是提示你

接着可以再输入了

那么因为光标在冒号底下闪

所以你接着输入的会把冒号覆盖

而且会紧跟在这个String后边

就是那个'g'这个字母的后头

所以显然就有点不合适

那么0DH我们刚才已经看到

它是回车符的这个ASCII码

所以如果你有了回车符 有了0DH在后面的话

那么在执行这三行指令之后

这个光标就会在冒号的后边闪

那么这样子的话你可以接着

比如说写一个HELLO

那么这个HELLO看上去还比较协调

那么如果你希望输入的HELLO

在你这个'Input String:'的下一行来闪

那么这个时候你就要加上0AH

0AH是换行符的ASCII码

所以如果在你定义的这个字符串的后边

又定义了0DH和0AH的话

那么执行完下边这个三行指令

调用了字符串的显示输出功能号之后

屏幕上会是这样子的一种形式

也就是说光标会在下一行去闪烁

这是我们字符

单字符的输入和输出

以及字符串的输入和输出

这样四种基本功能子程序的介绍和它的使用

最后我们来介绍一个返回操作系统的功能号叫4CH

我们在这之前看到的所有程序

我们最后一行指令通常用的都是HLT

就是暂停执行的指令

实际上那条指令我们在正常程序运行的时候

我们通常不会用这条指令来结尾

因为这条指令结尾的话这个程序有可能会造成死机

它不能够正常的返回操作系统

而下边这个功能号会保证你的程序

无论有没有显示输出

就是说有没有在屏幕上有结果

它都一定能够正常的返回操作系统

这个功能号叫4CH

它的调用格式是这样

就是把4CH送给AH这是一样的

然后INT 21H

没有任何的参数 输入输出参数

因为它就是一种功能性的子程序

它就是保证程序执行完以后能够正常的返回系统

因此这两行指令在我们未来的程序设计中

都是要处于整个程序的最结尾处

也就是执行完这两行指令

你的程序就执行结束了

好 有关我们系统功能调用主要是

软中断 也就是类型码为21H的DOS软中断

子程序功能里边的5个子功能

我们就介绍完了

下边我们做个简单的小节

所有的DOS功能

DOS功能包 不管是它中断类型码为21H

还是20H 还是其他H

它都是通过中断指令来调用的

每一个功能 每一个类型码

对应着一个功能包

每一个功能包里都有若干个子功能

而对这些子功能的区分

都是通过功能号来区分的

所以要使用的时候不仅仅要

用INT指令后边要给出中断类型码

还必须要把功能号送给AH

请大家在使用的时候一定要注意每一个子功能

它对入口参数和出口参数的要求

因为这些子程序或者说整个的操作系统

微软公司都没有开源

所以我们不知道别人是怎么编的

但是实际的情况说明

我们现在学到的所有的子功能

它们的执行都会对AX寄存器产生影响

对AH寄存器的影响显而易见

因为你把功能号已经送给AH

但是在整个子程序的运行过程中

它们会对AX的值进行修正

所以 希望大家如果在调用这些子功能之前

AX的内容很重要的话

那么调用之前一定要通过

PUSH指令或者其他的方法

要把AX的内容保存了

然后你再去调用这些子功能

调用完了以后你自己再去把它恢复

好 有关系统功能调用我们就介绍到这里

微机原理与接口技术课程列表:

第1周 微型计算机基础概论

-第1讲 关于本课程

--关于本课程

-第2讲 微型计算机系统

--微机系统_01

--微机系统_02

-第3讲 微型计算机一般工作过程

--微机的一般工作过程_01

--微机的一般工作过程_02

-第4讲 数制与编码

--常用计数制及其转换

--计算机中的编码

-第5讲 计算机中数的表示与运算

--数的表示

--符号数的表示

--数的表示与运算

-第6讲 基本逻辑运算与逻辑电路

--基本逻辑运算与逻辑门

--常用逻辑运算及电路

-第7讲 本周小结

--本周小结

-第1周 微型计算机基础概论--第一周单元测验

第2周 8088微处理器

-第8讲 8088微处理器

--8088 CPU_01

--8088 CPU_02

-第9讲 8088 CPU主要引线及机构

--8088 CPU主要引线

--8088 CPU内部结构

--8088 CPU内部寄存器

-第2周 8088微处理器--第二周单元测验

第3周 实模式存储器寻址与总线

-第10讲 实模式存储器寻址

--实模式存储器寻址_01

--实模式存储器寻址_02

--实模式存储器寻址_03

-第11讲 8088系统总线

--8088系统总线

-第12讲 微处理器小结

--微处理器小结

-单元测验--作业

第4周 数据传送指令

-第13讲 指令概述

--指令概述

-第14讲 寻址方式

--寻址方式

-第15讲 通用数据传送指令

--通用数据传送指令_01

--通用数据传送指令_02

--通用数据传送指令_03

-第16讲 地址传送指令

--地址传送指令

-第17讲 输入输出指令

--输入输出指令

-第4周 数据传送指令--第四周单元测验

第5周 算术运算、逻辑运算与移位操作指令

-第18讲 算术运算指令

--加法运算指令

--减法指令

--乘除运算指令

-第19讲 逻辑运算指令

--逻辑运算指令_01

--逻辑运算指令_02

-第20讲 移位操作指令

--移位操作指令

-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验

第6周 串操作指令

-第21讲 关于串操作指令的说明

--串操作指令说明

-第22讲 串传送与串比较

--串传送与串比较

-第23讲 串扫描指令

--串扫描指令

-第24讲 串装入与串存储指令

--串装入与串存储指令

-第六周单元测验--作业

第7周 程序与处理器控制

-第25讲 程序控制指令说明

--程序控制类指令说明

-第26讲 转移类指令

--无条件转移指令

--条件转移指令

-第27讲 循环控制指令

--循环控制指令

-第28讲 过程调用指令

--过程调用指令

-第29讲 中断指令

--中断指令

-第30讲 处理器控制指令

--处理器控制指令

-第31讲 指令系统小结

--指令系统小结

-第7周 程序与处理器控制--第七周单元测验

-第7周 程序与处理器控制--第七周作业

第8周 汇编语言程序设计

-第32讲 汇编语言源程序

-- 汇编语言源程序_01

-- 汇编语言源程序_02

-第33讲 伪指令

--数据定义伪指令

--符号与段定义伪指令

--汇编语言源程序结构例

--其它伪指令

-第34讲 系统功能调用

--系统功能调用_01

--系统功能调用_02

-第35讲 汇编语言程序设计示例详解

--程序设计示例1

--汇编语言程序设计示例_02

-第36讲 汇编语言程序设计小结

--汇编语言程序设计小结

-第8周 汇编语言程序设计--第八周单元测验

-第8周 汇编语言程序设计--第八周作业

第9周 半导体存储器

-第37讲 半导体存储器概述

--半导体存储器概述

-第38讲 内存单元编址

--存储单元编址

-第39讲 随机存取存储器RAM

-- RAM_01

--RAM_02

-第40讲 只读存储器ROM

--ROM_01

--ROM_02

-第九周单元测验--作业

第10周 半导体存储器扩展技术

-第41讲 半导体存储器扩展

--半导体存储器扩展_1

--存储器扩展_2

--半导体存储器扩展_3

-第42讲 半导体存储器小结

--半导体存储器小结

-第十周单元测验--作业

-第十周作业--作业

第11周 输入输出与中断技术

-第43讲 基本I/O接口

--I/O系统概述_01

--I/O系统概述_02

-第44讲 简单接口芯片

--简单接口芯片

-第45讲 基本输入输出方法

--基本I/O方法

-第46讲 简单I/O控制系统设计

--简单I/O控制系统设计1

--简单I/O控制系统设计2

-第47讲 中断技术

--中断技术1

--中断技术2

-第48讲 输入输出与中断技术小结

--本周小结

-第十一周单元测验--作业

第12周 可编程并行数字接口

-第49讲 可编程定时计数器

--可编程定时计数器8253_01

--可编程定时计数器8253_02

--可编程定时计数器8253_03

-第50讲 可编程并行接口

--可编程并接口8255_01

--可编程并行接口8255_02

--可编程并行接口8255_03

-第51讲 可编程接口小结

--本周小结_01

--本周小结_02

-第十二周单元测验

第13周 模拟量的输入输出

-第52讲 模拟量的输入输出

--模拟量的输入输出

-第53讲 D/A转换器

--D/A转换器_01

--D/A转换器_02

-第54讲 A/D转换器

-- A/D转换器_01

--A/D转换器_02

-第十三周单元测验--作业

第14周 系统综合设计示例详解

-第55讲 I/O接口系统综合设计示例详解I

--综合设计示例详解I_01

--综合设计示例详解I_02

-第56讲 综合设计示例详解II

--综合设计示例详解II_01

--综合设计示例详解II_02

-第57讲 结束语

--结束语

系统功能调用_02笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。