第8章汇编语言
CH8Y-新概念汇编语言-杨季文-清华大学出版社

ASM YJW
8.4.1 键盘中断处理程序
➢演示程序dp81 第二部分之,
CLI ;关中断
键盘中断处理程序的主体(续)
MOV AL, 0AEH
OUT PORT_KEY_STA, AL ;允许键盘发送数据到接口
;
MOV AL, 20H
;通知中断控制器8259A
OUT 20H, AL
;当前中断处理已经结束
INT 10H ;
用户按键
CMP AL, 0DH
JNZ Next ;
IRET
MOV AH, 14
MOV AL, 0AH INT 10H
前台
后台
;
RETF ;结束(返回到加载器)
ASM YJW
8.4.1 键盘中断处理程序
➢演示程序dp81 第二部分之,
后台
键盘中断处理程序的主体
int09h_handler:
;
POPA
;恢复通用寄存器 告诉中断控制器,
;
中断处理结束
IRET
;中断返回
ASM YJW
8.4.1 键盘中断处理程序
➢演示程序dp81 演示9H号中断处理程序的具体功能
Int09hfun: CMP AL, 1CH JNZ .LAB1 MOV AH, AL MOV AL, 0DH JMP SHORT .LAB2
键盘中断的类型是9
ASM YJW
8.4.1 键盘中断处理程序
➢演示程序dp81
Next:
MOV
前台
INT
MOV
INT
;
CMP
JNZ
;
MOV
MOV
INT
;
RETF
AH, 0 16H AH, 14 10H
IBM—PC(80x86)汇编语言与接口技术-第8章 输入输出程序设计

8259A
76 5 4
中断屏蔽寄存器21H
打 印 机
3210
IN AL, 21H AND AL,0FDH
键定 时
盘器
OUT 21H,AL
76 5 4
中断命令寄存器20H
EOI
3 2 1 0 MOV AL, 20H OUT 20H, AL
11
中断向量表
00000 类型0的(IP) 类型0的(CS)
00004 类型1的(IP) 类型1的(CS)
speaker_on endp
speaker_off proc push ax in al, 61h and al, 0fch out 61h, al pop ax ret
speaker_off endp
end
8
3. 中断传送方式
中断源:引起中断的事件
外中断(硬中断):
外设的 I/O 请求 —— 可屏蔽中断 电源掉电 / 奇偶错 —— 非屏蔽中断
15
例:用 DOS 功能调用存取中断向量
MOV AL, N
MOV AH, 35H
INT 21H
PUSH BX
; 保存原中断向量
PUSH DS
MOV AX, SEG INTHAND
MOV DS, AX
MOV DX, OFFSET INTHAND
MOV AL, N
MOV AH, 25H
08 系统定时器 09 键盘 0A 彩色/图形接口 0B 保留 0C 串行通讯口 0D 保留 0E 软盘 0F 打印机
10
中断的条件:
设置CPU中断允许位:
FLAGS 中的 IF 位 = 1 允许中断 ( STI ) = 0 禁止中断 ( CLI )
汇编语言基础知识

第1章汇编语言基础知识汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效地应用汇编语言对其编程,因此,本章对硬件系统结构的问题进行部分探讨,首先介绍了计算机的基本结构、Intel公司微处理器的发展、计算机的语言以及汇编语言的特点,在此基础上重点介绍寄存器、内存组织等汇编语言所涉及到的基本知识。
1.1微型计算机概述微型计算机由中央处理器(Central Processing Unit,CPU)、存储器、输入输出接口电路和总线构成。
CPU如同微型计算机的心脏,它的性能决定了整个微型计算机的各项关键指标。
存储器包括随机存储器(Random Access Memory,RAM)和只读存储器(Read Only Memory,ROM)。
输入输出接口电路用来连接外部设备和微型计算机。
总线为CPU和其他部件之间提供数据、地址和控制信息的传输通道。
如图1.1所示为微型计算机的基本结构。
图1.1微型计算机基本结构特别要提到的是微型计算机的总线结构,它使系统中各功能部件之间的相互关系变为各个部件面向总线的单一关系。
一个部件只要符合总线结构标准,就可以连接到采用这种总线结构的系统中,使系统功能得到扩展。
数据总线用来在CPU与内存或其他部件之间进行数据传送。
它是双向的,数据总线的位宽决定了CPU和外界的数据传送速度,8位数据总线一次可传送一个8位二进制数据(即一个字节),16位数据总线一次可传送两个字节。
在微型计算机中,数据的含义是广义的,数据总线上传送的不一定是真正的数据,而可能是指令代码、状态量或控制量。
汇编语言程序设计2地址总线专门用来传送地址信息,它是单向的,地址总线的位数决定了CPU可以直接寻址的内存范围。
如CPU的地址总线的宽度为N,则CPU最多可以寻找2N个内存单元。
控制总线用来传输控制信号,其中包括CPU送往存储器和输入输出接口电路的控制信号,如读信号、写信号和中断响应信号等;也包括其他部件送到CPU的信号,如时钟信号、中断请求信号和准备就绪信号等。
汇编语言程序设计

