汇编语言子程序及中断
- 格式:doc
- 大小:108.50 KB
- 文档页数:7
汇编中中断的概念
在汇编语言中,中断(Interrupt)是一种由硬件或软件引起的事件,它可以打断正在执行的程序并转移到一个预定义的位置,执行中断处理程序(Interrupt Service Routine,ISR)。
中断可以是内部的,例如硬件故障或软件异常,也可以是外部的,例如用户输入或定时器到期。
中断处理程序通常是一个特殊的子程序,用于处理中断事件。
当中断发生时,处理器会保存当前程序的状态(例如程序计数器、寄存器状态等),然后转移控制到中断处理程序。
中断处理程序执行完毕后,处理器会恢复之前的状态并继续执行原来的程序。
中断在操作系统和设备驱动程序中扮演着重要的角色。
例如,操作系统可以使用中断来响应用户输入、处理网络通信和管理硬件设备,而设备驱动程序可以使用中断来处理设备的输入和输出。
单片机外部中断实验(附c程序)一、实验目的掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。
二、实验内容8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能:(1)合上、P3.3断开时LED1闪烁(2)P3.2断开、P3.3合上时LED2闪烁(3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁(4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁试编写C语言和汇编语言程序使用自然优先级就可以也可 XO 高级X1低级PX0=1 PX1=0四、实验电路五、参考程序(自己完成)C程序:Include<reg52.h>Sbit P2_0=P2^0;Sbit P2_1=P2^1;Sbit P3_2=P3^2;Sbit P3_3=P3^3;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}Void main{EA=1;EX0=1;EX1=1;ITO=1;IT1=1;PX0=1;PX1=0;While(1);}Void int0(void) interrupt 0 { if(!P3_2){While(1){P2_0=1;delay02s();P2_0=0;delay02s();}}}Void int1(void) interrupt 2 { if(!P3_3){While(1){P2_1=1;delay02s();P2_1=0;delay02s();}}}。
汇编语言指令集数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。
汇编语言- 1 - 复习题要点1、指令要熟悉如跳转、转移、传送、逻辑、算术。
2、会程序分析说明结论3、字符转换、子程序、软中断4、中断向量、堆栈5、FLAGS 状态标志及意义一、填空题1、8086 CPU通过______________寄存器和______________寄存器能准确找到指令代码。
2、CPU的标志寄存器中标志位可以分为两大类其中一类称为______________标志位另一类称为______________标志位。
3、当标志位______________1时表示无符号数运算产生溢出而当标志位______________1是表示带符号数运算产生溢出。
4、执行语句MOV AX0F365H和ADD AX0E024H后AX ___________ CF___________ OF___________SF___________ ZF___________。
5、乘法指令语句MUL CL16位的乘积存放在______________中。
6、已知DS2000HBX0D00H20D00H020D01H92H ①执行DEC BYTE PTRBX 20D00H____________ ②执行ROL WORD PTRBX20D00H____________ 20D01H____________ 。
7、已知AX1A08HBX20F8H执行IMUL BL积为____________。
8、已知SS2250HSP0140H 如果在堆栈中压入5个数据则栈顶的物理地址为______________ H如果又从堆栈中弹出3个数据则栈顶的逻辑地址为______________________ H。
9、VAR DB 5 DUP 82 DUP 5 语句汇编应分配_____________个字节单元。
10、指令MOV AXSEG BUF的执行是把_____________送到AX中。
11、类型码为___________H的中断所对应的中断向量存放在0000H0080H开始的4个连续单元中若这4个单元的内容分别为___________、___________、___________、___________则相应的中断服务程序入口地址为5060H7080H。
数据传送指令:负责把数据、地址或立即数传送到寄存器或存储单元中。
数据传送指令类型指令说明通用数据传送指令MOV(传送)、PUSH(进栈)、POP(出栈)、XCHG(交换)累加器专用传送指令IN(输入指令)、OUT(输入指令)地址传送指令LEA(有效地址送寄存器)、LDS(指针送寄存器和DS)、LES(指针送寄存器和ES)标志寄存器传送指令LAHF(标志送AH)、SAHF(AH送标志寄存器)、PUSHF(标志进栈)、POPF(标志出栈)2)算术指令:用来执行算术运算。
算术指令类型指令说明加法指令ADD(加法)、ADC(带进位加法)、INC(加1)减法指令SUB(减法)、SBB(带借位减法)、DEC(减1)、NEG(求补)、CMP(比较)乘法指令MUL(无符号数乘法)、IMUL(带符号数乘法)除法指令DIV(无符号数除法)、IDIV(带符号数除法)、CBW(字节转换为字)、CWD(字转换为双字)3)逻辑指令:对字或字节执行逻辑运算。
逻辑指令类型指令说明逻辑运算指令AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、TEST(测试)移动指令SHL(逻辑左移)、SAL(算术左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR (循环右移)、RCL(带进位循环左移)、RCR(带进位右移)4)串处理指令:处理存放存储器里的数据串。
串处理指令类型指令说明指令MOVS(串传送)、CMPS(串比较)、SCAS(串扫描)、LODS(从串取)、STOS(存入串)5)控制转移指令:用来控制程序的执行流程。
控制转移指令类型指令说明无条件转移指令JMP(段间和段内转移)条件转移指令JZ(结果为0(或相等)则转移)、JS(结果为负则转移)、JNS(结果为正则转移)、JO(溢出则转移)、JNO(不溢出则转移)、JP(奇偶位为1则转移)、JNP(奇偶位为0则转移)循环指令LOOP(循环指令)、LOOPPZ/LOOPE(当为0或相等时循环指令)、LOOPNZ/LOOPNE(当不为0或不相等时循环指令)子程序指令CALL(调用指令)、RET(返回指令)中断指令INT(中断)、INTO(如溢出则中断)、RIET(从中断返回)6)处理机控制指令:处理机控制指令类型指令说明标志处理指令CLC(进位位置0指令)、CMC(进位位求反指令)、STC(进位位置为1指令)、CLD(方向标志置1指令)、STD(方向标志位置1指令)、CLI(中断标志置0指令)、STI(中断标志置1指令)其他处理机控制指令NOP(无操作)、HLT(停机)、WAIT(等待)、ESC(换码)、LOCK(封锁)。
汇编语言结束程序语句
汇编语言结束程序语句通常用于将程序彻底结束并返回操作系统,以便释放所有系统资源和内存空间。
常见的汇编语言结束程序语句有:
1. RET指令:用于从子程序中返回主程序。
RET指令会将子程序的返回地址出栈并跳转到该地址。
2. INT 20h指令:用于结束程序并返回操作系统。
INT 20h指令会将程序返回代码置于寄存器AH中,并调用DOS系统的中断20h,使程序返回到操作系统。
3. JMP $指令:用于无条件跳转到当前地址,相当于程序结束。
JMP $指令会将当前地址重新放入IP寄存器中,使程序无限循环。
4. HLT指令:用于停止CPU执行,相当于程序结束。
HLT指令会使CPU停止执行,直到收到中断或复位信号。
在编写汇编语言程序时,应该根据实际情况选择适当的结束程序语句,以确保程序能够正常结束并释放系统资源。
- 1 -。
汇编语言常用指令大全汇编语言是一种计算机编程语言,使用指令来控制计算机硬件执行特定的操作。
在本文中,我们将介绍一些常用的汇编语言指令,以帮助读者更好地理解和学习汇编语言。
一、数据传输指令1. MOV:将数据从一个位置复制到另一个位置。
例子:MOV AX, BX 将寄存器BX中的值复制到寄存器AX中。
2. PUSH:将数据压入堆栈。
例子:PUSH AX 将寄存器AX中的值压入堆栈。
3. POP:从堆栈中弹出并获取数据。
例子:POP AX 从堆栈中弹出一个值,并将其存入寄存器AX中。
二、算术指令1. ADD:将两个操作数相加。
例子:ADD AX, BX 将寄存器AX和BX中的值相加,并将结果存入寄存器AX中。
2. SUB:将一个操作数从另一个操作数中减去。
例子:SUB AX, BX 将寄存器BX中的值从寄存器AX中减去,并将结果存入寄存器AX中。
3. MUL:将两个操作数相乘。
例子:MUL AX, BX 将寄存器AX和BX中的值相乘,并将结果存入寄存器AX中。
三、逻辑指令1. AND:进行逻辑与操作。
例子:AND AX, BX 对寄存器AX和BX中的值进行逻辑与操作,并将结果存入寄存器AX中。
2. OR:进行逻辑或操作。
例子:OR AX, BX 对寄存器AX和BX中的值进行逻辑或操作,并将结果存入寄存器AX中。
3. NOT:进行逻辑非操作。
例子:NOT AX 对寄存器AX中的值进行逻辑非操作。
四、条件分支指令1. JMP:无条件跳转到指定的地址。
例子:JMP label 跳转到标记为label的地址。
2. JZ:当操作数为零时跳转到指定的地址。
例子:JZ label 如果寄存器AX中的值为零,则跳转到标记为label 的地址。
3. JC:当进位标志为1时跳转到指定的地址。
例子:JC label 如果进位标志位为1,则跳转到标记为label的地址。
五、循环指令1. LOOP:当计数器不为零时,循环执行指定的代码块。
汇编语⾔第⼗三章int指令
int指令:
格式: int n 其中n为中断码,它的功能是引发中断,并调⽤中断程序(类似call指令,但int⼤多调⽤内置中断程序,由BIOS或者DOS提供;两者都与iret配合使⽤,可以互相转换)。
执⾏过程如下:
1. 取中断类型码n
2. 标志寄存器⼊栈,置IF = 0,TF = 0
3. CS、IP依次⼊栈
4. (IP) = (4 * n),(CS) = (4 * n + 1)
BIOS基本输⼊输出系统:
BIOS存放在系统板的ROM中,包括硬件系统的检测和初始化程序,还有⼀部分内置的中断例程供程序员调⽤(相当于系统提供的库函数)BIOS和DOS中断例程的安装:
1. 开机后,CPU⼀加电,初始化(CS)= 0FFFFH,(IP)=0,系统从FFFF:0单元开始执⾏指令,FFFF:0处为跳转指令,CPU转去执
⾏BIOS中的硬件系统检测和初始化程序
2. BIOS提供的中断例程已经存储在了系统的ROM中,⼀直存在,只需将其地址放在中断向量表中便可调⽤。
3. 硬件系统检测和初始化完成之后,调⽤int 19h进⾏操作系统引导,从此将计算机交由操作系统控制。
普通中断例程的中断类型码要么与错误类型相关,要么是有int提供。
BIOS和DOS提供的中断例程,都⽤ah来传递内部⼦程序的编号,然后使⽤int调⽤即可。
例如mov ah,9 int 21h意为调⽤第21h号中断例程的9号⼦程序。
第8章输入输出和中断输入输出功能是计算机的重要组成部分,是人—机交互功能的主要承担者。
在早期的计算机系统中,通常把输入输出设备或功能作为次要的部分,而把CPU 作为主要研究对象。
但现在随着输入输出设备的日益丰富、功能要求越来越复杂,输入输出部分在整个计算机系统中的地位也得到了进一步提高。
本章先介绍了I/O的基本概念和I/O指令,再叙述了中断的概念及其工作过程,并列举出计算机系统中若干个常用的中断及其功能。
8.1 输入输出的基本概念输入输出是一个完整应用程序的重要组成部分,是交互式应用程序不可缺少的组成部分。
在用高级语言编程时,程序员可直接用输入输出语句来完成键盘输入、屏幕显示或打印输出等需求,而无需关心这些输入输出语句是如何实现的,因为编译程序会自动把这些语句转换成相应的输入输出指令。
但如果用汇编语言编写程序的话,情况就不同了,因为汇编语言是与机器有关的程序设计语言,要编写出具有输入输出功能的代码段就必须清楚CPU为输入输出提供了哪些指令,或计算机系统提供了哪些可直接使用的功能调用。
8.1.1 I/O端口地址I/O端口是CPU与输入输出设备的交换数据的场所,通过I/O端口,处理机可以接受从输入设备输入的信息;也可向输出设备发送信息。
在计算机系统中,为了区分各类不同的I/O端口,就用不同的数字给它们进行编号,这种对I/O端口的编号就称为I/O端口地址。
按照每次可交换一个字节数据的端口称为字节端口,每次可交换一个字数据的端口称为字端口。
在Intel公司的CPU家族中,I/O端口的地址空间可达64K,即可有65536个字节端口,或32768个字端口。
这些地址不是内存单元地址的一部分,不能普通的访问内存指令来读取其信息,而要用专门的I/O指令才能访问它们。
虽然CPU提供了很大的I/O地址空间,但目前大多数微机所用的端口地址都在0~3FFH范围之内,其所用的I/O地址空间只占整个I/O地址空间的很小部分。
《汇编语言功能号大全》汇编语言功能号大全汇编语言是一种底层、机器级别的编程语言,主要用于编写低层次的系统软件和嵌入式设备的驱动程序。
在汇编语言中,各种功能号(Function Code)被用于告知计算机执行特定的操作,在编写程序时起到了至关重要的作用。
本文将为您介绍一些常用的汇编语言功能号,以帮助您更好地理解和运用汇编语言。
1. 数据传输功能号数据传输是汇编语言中最基本的操作之一。
以下是一些常见的数据传输功能号:1.1 MOV:将数据从一个位置复制到另一个位置。
1.2 XCHG:交换两个位置中的数据。
1.3 LEA:将一个内存地址复制到一个寄存器中。
1.4 PUSH:将数据压入栈中。
1.5 POP:将数据从栈中弹出。
2. 算术运算功能号算术运算在编程中经常用到,汇编语言提供了丰富的算术运算功能号,包括:2.1 ADD:将两个数相加。
2.2 SUB:从一个数中减去另一个数。
2.3 INC:将一个数加1。
2.4 DEC:将一个数减1。
2.5 MUL:将两个数相乘。
2.6 DIV:将一个数除以另一个数。
3. 逻辑运算功能号逻辑运算是程序中常用的操作之一,以下是一些常见的逻辑运算功能号:3.1 AND:对两个数执行逻辑与操作。
3.2 OR:对两个数执行逻辑或操作。
3.3 XOR:对两个数执行逻辑异或操作。
3.4 NOT:对一个数执行逻辑非操作。
4. 控制转移功能号控制转移是指在程序执行过程中跳转到另一个位置继续执行,以下是一些常见的控制转移功能号:4.1 JMP:无条件跳转到指定地址。
4.2 JZ:如果零标志位为真,则跳转到指定地址。
4.3 JC:如果进位标志位为真,则跳转到指定地址。
4.4 JNC:如果进位标志位为假,则跳转到指定地址。
4.5 CALL:调用一个子程序。
4.6 RET:返回到调用子程序的位置。
5. 中断功能号中断是汇编语言中常用的机制之一,用于处理外部事件和异常情况。
以下是一些常见的中断功能号:5.1 INT:触发指定的中断。
51单片机汇编中断程序调用子程序(原创实用版)目录1.51 单片机汇编中断程序概述2.中断程序的调用方式3.子程序的定义与调用4.中断程序调用子程序的实例分析5.总结正文一、51 单片机汇编中断程序概述在 51 单片机汇编语言编程中,中断是一种常见的编程方式,可以实现在特定条件下程序的跳转和执行。
通过中断程序,可以实现对硬件设备的实时控制,提高程序的执行效率。
二、中断程序的调用方式中断程序的调用方式主要有两种:1.通过外部中断引脚(如 P1.0、P2.0 等)触发中断。
这种方式下,当外部中断引脚的状态发生改变时,单片机会立即跳转到中断程序的入口地址执行。
2.通过软件中断实现中断程序的调用。
这种方式下,程序员可以通过设置特定的寄存器值来触发中断,使程序跳转到中断程序的入口地址执行。
三、子程序的定义与调用子程序,也称为子例程,是程序中一段可独立执行的代码段。
子程序可以通过以下方式定义和调用:1.使用“SUB”伪指令定义子程序。
在需要调用子程序的地方,编写“CALL 子程序名”,即可实现子程序的调用。
2.使用“PROG”伪指令定义子程序。
在需要调用子程序的地方,直接编写子程序名,即可实现子程序的调用。
四、中断程序调用子程序的实例分析假设我们有一个 51 单片机汇编语言程序,当外部中断引脚 P1.0 触发时,需要执行一个子程序以完成特定功能。
程序如下:```ORG 00HMOV P1, #00HMOV R4, #0FFHSTART: NOPINT0: MOV R3, #0FFHCALL INT_SUBROUTINESJMP STARTINT_SUBROUTINE: MOV R5, R3// 子程序执行的内容MOV R3, R5SJMP RETURNRETURN: MOV R4, R3SJMP RETURN_SUBROUTINERETURN_SUBROUTINE: MOV R3, #00HSJMP START```在上述程序中,当 P1.0 引脚触发中断时,程序会跳转到“INT0”标签所在的位置,执行子程序“INT_SUBROUTINE”。
计算机硬件实验室实验报告
亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。
先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。
侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也。
臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。
先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。
后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。
受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。
今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。
此臣所以报先帝而忠陛下之职分也。
至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。
若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。
臣不胜受恩感激。
今当远离,临表涕零,不知所言。