汇编中断整理_第1页
汇编中断整理_第2页
汇编中断整理_第3页
汇编中断整理_第4页
汇编中断整理_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、打印机:源程序: MOVBX ,OFFSET BUFFER;置缓冲区偏移量MOVCX,CHRTL;置输出字符计数器BG:MOVAL, BX;取字符MOVDX,378H;输出字符到数据寄存器OUTDX,ALMOVDX,379H;读打印机状态WT:INAL,DXTESTAL,80H ;判忙否?JZWT ;忙,重查询MOVDX,37AH ;形成选通信号MOVAL,0DH ;令打印机打印字符OUTDX,AL MOVAL,0CHOUTDX,ALINCBX;指向下一输出字符LOOPBG 发声程序:mov dx,100 ;dx=音长,bx=音频 in al,61h and al,11111100bsound

2、: xor al,2 out 61h,al mov cx,bxwait1: loop wait1 dec dx jne sound中断:从外设发出中断请求到CPU响应中断, 有两个决定性的条件:.该外设的中断请求是否被屏蔽? 这个条件8259A的中断屏蔽寄存器(IMR)中相应的位来决定: IMR-的端口地址为21H, 具体见P293. 如: 只允许键盘中断 MOV AL, 11111101B OUT 21H, AL.CPU是否允许响应中断? 这个条件分别由CPU的标志寄存器(FLAGS)中的IF位. IF=1-允许CPU响应中断, STI, 开中断 IF=0-禁止CPU响应中断, CLI, 关

3、中断主程序为响应中断应做的准备工作,以及硬件(CPU和外设接口)自动完成的工作:主程序:(1)设置中断向量 (2)设置8259A的中断屏蔽位 (3)设置CPU的中断允许位硬件: (4)外设接口送中断请求给CPU (5)当前指令执行完后,CPU送响应信号给外设接口 (6)CPU接收中断类型号 (7)当前的FLAGS,CS和IP入栈 (8)清除IF和TF (9)中断向量送IP和CS设置中断向量 / 取中断向量 用户可利用保留的中断类型号扩充自己需要的中断功能。例:为中断类型N设置中断向量MOV AX, 0MOV ES, AXMOV BX, N*4MOV AX, OFFSET INTHANDMOV

4、ES: WORD PTRBX, AX ; 偏移地址(N*4)MOV AX, SEG INTHANDMOV ES: WORD PTRBX+2, AX ; 段地址(N*4+2)INTHAND: IRETDOS功能调用(21H)存取中断向量设置中断向量:AH=25HAL=中断类型号DS:DX=中断向量INT 21H取中断向量:AH=35HAL=中断类型号INT 21H返回时送ES:BX=中断向量MOVAL,NMOVAH,35HINT21HPUSHESPUSHBXPUSHDSMOVAX,SEG INTHANDMOVDS,AXMOVDX,OFFSET INTHANDMOVAL,NMOVAH,25HINT

5、21HPOPDSPOPDXPOPDXMOVAL,NMOVAH,35HINT21HRET;INTHAND: IRET每隔10秒响铃一次,同时在屏幕上显示”The bell is ring!”.model small .data count dw 1 msg db The bell is ring!,0dh,0ah,$ .code main proc far start: mov ax,data mov DS,AX ;SVAE OLD INTERRUPT VECTOR MOV AL,1CH MOV AH,35H INT 21H PUSH ES PUSH BX PUSH DS;SET NEW INT

6、ERUPT MOV DX,OFFSET RING MOV AX,SEG RING MOV DS,AX MOV AL,1CH MOV AH,25H INT 21H POP DS ;SET INTERRUPT MASK BITS IN AL,21H AND AL,11111110B OUT 21H,AL STI ;开中断下面循环是空循环,目的是测试中断的发生 MOV DI,30000 DELAY: MOV SI,30000 push si mov si,30000 delay2:dec si jnz delay2 pop si DELAY1:DEC SI JNZ DELAY1 DEC DI JNZ

7、 DELAY;恢复原来中断处理程序 POP DX POP DS MOV AL,1CH MOV AH,25H INT 21H;返回DOS MOV AX,4C00H INT 21H MAIN ENDPRING PROC NEAR PUSH DS PUSH AX PUSH CX PUSH DX MOV AX,DATA MOV DS,AX STI DEC COUNT JNZ EXIT MOV DX,OFFSET MSG MOV AH,09H INT 21H mov di,9000 mov bx,1400h MOV DX,4500 IN AL,61H AND AL,0FCH SOUND: XOR AL,

8、02H OUT 61H,AL MOV CX,523 ;iWAIT1: LOOP WAIT1 DEC DX JNE SOUND MOV COUNT,182 ;CONTROL RING INTERVAL DELAY(10S)EXIT: CLI POP DX POP CX POP AX POP DS IRETRING ENDP END STARTjmp prt_warnexit: mov ax,4cffh int 21hcontinue: mov dx,offset crlf mov ah,9 int 21h clipop es/ds/bp/di/si/dx/cx/bx/ax iretzdiv en

9、dpok_msg db 0dh,0ah, zero division handler installed! db 0dh,0ah,$warn_msg db zero division detected,07h db continue or quit(c/q)? $beep db 07h,$crlf db 0dh,0ah,$prog_len equ $-main end mainzdiv proc farpush ax/bx/cx/dx/si/di/bp/ds/es stiprt_warn: mov ax,code mov ds,ax mov dx,offset warn_msg mov ah,