《汇编语言程序设计》课程教学大纲学时:32 学分:2理论学时:24 实验学时:8面向专业:电科、电信、通信课程代码:B2700009先开课程:C语言程序设计课程性质:必修执笔人:王艳春审定人:陈龙猛、张金政第一部分:理论教学部分一、说明1、课程的性质、地位和任务本课程属于专业基础课,是电科、电信和通信专业学生必修的核心课程之一,是进一步学习微机原理、操作系统等课程的基础。
掌握它有助于提高学生对计算机系统的设计、研究、开发和应用能力。
汇编语言是一种面向机器、实践性很强的程序设计语言,必须结合一种实际的计算机来组织教学。
因此,本课程选择最广泛使用的IBM PC作为具体的机型来介绍。
通过课堂教学和上机实践,培养学生用汇编语言进行编程的思路、方法,养成良好的程序设计习惯,并了解底层I/O 驱动软件的编程方法,熟悉源程序汇编、链接和调试运行的步骤和方法,掌握dos、BIOS功能的调用方法及使用debug工具的调试手段,为后续课的学习打下扎实的基础。
2、课程教学和教改基本要求课程的目的与教学基本要求:本课程主要介绍汇编语言和宏汇编的基本概念,80X86CPU的指令系统和寻址方式;介绍汇编语言程序格式、伪操作和上机全过程。
通过实际例子,详细叙述顺序、分支、循环、子程序等基本程序结构以及程序设计的基本方法和技巧。
学习这门课程,应达到以下几个要求:①掌握汇编语言的基本理论知识和有关概念;掌握用汇编语言编写源程序的基本原则、方法和技巧;②具有阅读,分析汇编语言程序的能力;③通过上机实践,能够熟练地掌握汇编语言程序的编辑、汇编、连接、运行过程及debug工具的调试手段。
课堂授课采用多媒体教学,采用由浅入深、循序渐进学习步骤,主要讲解设计思想、实现技巧,通过提问题引导学生思考,提高学生的学习兴趣,从而加深学生对理论课的理解,提高学生的动手能力。
二、教学内容与课时分配第一章基础知识(2学时)1.1 机器语言及汇编语言的产生1.2 汇编语言的组成1.3 存储器1.4 指令和数据1.5 存储单元及CPU对存储器的读写1.6 三大总线1.7 主板、接口卡及各类存储器芯片1.8 内存地址空间教学的重点与难点:指令和数据在内存或磁盘上没有区别;内存地址空间。
第8章+汇编语言与C的混合编程

