第六章第八章汇编语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1E
1F
软盘参数表
字符点阵结构参数表
BIOS中断向量
DOS中断向量
地址(Hex)
80—83 84—87 88—8B
类型码
20 21 22
中断名称
程序结束,返回DOS DOS系统功能调用 程序结束地址
8C—8F
90—93 94—97 98—9B 9C—9F A0—FF 100—17F
23
24 25 26 27 28—3F 40—5F
表8-3 中断向量表
地址(Hex) 类型码 中断名称 0—3 0 除以0 4—7 1 单步
8—B C—F 2 3 非屏蔽 断点
地址(Hex) 类型码 40—43 44—47 48—4B 4C—4F 50—53 54—57 58—5B 5C—5F 60—63 64—67 10 11 12 13 14 15 16 17 18 19
ຫໍສະໝຸດ Baidu
无条件传送流程
查询传送流程
8.3
中断传送方式
查询式传输过程的优点是硬件开销小,使用起来 比较简单。但在此方式下,CPU要不断地查询外设的状 态,当外设未准备好时,CPU就只能循环等待,不能执 行其它程序,这样就浪费了CPU的大量时间,降低了主 机的利用率。 为了解决这个矛盾,可采用中断传送方式。
8.3.2
中断向量表
中断传送流程
8.3.1
8086中断的分类:内部中断和硬件中断
(1)内部中断 内部中断简称内中断,又称软件中断。它不需要外部硬件 支持。并且不受中断标志位状态的影响。8086/8088内部中断 有以下5种: l 除数为0中断——类型0中断 l 溢出中断——类型4中断INTO l 单步中断——类型1中断 l 断点中断——类型3中断 由cpu的某些错误引起
该功能调用与1号功能的作用相似,区别是7号功能将不显 示输入的字符。调用方法为:
MOV AH,07H
INT 21H
3、2号系统功能调用——显示输出
功能:向输出设备输出一个字符。 入口参数:DL=输出字符的ASCII码。 出口参数:无 例:MOV DL,′A′; “A”为要求输出字符的ASCII码 MOV AH,2 INT 21H
子程序处理的数据被保存在寄存器AL 中。假设有下列的程序段: … MOV AL, ‘b’ CALL UPPER ;子返回时(AL)=? … MOV AL, ‘2’ CALL UPPER ;子返回时(AL)=?
8
(2) 通过存储器传送参数
• 在调用子程序时,当需要向子程序传递大量数据 时,因受到寄存器容量的限制,就不能采用寄存 器传递参数的方式,而要改用约定存储单元的传 送方式。 • 所处理的数据不是直接传给子程序,而是把存储 它们的地址告诉子程序。
(1) 保存返回地址 (2) 转子程序
(SP)→
(IP)
call far ptr subp
(1) 保存返回地址 (2) 转子程序
(SP)→
(IP) (CS)
子程序返回:ret
4
3.
保存与恢复寄存器
subt proc
push push push push …… …… pop pop pop pop
ret
4、9号系统功能调用——显示字符串
功能:将指定的内存缓冲区中的字符串送屏幕显示。 入口参数:DS∶DX指向缓冲区中字符串首址,字符串以“$” 字符作为结束标志。 出口参数:无
5、4CH号系统功能调用——返回操作系统
功能:结束当前正在执行的程序,并返回操作系统,屏幕显 示操作系统提示符(C:\>,C为当前使用的驱动器名)。 入口参数:无 出口参数:无 mov ah,4ch int 21h ;返回DOS
CPU与外设之间的数据传送方式有:程序直接控制 I/O方式、 中断方式 和 DMA方式。主要讲解前两种方式。
8.2
程序直接控制I/O方式
1)无条件传送:每次进行输入/输出之前,不需要 查询外设的状态. 2)有条件传送:又称查询式传送,在每次输入/输 出之前,先要读取外设的状态,满足一定的条件 才能进行一次I/O操作。
第6章
子程序结构
在程序设计中,我们会发现一些多次无规 律重复的程序段或语句序列。解决此类问题 一个行之有效的方法就是将它们设计成可供 反复调用的独立的子程序结构,以便在需要 时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。
1
1.
过程定义伪操作
过程名 PROC . . .
far
ax bx cx dx
dx cx bx ax
subt
endp
5
4.
子程序的参数传送
(1) 通过寄存器传送参数 (2) 通过存储器传送参数 (3) 通过地址表传送参数地址 (4) 通过堆栈传送参数或参数地址
6
(1) 寄存器传递参数
由于CPU中的寄存器在任何程序中都是“可见”的,一 个程序对某寄存器赋值后,在另一个程序中就能直接使用, 所以,用寄存器来传递参数最直接、简便,也是最常用的参 数传递方式。但另一方面,CPU中寄存器的个数和容量都是 非常有限,所以,该方法适用于传递较少的参数信息。
INT 21H
调 用 号
功能
入口 参数
出口 参数
AL=输 入的 字符
键盘输 01H 入字符 DL=显 显示输 02H 示的 出 字符 键盘输 入字符 07H (不显 示) DS:DX 显示字 =缓冲 09H 符串 区首 址
4*21 类型21的(IP) 类型21的(CS)
DOS功 能调用
AL=输 入的 字符
CTRL_BREAK退出地址
标准错误出口地址 绝对磁盘读 绝对磁盘写 程序结束,驻留内存 为DOS保留 保留(扩充BIOS中断向量)
180—19F
1A0—1FF 200—217 218—3C3
60—67
68—7F 80—85 86—F0
为用户软中断保留
不用(其中70—77为I/O设备中断向量)
BASIC使用 BASIC运行时,用于解释
3C4—3FF
F1—FF
未用
DOS的系统功能调用
一、DOS系统功能调用概述
•DOS操作系统为程序设计人员提供了可以直接调用的功能 子程序。调用这些子程序可以实现从键盘输入数据,将数 据送显示器显示,以及磁盘操作等功能。 •DOS系统功能调用方法: DOS操作系统的功能调用都是利用 INT 21H中断指令实现的,每个功能调用对应一个子程序, 并有一个编号,称功能号。 1)将入口参数传送到指定寄存器中; 2)子程序功能号送入AH寄存器中; 3)发软中断指令“INT 21H”。
8.1 I/O设备的数据传送方式
8.1.1 CPU与外设
每种输入输出设备都是通过硬件接口或控制器与 CPU相连接,这些接口都能支持输入输出指令IN,OUT与 外部设备交换信息,这些信息包括控制、状态和数据三 种不同性质的信息。
地址总线 AB 输 入 设 备 输 出 设 备 数据总线 DB 控制总线 CB
subr1 proc …… ret subr1 endp
subr1
subt near call
seg1 seg2
ends segment
…… far ptr subt ……
code ends
call
seg2
ends
3
2.子程序的调用与返回
子程序调用:隐含使用堆栈保存返回地址 call near ptr subp
CPU
存 储 器
I/O 接 口
I/O 接 口
控制信息:是由CPU发送给外部设备的,命令其处于某种方式 或执行某种操作。
状态信息:从接口输入的状态信息表示I/O设备当前的状态。
数据信息:则是I/O设备和CPU真正要交换的信息。数据信息 可分为三种类型:数字量、模拟量和开关量。这些信息可以是 并行的,也可以是串行的。
8
9 A B
定时器
键盘 保留的硬中断
68—6B
1A
1B 1C 1D
时间调用
键盘CTRL-BREAK控制
异步通信(COM2) 6C—6F
30—33
34—37 38—3B 3C—3F
C
D E F
异步通信(COM1) 70—73
硬盘 软盘 并行打印机 74—77
定时器报时 显示器参数表
78—7B
7C—7F
二、常用的几种DOS功能调用
1、带显示的键盘输入(1号功能) 功能:系统扫描键盘并等待输入一个字符,有键按下时将字符的 键值(ASCII码)送入寄存器AL中,并在屏幕上显示该字符。 MOV AH,01H
INT
21H
入口参数:无 出口参数:AL=读到 字符的ASCII码
2、不带显示的键盘输入(7号功能)
NEAR ( FAR )
过程名 ENDP
(1)NEAR属性:调用程序和子程序在同一代码段中 (段内调用)
(2)FAR属性:调用程序和子程序不在同一代码段中 (段间调用)
2
code segment
……
seg1
subt
segment
proc …… ret endp …… subt …… far
call ……
7
例1:编写一个子程序UPPER,实现把寄存器AL中存放的字 符变大写。
解: ;子程序功能:把AL中存放的字符变大写 ;入口参数:AL ;出口参数:AL ;算法描述:判断AL中字符必须在’a’~’z’之间才能把该字符变为大 写
UPPER PROC CMP AL, ‘a’ JB over CMP AL, ‘z’ JA over SUB AL, 20H over: RET UPPER ENDP
中断名称 视频显示I/O调用 设备检测调用 存储器容量检测 软/硬盘I/O调用 通信I/O调用 盒式磁带I/O调用 键盘I/O调用 打印机I/O调用 ROM BASIC 引导程序入口
10—13
14—17 18—1B 1D—1F
4
5 6 7
溢出
打印屏幕 保留 保留
20—23
24—27 28—2B 2C—2F
5.
子程序的嵌套与递归调用
子程序的嵌套: 主程序
…… call proc_A ……
子程序A
proc_A
子程序B
proc_B
…… ret
……
call proc_B …… ret
11
第八章 输入输出程序设计
计算机系统是通过硬件接口(或控制器 )以及 输出输出程序对外部设备实现处理和控制的。而汇 编语言能直接控制硬件,因此就成为编写输入输出 程序的最有效的语言。
为调试程序而设置的中断
l 中断指令——指令INT n中断
8.3.2
中断向量表
•在8086系统中,内存最低端 的1K字节地址范围内(从 00000-003FFH),放置256 个中断的中断向量(入口地 址),即称为中断向量表。
•每个中断矢量在表中占据4 个字节,地址较高的两个字 节放入口地址的段地址,地 址较低的两个字节放偏移地 址。 •中断向量表中的存储地址 =中断类型码n×4
9
例:累加数组中的元素(通过存储器传送参数)
proadd proc near data segment push ax ary dw 1,2,3,4,5,6,7,8,9,10 push cx count dw 10 push si sum dw ? lea si, ary data ends mov cx, count code segment xor ax, ax assume cs:code,ds:data next: add ax, [si] mov ax, data add si, 2 mov ds, ax loop next mov sum,ax call proadd pop si pop cx mov ax,4c00h pop ax int 21h ret code ends proadd endp