10、9 int 21hinput: mov ah,1 int 21h cmp al,c je continue cmp al,q je exit mov dx,offset beep mov ah,9 int 21h.model small.codemain proc far lea dx,zdiv mov ax,seg zdiv mov ds,ax mov al,0 mov ah,25h int 21h mov ax,code mov ds,ax mov dx,offset ok_msg mov ah,9 int 21h; mov ax,1; mov dl,0; div dl; mov ah,2

11、; mov dl,#; int 21h mov ah,31h mov al,0 mov dx,(prog_len+15)/16)+16 int 21hmain endp第九章 BIOS 和 DOS 中断调用方法:1、将调用参数装入指定的寄存器中;2、BIOS或DOS功能号装入AH;3、如需子功能号,把它装入AL;4、按中断号调用DOS或BIOS中断(INT);5、检查或取得返回参数。 ()BIOS显示中断 INT 10H 功能号 AH=0,1, 2, 3, 5, 6, 7, 8, 9, 0AH, 0EH 13H (p.328) 例:清除屏幕 movah, 6; 屏幕初始化moval, 0; 全

12、屏空白movbh, 7; 卷入行属性movch, 0; 左上角行号movcl, 0; 左上角列号movdh, 24; 右下角行号movdl, 79; 右下角列号int10h; BIOS调用(2) DOS显示功能调用中断 INT 21H 例:显示字符串 MESSAGE DB The sort operation is finished.,13,10,$ MOV AH,9 MOV DX,SEG MESSAGE MOV DS,DX MOV DX,OFFSET MESSAGE INT 21H例: 在品红背景下,显示5个浅绿色闪烁的星号。 MOVAH,09 ;光标位置下显示 MOVAL,* ;显示字符

13、MOVBH,0 ;显示页0 MOVBL,0DAH ; 1 101 1010 (表9.7) MOVCX,05 ;显示次数 INT 10H ;BIOS调用例:在屏幕上以红底兰字显示字符串:“WORLD SCENERY” STRING DB WORLD SCENERY ;定义在ES段 LEN_TR DW 13 MOV AL,3 ;8025, 16色文本方式MOV AH,0INT 10HMOV BP,SEG STRINGMOV ES,BP ;串地址ES:BPMOV BP,OFFSET STRING MOV CX,LEN_STR ;串长度 MOV DX,0 ;起始行列MOV BX,0041H;0100

14、0001(属性)MOV AL,1;子功能MOV AH,13H;显示字符串INT 10H扫描码: 每次按键产生两次中断,两个扫描码,分别接通扫描码(按下)和断开扫描码(松开).最初,83键键盘的每个键对应一个8位扫描码,其中断开扫描码是接通扫描码的最高位置1. 例如:ESC的通码和断码分别为01H和81H.2.键盘输入处理机制. 每当按键动作产生时,系统作如下处理:(1)主板上的键盘微控制器(INTEL8042或8048)获得按键的扫描码,将扫描码放入I/O端口60H(8255A的PA端口),并触发键盘中断INT 09H的中断请求.(2).若允许键盘中断(8259A),且CPU开中断(IF=1)

15、,则进入INT 09H的ISR.(3).INT 09H的ISR从端口60H读扫描码,并根据扫描码对应的按键作相应处理. (A).如果是特殊请求键,则出发相应功能.例如:若按下CTRL-ALT-DEL,则转到地址:0FFFF:0000H,使系统复位. (B).如果是变换键,则修改BIOS数据区的变换键状态等信息.对于开关键CAPSLOCK,NUMLOCK,和SCROLL LOCK,还要更新键盘上的LED指示灯.(C)否则,根据变换键的当前状态,生成一个16位值,存入键盘缓冲区,其中低字节是ASCII码,高字节是扫描码.对于无对应ASCII码的键,低字节为0(或0E0H),高字节为扩展码,大多数扩

16、展码为按BIOS数据区键的扫描码. 与键盘有关的BIOS数据区 (A).键盘BUFFER 键盘BUFFER是一个先进先出的循环队列,其定义如下: HeadPtr dw ? ;头指针,地址为0040:001AH TailPtr dw ? ;尾指针,地址为0040:001CH Buffer 若 HeadPtr= TailPtr ,则BUFFER为空, 若 HeadPtr= 1EH,TailPtr =3CH,则BUFFER已满,此时键盘的ISR拒绝接受按键. dw 16 dup(?) ;键盘BUFFER,地址为 0040:001EH(B).变换键状态字节 地址为0040:0017H例:接收键盘按键,

17、显示其通码和断码,按ESC键退出ESCSCANCODE EQU 01HDELSCANCODE EQU 53HINTNO EQU 9HCR EQU 0DHLF EQU 0AHCTRLBIT EQU 4ALTBIT EQU 8KBDFLAG EQU BYTE PTR DS:17HCODE SEGMENT PARA PUBLIC CODE ASSUME CS:CODEOLDINT9 DD ?MYINT9 PROC FAR STI PUSH DS PUSH AX PUSH CX MOV AX,40H MOV DS,AX XOR CX,CXWAITDATA: IN AL,64H TEST AL,01B LOOPZ WAITDATAJZ QUITINT9MOV WORD PTR ES:INTNO*4, OFFSET MYINT9MOV WORD PTR ES:INTNO*4+2,SEG MYINT9IN AL,21H AND AL,11111101B OUT 21H,AL STIWAITING:CMP SCANCODE,ESCCODE JNE WAITING CLI MOV AX,WORD PTR OLDINT9 MOV ES:INTNO*4,AX MOV AX,WORD PTR OLD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论