第八章
汇编语言与C的混合编程
LOGO
本章要点
混合编程是指使用两种或两种以上的程序设计 语言,通过相互调用、参数传递、共享数据结 构和数据信息而形成程序的过程。采用高级语 言与汇编语言混合编程,从而充分利用各种程 序设计语言各自的优势,即程序的大部分采用 高级语言编写,以提高程序的开发效率;在某 些部分利用汇编语言编写,以提高程序的运行 效率。 Turbo C嵌入汇编方式 Turbo C模块连接方式 汇编语言在Visual C++中的应用
2)返回值的传递 被调用函数的返回值,按下列规则传递给调用 者:如果返回值小于或等于16位,则将其存放在AX 寄存器中;如果返回值是32位,则存放在DX.AX寄 存器对中,其中,DX存储高16位,AX存储低16位; 如果返回值大于32位,则存放在静态变量存储区, AX寄存器存放指向这个存储区的偏移地址;对于32 位far指针,则还利用DX存放段地址。 由此可见,汇编语言子程序向C程序返回处理 结果时,是通过AX和DX完成的。但对于不同长度 的返回数据,使用寄存器的情况也不同。
3)地址参数的传递 C语言程序的参数传递,可采用传数值和传地址两种 方式。如果参数是传值的,可直接写出实际参数;如果 参数是传址的,则在说明中将参数类型说明为指针类型, 调用时,用“&”取得变量的地址作为实参传递。 在汇编语言子程序中,利用基址指针BP,先取得地 址,再间接取内容,修改后送回原处,同时以RET返回。 以传址方式传送参数时,实际被压入堆栈的是参数 所在的逻辑地址。这个地址也要分为近指针(仅含偏移 地址)和远指针(含段地址和偏移地址)。C语言程序 以tiny、small、compact模式编译时,它以near近指 针传递地址,在堆栈占2字节;如果C语言程序以 medium、large、huge模式编译,则地址是32位的远 指针,在堆栈中要占4 字节。
ASM:《X86汇编语言-从实模式到保护模式》第8章:实模式下硬盘的访问,程序重定位和加载

ASM:《X86汇编语⾔-从实模式到保护模式》第8章:实模式下硬盘的访问,程序重定位和加载第⼋章是⼀个⾮常重要的章节,讲述的是实模式下对硬件的访问(这⼀节主要讲的是硬盘),还有⽤户程序重定位的问题。
现在整理出来刚好能和保护模式下的⽤户程序定位作⼀个对⽐。
★PART1:⽤户程序的重定位,硬盘的访问1. 分段、段的汇编地址和段内汇编地址NASM编译器使⽤汇编指令“SECTION”或者“SEGMENT”来定义段。
他的⼀般格式是SECTION 段名称或者SEGMENT段名称(段名称不能重复),另外NASM对段没有数量的限制,⼀个程序可以有很多的代码段和数据段。
Intel处理器要求段在内存中的其是物理地址起码是16字节对齐的,⽽NASM 提供了段的修饰符align,使每⼀个段可以16字节对齐或者32字节对齐,⽐如所谓段的汇编地址其实就是段内第⼀个元素(数据,指令)的汇编地址,16字节对齐的意思是所有段⾸的汇编地址都要可以被16整除,如果存在⼀个段要求16字节对齐,⽽这个段的前⼀个段长度不够使当前段不能16字节对齐,那么编译器会⾃动将前⼀个段补0来使这⼀个段满⾜16字节对齐。
NASM编译器提供以下形式section.段名称.start来获得段的汇编地址,⽐如:另外段还可以加⼀个vsart修饰符,因为在NASM编译器中,即使你定义了⼀个段,段的汇编地址就是段内第⼀个元素的汇编地址,但是在引⽤某个标号的时候(包括section.段名称.start),这个标号的汇编地址还是从整个程序的开头开始计算的,⽽不是对段⾸的偏移。
不过再加了vsart=0的时候,段内所有标号的地址都是相对于当前段⾸的偏移了(当然也可以设定为其他数值,标号的偏移值是在这个值的基础上加上与段⾸的偏移地址。
)2. ⽤户程序头部加载⼀个⽤户程序需要⼀个加载器(在实模式下),⽽加载器是不知道⽤户程序⾥⾯具体的结构和功能的,⼀个程序想要运⾏,那么这个程序就要满⾜运⾏环境的⼀些约定俗成的条件,也就是程序哪些部分要怎么写是固定的,现在我们在MBR加载⼀个程序也是⼀样的,只要⽤户程序在某些部分满⾜⼀些条件,我们的加载器就可以识别并加载它。
《汇编语言》各章习题答案

