第十三章 INT指令-内中断
INT 指令
很多初学汇编语言的同学可能会对INT 21H这条指令感到困惑,不知道是什么意思,下面就以一段简单的程序为大家讲解:例如:需要键盘输入,并且回显。
AH的值需要查表取得,表在下面指令:MOV AH,01INT 21H通过这样两条指令,输入的字符就会被存储在AL中。
表:DOS系统功能调INT 21HAH 功能调用参数返回参数00 程序终止(同INT 20H) CS=程序段前缀01 键盘输入并回显AL=输入字符02 显示输出DL=输出字符03 异步通迅输入AL=输入数据04 异步通迅输出DL=输出数据05 打印机输出DL=输出字符06 直接控制台I/O DL=FF(输入)DL=字符(输出)AL=输入字符07 键盘输入(无回显) AL=输入字符08 键盘输入(无回显)检测Ctrl-BreakAL=输入字符09 显示字符串DS:DX=串地址'$'结束字符串0A 键盘输入到缓冲区DS:DX=缓冲区首地址(DS:DX)=缓冲区最大字符数(DS:DX+1)=实际输入的字符数0B 检验键盘状态AL=00 有输入AL=FF 无输入0C 清除输入缓冲区并请求指定的输入功能AL=输入功能号(1,6,7,8,A)0D 磁盘复位清除文件缓冲区0E 指定当前缺省的磁盘驱动器DL=驱动器号0=A,1=B,... AL=驱动器数0F 打开文件DS:DX=FCB首地址AL=00 文件找到AL=FF 文件未找到10 关闭文件DS:DX=FCB首地址AL=00 目录修改成功AL=FF 目录中未找到文件11 查找第一个目录项DS:DX=FCB首地址AL=00 找到AL=FF 未找到12 查找下一个目录项DS:DX=FCB首地址(文件中带有*或?)AL=00 找到AL=FF 未找到13 删除文件DS:DX=FCB首地址AL=00 删除成功AL=FF 未找到14 顺序读DS:DX=FCB首地址AL=00 读成功=01 文件结束,记录中无数据=02 DTA空间不够=03 文件结束,记录不完整15 顺序写DS:DX=FCB首地址AL=00 写成功=01 盘满=02 DTA空间不够16 建文件DS:DX=FCB首地址AL=00 建立成功=FF 无磁盘空间17 文件改名DS:DX=FCB首地址(DS:DX+1)=旧文件名(DS:DX+17)=新文件名AL=00 成功AL=FF 未成功19 取当前缺省磁盘驱动器AL=缺省的驱动器号0=A,1=B,2=C,...1A 置DTA地址DS:DX=DTA地址1B 取缺省驱动器FAT信息AL=每簇的扇区数DS:BX=FAT标识字节CX=物理扇区大小DX=缺省驱动器的簇数1C 取任一驱动器FAT信息DL=驱动器号同上21 随机读DS:DX=FCB首地址AL=00 读成功=01 文件结束=02 缓冲区溢出=03 缓冲区不满22 随机写DS:DX=FCB首地址AL=00 写成功=01 盘满=02 缓冲区溢出23 测定文件大小DS:DX=FCB首地址AL=00 成功(文件长度填入FCB)AL=FF 未找到24 设置随机记录号DS:DX=FCB首地址25 设置中断向量DS:DX=中断向量AL=中断类型号26 建立程序段前缀DX=新的程序段前缀27 随机分块读DS:DX=FCB首地址CX=记录数AL=00 读成功=01 文件结束=02 缓冲区太小,传输结束=03 缓冲区不满28 随机分块写DS:DX=FCB首地址CX=记录数AL=00 写成功=01 盘满=02 缓冲区溢出29 分析文件名ES:DI=FCB首地址DS:SI=ASCIIZ串AL=控制分析标志AL=00 标准文件=01 多义文件=02 非法盘符2A 取日期CX=年DH:DL=月:日(二进制)2B 设置日期CX:DH:DL=年:月:日AL=00 成功=FF 无效2C 取时间CH:CL=时:分DH:DL=秒:1/100秒2D 设置时间CH:CL=时:分DH:DL=秒:1/100秒AL=00 成功=FF 无效2E 置磁盘自动读写标志AL=00 关闭标志AL=01 打开标志2F 取磁盘缓冲区的首址ES:BX=缓冲区首址30 取DOS版本号AH=发行号,AL=版本31 结束并驻留AL=返回码DX=驻留区大小33 Ctrl-Break检测AL=00 取状态=01 置状态(DL)DL=00 关闭检测=01 打开检测DL=00 关闭Ctrl-Break检测=01 打开Ctrl-Break检测35 取中断向量AL=中断类型ES:BX=中断向量36 取空闲磁盘空间DL=驱动器号0=缺省,1=A,2=B,... 成功:AX=每簇扇区数BX=有效簇数CX=每扇区字节数DX=总簇数失败:AX=FFFF38 置/取国家信息DS:DX=信息区首地址BX=国家码(国际电话前缀码) AX=错误码39 建立子目录(MKDIR) DS:DX=ASCIIZ串地址AX=错误码3A 删除子目录(RMDIR)DS:DX=ASCIIZ串地址AX=错误码3B 改变当前目录(CHDIR) DS:DX=ASCIIZ串地址AX=错误码3C 建立文件DS:DX=ASCIIZ串地址CX=文件属性成功:AX=文件代号错误:AX=错误码3D 打开文件DS:DX=ASCIIZ串地址AL=0 读=1 写=3 读/写成功:AX=文件代号错误:AX=错误码3E 关闭文件BX=文件代号失败:AX=错误码3F 读文件或设备DS:DX=数据缓冲区地址BX=文件代号CX=读取的字节数读成功:AX=实际读入的字节数AX=0 已到文件尾读出错:AX=错误码40 写文件或设备DS:DX=数据缓冲区地址BX=文件代号CX=写入的字节数写成功:AX=实际写入的字节数写出错:AX=错误码41 删除文件DS:DX=ASCIIZ串地址成功:AX=00出错:AX=错误码(2,5)42 移动文件指针BX=文件代号CX:DX=位移量AL=移动方式(0:从文件头绝对位移,1:从当前位置相对移动,2:从文件尾绝对位移)成功:DX:AX=新文件指针位置出错:AX=错误码43 置/取文件属性DS:DX=ASCIIZ串地址AL=0 取文件属性AL=1 置文件属性CX=文件属性成功:CX=文件属性失败:CX=错误码44 设备文件I/O控制BX=文件代号AL=0 取状态=1 置状态DX=2 读数据=3 写数据=6 取输入状态=7 取输出状态DX=设备信息45 复制文件代号BX=文件代号1 成功:AX=文件代号2 失败:AX=错误码46 人工复制文件代号BX=文件代号1CX=文件代号2失败:AX=错误码47 取当前目录路径名DL=驱动器号DS:SI=ASCIIZ串地址(DS:SI)=ASCIIZ串失败:AX=出错码48 分配内存空间BX=申请内存容量成功:AX=分配内存首地失败:BX=最大可用内存49 释放内容空间ES=内存起始段地址失败:AX=错误码4A 调整已分配的存储块ES=原内存起始地址BX=再申请的容量失败:BX=最大可用空间AX=错误码4B 装配/执行程序DS:DX=ASCIIZ串地址ES:BX=参数区首地址AL=0 装入执行AL=3 装入不执行失败:AX=错误码4C 带返回码结束AL=返回码4D 取返回代码AX=返回代码4E 查找第一个匹配文件DS:DX=ASCIIZ串地址CX=属性AX=出错代码(02,18)4F 查找下一个匹配文件DS:DX=ASCIIZ串地址(文件名中带有?或*)AX=出错代码(18)54 取盘自动读写标志AL=当前标志值56 文件改名DS:DX=ASCIIZ串(旧)ES:DI=ASCIIZ串(新)AX=出错码(03,05,17)57 置/取文件日期和时间BX=文件代号AL=0 读取AL=1 设置(DX:CX)DX:CX=日期和时间失败:AX=错误码58 取/置分配策略码AL=0 取码AL=1 置码(BX)成功:AX=策略码失败:AX=错误码59 取扩充错误码AX=扩充错误码BH=错误类型BL=建议的操作CH=错误场所5A 建立临时文件CX=文件属性DS:DX=ASCIIZ串地址成功:AX=文件代号失败:AX=错误码5B 建立新文件CX=文件属性DS:DX=ASCIIZ串地址成功:AX=文件代号失败:AX=错误码5C 控制文件存取AL=00封锁=01开启BX=文件代号CX:DX=文件位移SI:DI=文件长度失败:AX=错误码62 取程序段前缀BX=PSP地址。
第十三章 INT指令-内中断
BIOS中断例程应用(续)
int 10h中断例程:在光标位置显示字符
mov mov mov mov mov int ah,9 ;置光标 al,’a’ bl,7 bh,0 ;第0页 cx,3 10h
BIOS中断例程应用(续)
编程:在屏幕的5行12列显示3个红底高亮闪烁绿色的’a’ assume cs:code code segment mov ah,2 ;置光标 mov bh,0 ;第0页 mov dh,5 mov dl,12 int 10h mov ah,9 mov al,'a' mov bl,0cah mov bh,0 mov cx,3 int 10h mov ax,4c00h int 21h code ends end
程序如下:
assume cs:code code segment start:mov ax,cs mov ds,ax mov si,offset capital mov ax,0 mov es,ax mov di,200h mov cx,offset capitalend - offset capital cld rep movsb ;安装中断程序sqr mov ax,0 mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0 ;设置中断向量 mov ax,4c00h int 21h capital: push cx push si change:mov cl,[si] mov ch,0 jcxz ok and byte ptr [si],11011111b inc si jmp short change ok: pop si pop cx iret capitalend: nop code ends end start
C语言程序设计 中断
中断所谓中断,是指CPU在正常运行程序时,由于程序的预先安排或内外部事件,引起CPU中断正在运行的程序,而转到为预先安排的事件或内外部事件服务的程序中去,这些引起程序中断的事件称为中断源。
预先安排的事件是指PC机的中断指令,执行到此,立即转相应的服务程序去执行。
内部事件是指系统板上出现的一些事件信号,中断指令也可看作内部事件,外部事件是指某些接口设备所发出的请求中断程序执行的信号,这些信号称为中断请求信号。
中断请求信号何时发生是不能预知的,然而,它们一旦请求中断,则会向CPU 的接收中断信号的引脚发出电信号,因此这些信号CPU是马上可以知道的。
这样CPU 就无需花大量的时间去查询这些信号是否产生。
因为中断请求信号一旦产生,便会马上通知CPU。
如键盘,何时有键控下,是随机的,因而CPU可以对键盘不加理睬,而去执行其它程序,一旦有键按下,键盘马上产生中断请求情号,CPU得知这信号后,便立即去执行为键盘服务的中断程序,服务完后,CPU又恢复执行被中断了的程序。
中断服务程序执行完,返回原来执行程序的中断处(称为断点)继续往下执行,称为中断返回。
有时中断请求信号(即中断源)可能有好几个,因此CPU响应这些中断就得有先后次序,这称为中断的优先级。
CPU首先响应优先级高的中断,优先级低的中断,暂不响应,称为挂起。
有些中断源产生的中断,可以用编程的办法使CPU 不予理睬,这叫中断的屏蔽。
CPU响应中断,转去执行中断服务程序前,需将被中断程序的现场信息保存下来,以便执行完中断服务程序后,接着从被中断程序的断点处继续往下执行。
现场信息是指程序计数器的内容、CPU的状态信息、执行指令后的结果特征和一些通用寄存器的内容,有些信息的保存和程序计数器的内容等由机器硬件预先安排完成,称为中断处理的隐操作。
有些信息保存是在中断服务程序中预先安排。
CPU响应中断时,由中断源提供地址信息,引导程序转移到中断服务程序中去执行。
这个地址信息称为中断向量,它一般是和中断源相对应的,PC机采用类型号来标识中断源。
6.1 中断指令介绍及应用
中断指令的应用
I/O中断的应用——示例程序
中断指令的应用
(2)定时中断的应用
定时中断0和定时中断1的时间间隔分别写入特殊存储器 字节SMB34和SMB35,以1ms为增量,周期为1~255ms 。 每当定时时间到时,就立即执行相应的定时中断程序。
中断指令的应用
示例程序
例:用定时中断0实现周期 为1s的高精度定时,并在 QB0端口以增1形式输出。
《电气控制与PLC技术》
中断指令介绍及应用
中断指令介绍
1.中断指令
项目
中断指令的梯形图、指令表等指令属性
中断连接指令
中断允许指令
中断分离指令
中断禁止指令
梯形图
指令表 ATCH INT,EVNT
ENI
描述
把一个中断事件EVNT和一个中断 程序INT连接起来
全局允许中断
操作数
INT:0~127
DTCH EVห้องสมุดไป่ตู้T
DISI
切断一个中断事件EVNT与中断 程序的联系,并禁止该中断事件
全局禁止中断
EVNT:0~33
中断指令介绍
2.中断事件
S7-200支持3类中断 事件:通信端口中断、 I/O中断和定时中断。
中断号 8 9 23 24 25 26 19 20 0 2 4 6 1 3 5 7 12 27 28
中断描述 通信端口0:接收字符 通信端口0:发送完成 通信端口0:接收信息完成 通信端口1:接收信息完成 通信端口1:接收字符 通信端口1:发送完成 PTO 0完成中断 PTO 1完成中断 上升沿,I0.0 上升沿,I0.1 上升沿,I0.2 上升沿,I0.3 下降沿,I0.0 下降沿,I0.1 下降沿,I0.2 下降沿,I0.3 HSC0 CV=PV(当前值=预置值) HSC0 输入方向改变 HSC0 外部复位
中 断
EA=0;
//关总中断
left(3);
//单灯左移3圈
EA=1;
//开总中断
LED=saveLED;
//恢复中断前LED灯状态
}
5
3.中断子程序的仿真
中断程序及主程序编制完成后,单击Keil界面中的Debug按 钮 进 入 仿 真 状 态 , 选 择 “ Peripherals ” → “ Interrupt ” 菜 单 (见图9-1),此时系统将打开“Interrupt System”对话框, 如图9-2所示。
首先声明delay()函数,将共阳极7段LED数码管的驱动信号放置在数组中: char TAB[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x90,0x98, 0x83,0xc6,0xa1,0x86,0x8e}; 在主程序中,每隔0.5s就顺序输出一次字符数组中的编码,而在中断子程序中,每 隔0.5s就反序输出一次字符数组中的编码。
for(i=0;i<16;i++) { SEG=tab[i]; delay(500); }
} }
//开总中断,开外部中断1 //INT1设置为负边缘触发 //循环执行
//将要显示的数字及字母的驱动数据送入数码管 //延时0.5秒
10
【例9-1】【参考代码】
//============外部中断1==============================
/*主程序数码管0~F顺序显示,中断程序F~0倒序显示,P0口接数码管*/
#include<reg51.h>
#define SEG P0
void delay(int);
//延时函数
064第十三章 int指令01
交流、学习:
实例二
最后,在中断例程capital中用到了寄存 器 si和cx,编写中断例程和编写子程序 的时候具有同样的问题,就是要避免寄 存器的冲突。
应该注意例程中用到的寄存器的值的保 存和恢复。
交流、学习:
实例二
实例二 编写、安装中断7ch的中断例程:
功能:将一个全是字母,以 0结尾的字符串, 转化为大写。 参数:ds:si指向字符串的首地址。
应用举例:
将data段中的字符转化为大写。
交流、学习:
实例二
assume cs:code data segment db 'conversation',0 data ends code segment start: mov ax,data mov ds,ax mov si,0 int 7ch mov ax,4c00h int 21h code ends end start 安装程序:test3.asm
CPU执行int 0指令时,将引发中断过程,执行 0号中断处理程序,而系统设置的 0号中断处 理程序的功能是显示“Divide overflow”,然 后返回到系统。 可见,int 指令的最终功能和call指令相似,都 是调用一段程序。
交流、学习:
int 指令
因此,一般情况下,系统将一些具有一定功能 的子程序,以中断处理程序的方式提供给应用 程序调用。 我们在编程的时候,可以用int指令调用这些子 程序。当然,也可以自己编写一些中断处理程 序供别人使用。
交流、学习:
实例一
示例一 编写、安装中断7ch的中断例程: 功能:求一word型数据的平方。 参数: (ax)=要计算的数据。 返回值:dx、ax中存放结果的高16位和 低16位。
汇编12:内中断
汇编12:内中断内中断CPU可以在执⾏完当前正在执⾏的指令之后,检测到从CPU外部或内部产⽣的⼀种特殊信息,并且可以⽴即对所接受到的信息进⾏处理。
这种特殊信息⼀般称其为中断信息。
中断就是CPU不再接着刚执⾏完的指令向下执⾏,⽽是转⽽去处理这个特殊信息。
内中断的产⽣从CPU内部产⽣的中断信息被称为内中断。
当下列情况发⽣时会产⽣内中断:1、除法错误,如执⾏div指令时产⽣的除法溢出2、单步执⾏3、执⾏into指令4、执⾏int指令CPU根据中断类型码来区分不同的中断信息,中断类型码是⼀个字节型数据,可以表⽰256种中断信息的来源,产⽣中断信息的来源简称为中断源。
上述四种情况下的中断类型码如下:1、除法错误:02、单步执⾏:13、执⾏into指令:44、执⾏int指令:中断类型码为指令后的字节型⽴即数中断处理程序和中断向量表CPU收到中断信息后,需要对中断信息进⾏处理,⽤来处理中断信息的程序被称为中断处理程序。
转去执⾏中断处理程序需要让CS:IP指向该程序的⼊⼝,这个过程需要⽤到中断向量表。
CPU⽤8位的中断类型码通过中断向量表找到相应的中断处理程序的⼊⼝地址,中断向量表在内存中保存,其中存放着256个中断源所对应的中断处理程序的⼊⼝:对于8086CPU,中断向量表指定放在内存地址0处,从0000:0000到0000:03FF的1024个单元中存放着中断向量表。
⼀个表项中放着⼀个中断处理程序的⼊⼝地址,包含段地址和偏移地址,占⽤两个字,⾼地址字存放段地址,低地址字存放偏移地址。
中断过程CPU在执⾏完中断处理程序后,应该返回原来的执⾏点继续执⾏下⾯的命令。
所以在中断过程中应该将原来的CS和IP保存起来。
中断过程如下:1、根据中断信息取得中断类型码2、标志寄存器的值⼊栈(中断处理程序可能会修改标志寄存器,所以这⾥要保存起来准备恢复)3、设置标志寄存器的第8位TF和第9位IF的值为04、CS的内容⼊栈5、IP的内容⼊栈6、从内存地址为中断类型码*4的位置取出两个字,组成中断处理程序的⼊⼝,设置IP和CS中断处理程序和iret指令中断处理程序的编写⽅法和⼦程序⽐较相似,下⾯是常规的步骤:1、保存⽤到的寄存器2、处理中断3、恢复⽤到的寄存器4、⽤iret指令返回iret指令相当于执⾏:pop IPpop CSpopf相当于把执⾏中断处理程序之前保存的内容(CS:IP和标志寄存器)全部恢复了。
《汇编语言程序设计》第十三章中断及中断处理程序
《汇编语言程序设计》第十三章中断及中断处理程序中断是计算机在执行程序过程中,突然停止当前任务的一种机制。
当出现外部事件(如键盘输入、硬件故障或定时器到达)时,计算机会立即中断当前正在执行的程序,转而执行事先定义好的中断处理程序,以响应这些事件。
中断可以分为硬件中断和软件中断。
硬件中断是由外部设备触发的,比如,键盘输入、鼠标点击等。
而软件中断则是程序内部通过软件指令主动触发的。
中断处理程序是响应中断事件的程序,也被称为中断服务子程序(Interrupt Service Routine,ISR)。
当一个中断发生时,中断处理程序会被调用执行,处理特定的中断事件。
在汇编语言中,编写中断处理程序需要掌握以下几个方面:1.定义中断向量表:中断向量表是一个储存中断向量地址的表格。
每个中断向量是一个4字节的地址,指向相应的中断处理程序。
在开发中,我们需要根据硬件设备的不同,定义对应的中断向量表。
2.中断处理程序的编写:中断处理程序需要以特定的格式编写,称为中断门。
中断门包含了中断向量的地址、中断类型、特权级等信息。
在编写中断处理程序时,需要将程序中所有寄存器的值进行保存,以便在中断处理完后恢复原来的状态。
3.中断的使能与屏蔽:在进行中断处理时,需要将中断的使能标志设置为1,以允许中断的发生。
而在一些情况下,为了阻止中断的发生,我们还需要将中断的屏蔽标志设置为1中断处理程序在操作系统和嵌入式系统中起着重要的作用。
它可以实现多任务处理、设备驱动程序、异常处理等功能。
在操作系统中,中断处理程序负责处理硬件设备的中断请求、时钟中断等,以实现多任务切换和设备驱动等功能。
总结起来,中断处理程序是汇编语言程序设计中重要的内容之一、掌握中断处理程序的编写方法,能够使程序能够响应外部事件,提高程序的实时性和可靠性。
PLC应用中断控制INT指令的实验探讨
常开逻辑协助触点即 0 1 0 0 0 O N 。于逻辑 电路 内, 传送逻辑继电仪的 常开逻辑协助触点设为 0 1 0 0 0 O N 。其 K M接触器为开的状态 , 即 O N, 输送带电动机带三兆就开始实施运转日 。 于逻辑行内, 传送逻辑继 电仪 的常开逻辑协助触 设为 o 0开至关。 中断控制其 I N T ( 0 8 9 ) 指令 开至关。 当处于开的状态时, 就开始实施中断控制。 与逻辑内, 没有特 殊 情况应i . 一直实施中断控制。 有关中断控制其 I N T ( 0 8 9 ) 之设置, 其 控制码( 即C 1 ) 至常数是 0 0 4 , 这说明要再次实施 I C N T逻辑递增计算 器与同 2 ) 是常 熟, 其# 0 0 0 7 指代刷新输入逻辑继电器 0 6之 I C N T 3 逻辑递增计算仪 s v数值为专 门的逻辑继电器 , 即2 4 3 C H之 内容是 # 00 5 8 , 其I C N T
民营 科技2 0 1 3 年第6 期
科 技 论 坛
P L C应用 中断控制 I N T指令的实验探讨
苏 利 强 ( 茂名 职 业技 术 学 院 , 广 东 茂名 5 2 5 0 0 0 )
摘 要: 分析研 究了一种 两个点动按钮与光 电传感器 , 使用 P L C ( 即可编程逻辑控制 器) 的 中断控 制 I N T指令 , 在 此阶段 中将其 中 断控制 I N T设置成递增逻辑计算器 , 而中断控制 可编程逻辑控 制器的输入点来检查肥皂块数 。 设置规划是每 9 0块肥皂成一组 , 另外使 用子 程 序 的一 次 电磁 进 行 工 作 , 借 助 两 个 定 时 器使 得 电磁 阀 工作 两秒把 肥皂 一 组 推 至 的反 复 检 查 控 制 。 关键词 : P L C应 用 ; I N T指 令 ; 分析 研 究 实验间应用可编程逻辑控制器作为 O M R O N 一 6 0 C D R机型。 输至 是两个点动按钮以及—个光 电传感器 , 它的常开辅助触点接至的可编 程逻辑控制器的输入端口, 输入电压是直流电压 , 大小是 2 4伏 , 其输 出也是直流电压, 为2 4 伏电磁阀, 交流是常规电压接触器。第一步是 辑继电仪的常开逻辑协助触点 0 1 O F F , 并输送 M V N ( 0 2 2 ) 指令 O F F , 就逻辑行而言, 输至逻辑继 电仪的常开逻辑协助触点 0 0 O N — O F F , 输 送M O V ( 0 2 1 ) 指令 O N — O F F 。 当按下 O N时, 则开始实施传输。 于逻辑
汇编入门学习笔记(十二)——int指令、port
汇编⼊门学习笔记(⼗⼆)——int指令、port 疯狂的暑假学习之汇编⼊门学习笔记(⼗⼆)—— int指令、port參考:《汇编语⾔》王爽第13、14章⼀、int指令1. int指令引发的中断int n指令,相当于引发⼀个n号中断。
运⾏过程相当于:(1)取中断类型吗n。
(2)标志寄存器⼊栈;设置IF=0,TF=0。
(3)CS,IP⼊栈(4)(IP)=(n*4),(CS)=(n*4+2)样例1:编写、安装中断7ch。
实现求⼀个word型数据的平⽅,⽤ax存放这个数据。
assume cs:codecode segmentstart:mov ax,csmov ds,axmov si,offset sqrmov ax,0mov es,axmov di,200hmov cx,offset sqrend - offset sqrcldrep movsbmov ax,0mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0mov ax,4c00hint 21hsqr:mul axiretsqrend:nopcode endsend startassume cs:codecode segmentstart:mov ax,3int 7chmov ax,4c00hint 21hcode endsend start样例2:编写、安装7ch中断。
实现将data段中的字符串转化为⼤写。
code segmentstart:mov ax,csmov ds,axmov si,offset changemov ax,0mov es,axmov di,200hmov cx,offset changeend - offset changecldrep movsbmov ax,0mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0mov ax,4c00hint 21hchange:push cxpush sis: mov ch,0mov cl,ds:[si]jcxz okand cl,11011111bmov ds:[si],clinc sijmp short sok:pop sipop cxiretchangeend:nopcode endsend startassume cs:codedata segmentdb 'conversation',0data endscode segmentstart:mov ax,datamov ds,axmov si,0int 7chmov ax,4c00hint 21hcode endsend start样例3:使中断7ch实现loop指令的功能。
微机原理int指令用法
微机原理int指令用法微机原理INT指令用法是一项重要的计算机基础知识。
在本文中,我们将探讨INT指令的使用方法,包括它是如何工作的,如何使用以及它的主要用途是什么。
1. 什么是INT指令?INT指令是英文“Interrupt”的缩写,意为“中断”。
它是一种机器语言指令,用于在微处理器的运行过程中中途中断当前程序的执行,转而执行特定的子程序。
INT指令的作用是改变CPU的执行地址,将程序的控制转移到OS(操作系统)的INTERRUPT(中断)处理程序。
2. INT指令的作用在微机系统中,INT指令可以用于多种用途。
其中最常见的是交互式的输入/输出任务,如使用键盘读取用户输入、打印输出等。
操作系统可以使用INT指令来控制CPU的任务,并与外部设备交互。
具体来说,操作系统将各种外设(例如硬盘、网络接口卡等)和应用软件的操作分成了很多子任务,每个子任务都有一个唯一的编号。
当一个应用程序需要使用某个设备时,它将向操作系统发送一个特定的中断请求(INT 请求),要求OS运行相应的子任务。
操作系统随后将控制权移交给该子任务,并在完成后再次将控制权移回应用程序。
3. 如何使用INT指令?INT指令的使用步骤如下:•确定INT的中断向量号INT指令的操作数是一个8位的整数。
操作数的位数决定了它所对应的中断向量。
例如,INT 10H表示发出一个10H中断请求,而INT 21H表示发出一个21H中断请求。
可以在编写具有交互式I/O任务的程序时使用它们。
•发送INT请求在程序执行时,调用INT指令的程序会向操作系统发送一个INT请求。
CPU将控制权转移到OS的INTERRUPT处理程序,该程序将控制权传输给一个特定的子任务。
•处理中断操作系统将执行与中断向量对应的子任务。
在完成后,操作系统将控制权返回给程序的主要代码,程序将从停止的地方继续运行。
4. INT指令的示例以下是一个例子,它使用了INT 21H指令来读取键盘输入。
最新[汇总]汇编_13 int指令讲学课件
n (1)dec cx n (2)如果(cx)≠0,转到标号s 处执
行,否则向下执行。
13.3 对int、iret和栈的深入 理解
n 下面我们分析7ch中断例程如何实 现到目的地址的转移:
n (1)转到标号s显然应设(CS)=标 号s的段地址,(IP)=标号s的偏移 地址;
n 应用举例:在屏幕中间显示80个‘ !’。
n assume cs:code
n code segment
n start: mov ax,0b800h
n
mov es,ax
n
mov di,160*12
n
mov bx,offset s - offset
13.3 对int、iret和栈的深入 理解
n 在上面的程序中,用int 7ch调用 7ch中断例程进行转移,用 bx 传递 转移的位移。
n 当要修改栈中se的偏移地址的时候, 栈中的情况为;
n 栈顶处是bp 原来的数值,下面是se 的偏移地址,再下面是s的段地址, 再下面是标志寄存器的值。
13.3 对int、iret和栈的深入 理解
n 而此时,bp中为栈顶的偏移地址,所 以((ss)*16+(bp)+2)处为se 的偏 移地址,将它加上bx 中的转移位移就 变为s的偏移地址。最后用iret出栈返 回,CS:IP即从标号s处开始执行指令 。
13.5 BIOS和DOS中断例程的 安装过程
n (4)DOS 启动后,除完成其它工作 外,还将它所提供的中断例程装入内 存,并建立相应的中断向量。
13.6 BIOS中断例程应用
n 下面我们举几个例子,来看一下 BIOS中断例程的应用。
汇编13:int指令
汇编13:int指令int指令int指令也可以引发内中断。
int指令的格式是:int n其中n为中断类型码。
相当于执⾏以下步骤:1、取到中断类型码n2、标志寄存器⼊栈,IF=0,TF=03、CS、IP⼊栈4、根据中断向量表修改CS和IP:(IP)=(n*4),(CS)=(n*4+2)可见int指令的最终功能就是执⾏⼀段中断处理程序。
案例:以中断程序的⽅式实现计算式需求:求⼀word型数据的平⽅,求2*(3456的平⽅),dx、ax中存放结果的⾼16位和低16位。
⾸先准备安装程序:assume cs:codecode segmentstart: mov ax,csmov ds,axmov si,offset sqr 设置ds:si指向源地址mov ax,0mov es,axmov di,200h 设置es:di指向⽬的地址mov cx,offset sqrend-offset sqr 设置传输长度cld 设置传输长度为正rep movsb 开始安装中断程序mov ax,0 设置中断向量表mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0mov ax,4c00hint 21hsqr: mul ax 中断处理程序:将⼀个数求平⽅iretsqrend: nopcode endsend start然后产⽣对应中断完成功能:assume cs:codecode segmentstart: mov ax,3456int 7ch 调⽤中断处理程序,完成平⽅add ax,ax 低16位相加adc dx,dx ⾼16位相加mov ax,4c00hint 21hcode endsend start案例:以中断程序的⽅式完成loop指令循环需求:在屏幕中间显⽰80个“!”程序:assume cs:codecode segmentstart: mov ax,0b800hmov es,axmov di,160*12mov bx,offset s-offset se 计算从se到e的转移位移mov cx,80 设置循环次数s: mov byte ptr es:[di],'!' 在屏幕上显⽰符号add di,2int 7ch ⽤这条指令代替loop sse: nopmov ax,4c00hint 21hcode endsend start要想⽤int 7ch代替loop s,必须使其完成两项内容:cx的⾃减以及将执⾏跳转到s标号处。
王爽《汇编语言》 第13章 int指令
应用举例:在屏幕中间显示 个 应用举例:在屏幕中间显示80个‘!’
assume cs:code assume cs:code assume cs:code code segment code segment code segment start: mov ax,0b800h start: mov ax,0b800h ax,0b800h start: mov mov es,ax mov es,ax mov es,ax mov di,12*0a0h mov di,12*0a0h di,12*0a0h mov mov cx,80 mov cx,80 mov cx,80 mov bx,offset s-offset se s: mov byte ptr es:[di],’!’ptr es:[di],’!’ s: mov byte s: mov byte ptr es:[di],’!’ add di,2 add di,2 add di,2 loop s loop s int 7ch mov ax,4c00h nop mov ax,4c00h se: int 21h mov ax,4c00h int 21h int 21h code ends code ends code ends end start end start end start
例: mov ah,02 int 17h
;功能号 ,读打印机状态 功能号2, 功能号 ;中断号17H 中断号
中断例程完成如下任务: 例 利用int 10h中断例程完成如下任务 中断例程完成如下任务 1、int 10h的2号子功能;置光标显示位置。 : 、 :利用 号子功能 置光标显示位置。 的 号子功能; 1、在第 页,第5行、12列显示光标。 列显示光标。 、在第0页 列显示光标 DH=光标所在行,DL=光标所在列,BH=光标所在页。 光标所在行, 行 光标所在列, 光标所在页。 光标所在行 光标所在列 光标所在页 2、 10h的 号子功能 写字符到当前光标处。 当前光标位置显示3个白色字 页 号子功能; 2、、在第的09号子功能;写字符到当前光标处。 、int在第0页,当前光标位置显示 个白色字
中断-微型计算机原理及应用.PPT
。
菊花链方式具有中断响应速度快的优点 ,缺点是 各中断源的优先级因硬件连接固定而不易修改 。
② 中断控制专用硬件方式
③ 图5 .4所示是一个典型的向量中断优先控制器原理框
④ ⑤ ⑥ ⑦ ⑧
2 、 中断的多级嵌套
CPU总是首先响应优先级最高的中断 请求 。当CPU正在执行优先级别较低的中 断服务程序时 , 允许响应优先级别高的中 断源的中断请求 , 中止起正在处理的中断 , 这就是中断嵌套和称多重中断 。此时 , CPU暂停正在执行着的级别较低的中断服 务程序 , 为优先级别高的中断源服务 , 待 优先权高的中断服务结束后 , 再返回到刚 才被中断的那一级 , 继续为它进行中断服 务 。直至处理结束返回主程序 , 如图5.5 所示。
软件中断是CPU处理某些内部事件时引起的中断 , 软件中断也叫内部中断。
5.2.2 中断向量和中断向量表
中断向量是中断服务程序的入口地址 ,每 一个中断服务程序都有一个唯一确定的入口地 址 , 即中断向量 。把系统中的全部中断向量集 中存放到存储器的某一 区域内 ,这个存放中断 向量的存储区就叫中断向量表 , 即中断服务程 序入口地址表。
图5.3所示是菊花链法的原线
接口1
接口2
接口3
菊花链 逻辑电
路
菊花链 逻辑电
路
菊花链 逻辑电
路
INTA INTR
_____
图5 3 菊花链优先级查询示意图
当外设通过接口和中断请求电路向CPU发出 中断申请号INTR , 并且满足中断响应条件时, CPU在执行完当前指令后便发出中断响应信号 , 该响应信号在所有中断源形成的链形结构中逐级 传送 ,位于链首的1#设备首先得到响应。
int指令-内中断
◆Int n 的执行过程过程
1)中断类型号
2)标志寄存器入栈,IF=0.TF=1
3)Cs ,ip入栈
4)而IP=(n*4),CS=(n*4+2)
◆Int可以调用任何中断的中断处理程序
code segment
assume cs:code
start :mov ax,0b800h
mov es,ax
mov byte ptr es:[12*160+40*2],"!"
int 0
code ends
end start
输出“devide overflow”,原因是执行0号中断,系统将显示“。
”,并返系统
◆编写中断服务程序
◆系统提供的dos中断和BIOS中断
1)如何让安装dos中断到内存中
2)加电,0ffff:0开始,而,该处有一条跳转指令,转去执行系统检测和初始化程序。
3)将BIOS提供的中断服务子程序的入口地址登记在入口向量表中--固定化到rom中
的。
4)Int19操作系统引导,并控制
5)DOS启动,将中断向量表装入内存
◆
◆Int10h包含了许多与屏幕输出有关的程序
◆INT21hDOS中断例程应用
如:mov ah,4ch
Int21h表示调用第21号例程的4c号子程序
◆字符串的输出指令发生错误哩!!
$本身不显示,只是起到边界作用
如果字符串较长,遇到行尾,程序将自动换行
如果到了最后一行,还能自动上卷一行
◆。
INT0中断计数
(1)中央处理器CPU,包括运算器,控制器和寄存器组;
(2)存储器,包括ROM和RAM;
(3)输入输出(I/O)接口,它与外部输入输出设备相连;
(4)电源和时钟电路。
2
2
用AT89C51及电阻、电容、晶闸管、数码管、排阻等实现中断计数。INTO中断计数,每次按下计数键时触发INTO中断,中断程序累加计数,计数值显示在3只数码管上,按下清零键时数码管清零。
它提供的功能标准如表1-3
表1-3ATC89C51功能标
兼容MCS51指令系统
8K可反复擦写Flash ROM
32个双向I/O口
256x8bit部RAM
3个16位可编程定时/计数器中断
时钟频率0-24MHz
2个串行中断
可编程UART串行通道
2个外部中断源
共6个中断源
2个读写中断口线
3级加密位
低功耗空闲和掉电模式
}
}
P0 = DSY_CODE[Display_Buffer[0]];
P1 = DSY_CODE[Display_Buffer[1]];
P2 = DSY_CODE[Display_Buffer[2]];
}
void main()
{
P0=0xff;P1=0源自ff;P2=0xff;/*IE = 0x81;*/
P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编写、安装中断7ch的中断例程(2)
功能:将一个全是字母,以0结尾的字符串,转换为大写 参数:ds:si指向字符串的首地址 返回值:无 例如:将data段中的字符串转换为大写
assume cs:cde data segment db ‘conversation’,0 data ends code segment start: mov ax,data mov ds,ax mov si,0 int 7ch mov ax,4c00h int 21h code ends end start
程序如下
assume cs:code code segment start:mov ax,cs mov ds,ax mov si,offset sqr mov ax,0 mov es,ax mov di,200h mov cx,offset sqrend - offset sqr cld rep movsb ;安装中断程序sqr mov ax,0 mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0 ;设置中断向量 mov ax,4c00h int 21h sqr: mul ax iret ;求平方 sqrend: nop code ends end start
int指令的功能和call指令相似,都是调用一段程序 一般情况下,系统将一些具有一定功能的子程序,以中 断处理程序的方式提供给应用程序调用,应用程序可以 使用int 指令调用这些子程序。 中断处理程序以后简称为中断例程
编写、安装中断7ch的中断例程
功能:求1个word型数据的平方 参数:(ax)=要计算的数据 返回值:dx,ax中存放结果的高16位和低16位 例如:求2*3456^2
程序如下:
assume cs:code code segment start:mov ax,cs mov ds,ax mov si,offset capital mov ax,0 mov es,ax mov di,200h mov cx,offset capitalend - offset capital cld rep movsb ;安装中断程序sqr mov ax,0 mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0 ;设置中断向量 mov ax,4c00h int 21h capital: push cx push si change:mov cl,[si] mov ch,0 jcxz ok and byte ptr [si],11011111b inc si jmp short change ok: pop si pop cx iret capitalend: nop code ends end start
4、按中断号调用DOS或BIOS中断(INT);
5、检查或取得返回参数。
BIOS中断例程应用
int 10h 中断例程是BIOS提供的中断例 程,其中包含了多个和屏幕输出相关的 子程序。 一般的,一个供程序员调用的中断例程 中常包括多个子程序,中断例程内部用 传递进来的参数来决定执行哪个子程序。 BIOS和DOS提供的中断例程,都用ah 来传递内部子程序的编号。
DOS中断例程应用——int 21h
4ch号功能:程序返回
mov ah,4ch mov al,0 int 21h
9号功能:在光标位置显示字符串
ds:dx指向字符串 mov ah,9 int 21h
DOS中断例程应用——int 21h
编程:在屏幕的5行12列显示字符串”Welcome to masm!” assume cs:code data segment db 'Welcome to masm!','$' data ends code segment start:mov ah,2 mov bh,0 mov dh,5 mov dl,12 int 21h
子程序调用
主程序 ……
CALL SUBP 子程序
……
…… RET
……
DOS/BIOS调用 源程序 …… 实现机制不同 INT n ……
DOS/BIOS 例行程序
…… ……
IRET
BIOS和DOS基本调用
调用方法:
1、将调用参数装入指定的寄存器中;
2、BIOS或DOS功能号装入AH;
3、如需子功能号,把它装入AL;
mov mov mov mov int mov int code ends end start ax,data ds,ax dx,0 ah,9 21h ax,4c00h 21h
本章总结
深入掌握int n 指令 掌握编写可供调用的中断例程的方法 BIOS和DOS提供的中断例程及安装过程 BIOS和DOS中断例程应用
BIOS和DOS所提供的中断例程
BIOS中主要包括一下几部分的内容
硬件系统的检测和初始化程序; 外部中断和内部中断的中断例程 用于对硬件设备进行I/O操作的中断例程 其他和硬件系统相关的中断例程
BIOS和DOS中断例程的安装过程
开机后,CPU加电,初始化(CS)=0FFFFh,(IP)=0,自 动从FFFF:0单元开始执行程序。 FFFF:0有一条跳转 指令,CPU执行该指令后,转去执行BIOS中的硬件系 统检测和初始化; 初始化程序将建立BIOS所支持的中断向量,即将 BIOS提供的中断例程的入口地址登记在中断向量表 中; 硬件系统检测和初始化完成后,调用int 19h进行操 作系统的引导。从而将计算机交由操作系统控制; DOS启动后,除完成其他工作外,还将它所提供的中 断例程装入内存,并建立相应的中断向量。
assume cs:cde code segment start: mov ax,3456 int 7ch add ax,ax adc dx,0 mov ax,4c00h int 21h code ends end start
需要完成的工作
编写实现求平方功能的程序sqr 安装程序,将其安装在0:200处 设置中断向量表,将程序的入口地址保 存在7ch表项中
BIOS中断例程应用(续)
int 10h中断例程:在光标位置显示字符
mov mov mov mov mov int ah,9 ;置光标 al,’a’ bl,7 bh,0 ;第0页 cx,3 10h
BIOS中断例程应用(续)
编程:在屏幕的5行12列显示3个红底高亮闪烁绿色的’a’ assume cs:code code segment mov ah,2 ;置光标 mov bh,0 ;第0页 mov dh,5 mov dl,12 int 10h mov ah,9 mov al,'a' mov bl,0cah mov bh,0 mov cx,3 int 10h mov ax,4c00h int 21h code ends end
BIOS中断例程应用(续)
int 10h中断例程:设置光标位置
mov mov mov mov int ah,2 bh,0 dh,5 dl,12 10h ;置光标 ;第0页 ;行号 ;列号
页号:内存地址空间中,B8000h~BFFFFh共 32K的空间,为80*25彩色字符模式的显示缓 冲区,一屏的内容在显示缓冲区中共占4000 个字节。显示缓冲区分为8页,每页4K,显示 器可以显示任一页的内容。一般显示第0页的 内容。
第十三章 INT指令
——内中断
要点
Int n指令 编写、安装中断7ch的中断例程 BIOS和DOS中断例程
int指令
格式:int n 其中:n为中断类型码 功能:引发中断过程 可以使用int指令调用任何一个中断的 中断处理程序 例如:
int n中断的例子
assume cs:code code segment start:mov ax,0b800h mov es,ax mov byte ptr es:[12*160+40*2],’!’ int 0 code ends end start