汇编语言各章习题答案习题一答案:1.1无符号数: 11010011=211=D3H,01110111=119=77H,10000011=131=83H,00101111=47=2FH,10101010=170=AAH带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H,00101111=+47=2FH,10101010= -86=AAH1.2 5E8AH,0BE6H,3DEH,4940H1.3 00011101+00110101=01010010=52H=8201001001+11101000=00110001=31H=4910111110+01010010=00010000=10H=1610011010+11110001=10001011=8BH= -1171.4 00101001+01010011=01111100+00000110=10000010=82H=8201110011-00100100=01001111-00000110=01001001=49H=4901100110+00011000=01111110+00000110=10000100=84H=840000000100110010+01110101=0000000110100111+00000110=0000001000000111=0207H=2071.5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H1.6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 1.7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码1.8(1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H(2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H(3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H(4) 254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD码0000001001010100,ASCII码323534H1.9(1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=11.10回车、换行、响铃、ESC键、空格键、@、P、p习题二答案:2.9最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)2.10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP2.11字节单元保存8位数,字单元保存16位数。
编译第8章

• 属性变量=属性表达式
1、属性文法定义
属性文法(attribute grammar)是一个三元 组:A=(G,V,F),其中 G:是一个上下文无关文法 V:有穷的属性集,每个属性与文法的一个终结符或非 终结符相连,这些属性代表与文法符号相关信息, 如它的类型、值、代码序列、符号表内容等等 .属 性与变量一样,可以进行计算和传递。属性加工 的过程即是语义处理的过程。 F:关于属性的属性断言或一组属性的计算规则(称为 语义规则) . 断言或语义规则与一个产生式相联,只 引用该产生式左端或右端的终结符或非终结符相 联的属性.
addtype
id3
addtype
例5-4:real id1,id2,id3 的分析树和属性计算
8.3 中间代码的形式
何谓中间代码: 源程序的一种内部表示,不依赖目标机的 结构,易于机械生成目标代码的中间表示。 为什麽要此阶段 逻辑结构清楚; 利于不同目标机上实现同一种语言; 利于进行与机器无关的优化; 这些内部形式也能用于解释;
• 语义处理
–例:变量的存储分配 –例:表达式的求值 –例:语句的翻译(中间代码的生成)
• 总目标:生成等价的中间代码
语义处理方法
• 对应每一个产生式编制一个语义子程序, 当一个产生式获得匹配时,调用相应的 语义子程序实现语义检查与翻译。 • 在产生式的右部的适当位置,插入相应 的语义动作,按照分析的进程,执行遇 到的语义动作。
8)若把语义子程序改成产生某种中间代 码的动作,就能在语法分析制导下,随 着分析的进展逐步生成中间代码。 9)若把语义子程序改成产生某种机器的 汇编语言指令,就能随着分析的进展逐 步生成某机器的汇编语言代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013-9-22
80x86汇编语言程序设计
3. 与键盘有关的BIOS数据:段地址为40H
键盘缓冲区:地址为40:1EH 变换键状态字节:地址为40:17H
4. 键盘硬件接口
端口64H:读端口64H,可获取主板上键盘微控制器的状态字节。
端口60H:保存键盘发送给CPU的扫描码或应答数据。
5. 实例
2..COM文件
只包含一个段,同时作为代码段、数据段和堆栈段。
在段首必须预留100H个字节的空间,装入内存后由PSP占用。
程序执行的起始偏移地址必须为100H。 磁盘上的.COM文件与装入内存后的内容完全一样,不包含文件头等附加信息。因此, 在.COM文件中不能(也没有必要)使用需要重定位的指令。
中断控制器通过端口20H和21H(用于IRQ 0 ~ 7)以及0A0H和0A1H(用于IRQ 8 ~ 15)与CPU通信。 其中,端口20H与0A0H对应于中断命令寄存器,端口21H与0A1H 对应于中断屏蔽 寄存器。
5. 发送中断结束命令的方法
向中断命令寄存器输出字节20H。如下所示。 mov al, 20h
2013-9-22
80x86汇编语言程序设计
7. CPU对可屏蔽中断的响应条件
该设备的中断请求未被屏蔽,即相应的中断屏蔽位为0。 CPU允许中断,即IF=1。
2013-9-22
80x86汇编语言程序设计
8.3 DOS与BIOS服务
1.DOS系统调用:INT 21H
AH = 25H:设置中断向量 AH = 35H:获取中断向量 AH = 31H:程序终止并驻留内存
2. 中断号
80x86系统允许256种中断,每种中断对应0 ~ 255之间唯一的编号,称为中断号或中 断类型号。
2013-9-22
80x86汇编语言程序设计
3. 中断向量与中断向量表
每种中断都有一个与之对应的中断服务程序。 在实模式下,将中断服务程序的入口地址称作中断向量, 存放256个中断向量的内存区域称为中断向量表。 每个中断向量占4个字节,用32位分段地址来描述。
I/O接口包含多个存放数据、状态和控制信息的寄存器,分别以端口地址标识。 数据的输入/输出是通过I/O端口实现的。 80x86系统通过I/O指令实现对I/O端口的读写。
I/O接口的功能越强、内部寄存器的种类和数量越多,程序设计就越复杂。
2.I/O指令
IN:端口输入 OUT:端口输出
中断向量表位于内存地址00000H ~ 003FFH,共1KB(256*4B)。
对于中断号n,中断向量所在地址为n ~ 4n+3。例如,0号中断的向量位于地址00000H, 1号中断的向量位于地址00004H,等等。 中断向量表在系统复位时初始化。
2013-9-22
80x86汇编语言程序设计
4. 中断响应
第8章 输入/输出与中断 讲授要点
I/O指令与I/O程序设计的基本方法。 80x86中断系统。 中断服务程序设计的基本方法。 DOS与BIOS服务的用途。 DOS环境下的可执行程序。 驻留程序设计(简介)。
2013-9-22
80x86汇编语言程序设计
8.1 输入/输出
1.I/O原理 因I/O设备种类繁多、工作原理各异,每个I/O设备都通过专门的I/O接口与系统相连。
当程序在执行前装入内存时,DOS确定当前可用内存的最低地址作为程序 装入的起点,在该起点处首先建立一个256(100H)字节的程序段前缀PSP (Program Segment Prefix),随后装入程序本身。 PSP中包含许多信息,但其中的大多数信息用处不大,有些因过时而已经 被弃用。
2013-9-22
键盘上每个键的位置编码。 每次按键产生两个扫描码,分别为接通扫描码(按下)和断开扫描码(释放)。
2. 键盘输入处理机制
每当按键动作产生时,系统做如下处理: ① 将扫描码放入I/O端口60H,并触发键盘中断INT 9。
② 如果允许键盘中断则进入INT 9的中断服务程序。
③ INT 9 ISR从端口60H读扫描码,并根据扫描码所对应的按键作相应处理。 对于某些扫描码为多个字节的键,每次按下会触发多次键盘中断。
out
20h, al
; 对于IRQ 8 ~ 15,使用端口0A0H
2013-9-22
80x86汇编语言程序设计
6. 禁止/允许相应的硬件中断的方法
中断屏蔽寄存器的8位对应8个硬件中断源, 其中,端口21H的第0 ~ 7位对应IRQ0 ~ IRQ7,端口0A1H的第0 ~ 7位对应IRQ8 ~ IRQ15。 通过设置某位为1/0,以禁止/允许相应的硬件中断。
3.可屏蔽中断INTR
(1)定时器中断:INT 8 系统主板包含一个定时器芯片(如8254),约每55毫秒(1/18.2秒)产生一次中断。 (2)键盘中断:INT 9 对于键盘的每个按键动作(按下与释放),都会触发键盘中断。
2013-9-22
80x86汇编语言程序设计
4. 中断控制器与CPU的通信端口
2. 中断返回指令:IRET
功能描述:从堆栈弹出一个双字到CS:IP,再弹出一个字到FLAGS。 对标志位的影响:由栈中弹出值确定。
2013-9-22
80x86汇编语言程序设计
3. INT与CALL的主要区别
CALL主要用来调用应用程序中的过程,而INT则用来调用系统服务程序。 过程可以有任意多个,而80x86系统最多只支持256个中断服务程序。 对过程的调用是指出过程地址,而对中断服务程序的调用则是给出中断号。 INT总是段间调用。 INT将标志寄存器和返回地址进栈,而CALL指令只将返回地址进栈。
2013-9-22
80x86汇编语言程序设计
8.2.3 中断分类
1. 中断分类
中断可分为下列3类。 (1)硬件中断(或称外部中断):由外部硬件触发的,如键盘按键等。 80x86系统的硬件中断包括两类:可屏蔽中断与非屏蔽中断(中断号为2)。 不能被禁止的中断称为非屏蔽中断。可以被禁止的中断称为可屏蔽中断。
• 必须保护所有要修改的寄存器,尤其是硬件中断或异常的ISR。 • 对于硬件中断服务程序,应在返回之前,向中断控制器发送中断结束命令。 主程序的基本结构。 实例。
2013-9-22
80x86汇编语言程序设计
8.5.2 驻留程序设计
(1)什么是驻留程序(TSR程序)?
驻留程序在执行结束后,使程序的一部分仍留在内存,受到操作系统的保护,可以由其 它程序再次激活。 (2)驻留程序的基本框架
2013-9-22
80x86汇编语言程序设计
本章小结
中断是CPU与I/O设备之间进行信息交换的一种方式,也是系统为应用程序提供服务的 重要手段。 80x86系统的中断可分为3种类型:硬件中断、异常和陷入。 • 硬件中断与当前指令的执行无关,是由外部硬件随机触发的。 • 异常是由指令执行中的错误等意外事件引起的。 • 陷入是程序员预期要执行的INT指令。 对于硬件中断或异常的处理程序,是由硬件或异常条件自动触发的,通常不应在程序 中以INT指令直接调用,如INT 9。 基于DOS的应用程序可通过下列三种途径来控制和访问硬件: • 通过I/O指令对硬件直接编程。 • 调用BIOS服务程序来访问硬件。 • 调用DOS提供的INT 21H功能来访问硬件。DOS扩充了BIOS的某些功能,提供了 更高级的I/O接口。
通常分为两部分:常驻部分和暂驻部分。当TSR程序执行时,由暂驻部分完成初始化, 将某个中断向量指向常驻部分对应的ISR,然后驻留退出。将来真正起作用的是常驻部分。
在设计TSR程序时,为了不浪费内存空间,最好将常驻部分放到低内存地址,使暂驻部 分位于高地址。较简单的方法是把要常驻的代码和数据组织在一个段中,并使之作为装入 内存的第1个段。
80x86汇编语言程序设计
8.4.2 .EXE文件与.COM文件
1..EXE文件
可以包含多个代码段、数据段和堆栈段,执行的起始地址可任意指定。 磁盘上的.EXE文件由两部分构成:文件头与程序本身。其中,文件头是由连接器 LINK生成的,包含文件的重定位等信息,供DOS装入文件时使用。 通常,段地址在程序装入内存前是无法确定的,因此,在.EXE文件中只能使用相对地 址,在装入内存时,根据程序装入的起始地址转换为绝对地址。
2.BIOS服务
(1)INT 10H:显示器输出 AH = 0AH:显示字符 AH = 0EH:显示字符
(2)INT 16H:键盘输入
AH = 0:从键盘读一键 AH = 1:判断是否有键可读 AH = 2:返回变换键的当前状态
2013-9-22
80x86汇编语言程序设计
8.4 DOS环境下的可执行程序 8.4.1 程序段前缀PSP
2013-9-22
80x86汇编语言程序设计
2.硬件中断、异常和陷入的区别
硬件中断与当前指令的执行无关,通常是由外部事件(如I/O设备的数据传送请 求、时钟中断等)所引起的,它的发生与指令的执行是异步的。 异常与陷入是由指令的执行而引起的同步事件,与当前指令密切相关。其中, 陷入是程序员预期要执行的处理程序,即INT指令。 硬件中断或异常的服务程序是由硬件或异常条件自动触发的,不应在程序中以 INT指令直接调用,如INT 9。
当中断发生时,由硬件自动完成下列工作: (1)标志寄存器FLAGS进栈。. (2)置IF = 0,TF = 0。
(3)返回地址(CS:IP)进栈。
(4)根据中断号n,从地址0:n×4取出4字节的中断向量,低字送IP,高字送CS。 (5)转去执行中断向量所指的中断服务程序。
2013-9-22
80x86汇编语言程序设计
CPU对硬件中断的响应时机是在一条指令执行完之后,中断处理后返回到下一条指令 继续执行。