大二上-汇编语言_第1页
大二上-汇编语言_第2页
大二上-汇编语言_第3页
大二上-汇编语言_第4页
大二上-汇编语言_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

输入/输出和中断本章结构7.2数据的传送方式7.1输入/输出的基本概念7.3中断7.4

DOS中断和BIOS中断7.1输入/输出的基本概念7.1.1

I/O端口地址7.1.2

I/O指令7.1输入/输出的基本概念7.1.1I/O端口地址CPU和外设

CPUMEMI/O设备总线I/O接口7.1输入/输出的基本概念7.1.2I/O指令1)输入指令ININAL/AX,PortNo/DX2)输出指令OUTOUTPortNo/DX,AL/AXI/O指令7.2数据的传送方式7.2.1程序方式7.2.2中断方式7.2.3

DMA方式7.2数据的传送方式7.2.1程序方式

I/O指令是主机与外设进行通信的最基本途径。DOS功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。7.2数据的传送方式7.2.1程序方式举例例:循环测试某状态寄存器的第2位是否为1AGAIN:INAL,STATUS_PORTTESTAL,00000100BJZAGAINMOVAL,DATAOUTDATA_PORT,AL

读I/O状态准备好?

传送数据NYLOGO123DEV1: INAL,STAT1TESTAL,STAT1_BITJZDEV2CALLFARPTRPROC17.2.1程序方式DEV2: INAL,STAT2TESTAL,STAT2_BITJZDEV3CALLFARPTRPROC2DEV3: INAL,STAT3TESTAL,STAT3_BITJZDEV1CALLFARPTRPROC3优:程序安排或修改设备的优先次序缺:查询等待浪费CPU大量有效时间轮流查询几种I/O设备:7.2数据的传送方式7.2.1程序方式举例例:Sound程序2.modeltiny.code.startupcallspeaker_onmovah,1int21hcallspeaker_off.exit07.2数据的传送方式7.2.1程序方式举例例:Sound程序2speaker_onprocpushax

inal,61horal,3

out61h,alpopaxretspeaker_onendpspeaker_offprocpushax

inal,61handal,0fchout61h,alpopaxretspeaker_offendpend7.2数据的传送方式7.2.1程序方式举例printprocnearpushaxpushdxmovdx,378h

;数据寄存器

outdx,almovdx,379h

;状态寄存器again:inal,dxtestal,80h;(dx)7=busyjeagain;=0,打印机忙

movdx,37ah

;控制寄存器

moval,0dhoutdx,al;送选通信号

jmp$+2;展宽选通信号

moval,0choutdx,alpopdxpopaxretprintendp00001101选通位自动换行初始化选择位中断位37AH7.2数据的传送方式7.2.3DMA方式完整DMA数据传送过程步骤123DMA控制器接受I/O接口的DMS请求,向CPU发出总线请求信号HOLD。当CPU发出总线回答信号HLDA将总线让出后,DMA接管对总线的控制,进入DMA方式。DMA控制器通知I/O接口开始DMA数据传送。CPU对DMA控制器初始化,对I/O接口发出操作命令,I/O接口提出DMA请求。4DMA控制器发出读写命令,直接控制内存与I/O进行批量数据的快递传递。如字计数器为0,则停止数据传送,向CPU发出中断请求,DMA控制器释放总线控制权,并向I/O接口发出结果信号,DMA数据传送过程结束。7.3中断7.3.2

IBM-PC的中断源及其优先级7.3.5外同步指令和空操作指令7.3.3中断向量表7.3.6中断和子程序的比较7.3.4软中断及中断指令7.3.1中断的概念7.3中断7.3.1中断的概念外中断(硬中断):外设的I/O请求——可屏蔽中断电源掉电/奇偶错——非屏蔽中断中断源:引起中断的事件内中断(软中断):

INT指令/CPU错(除法错、溢出)/

为调试程序设置的中断7.3中断7.3.2IBM-PC的中断源及其优先级

中断源分为两大类外部中断内部中断7.3中断7.3.2IBM-PC的中断源及其优先级80x86中断源:非屏蔽中断请求

中断逻辑INTnINTO除法错单步n401CPU2NMI8259A可编程中断控制器(PIC)IR0系统定时器IR1键盘IR2彩色/图形接口IR3保留IR4串行通讯口IR5保留IR6软盘IR7打印机INTR08090A0B0C0D0E0F7.3中断7.3.2IBM-PC的中断源及其优先级中断的条件:设置CPU中断允许位:

FLAGS中的IF位=1允许中断(STI)

=0禁止中断(CLI)设置中断屏蔽位:

中断屏蔽寄存器的中断屏蔽位=0允许I/O设备请求中断

=1禁止I/O设备请求中断7.3中断7.3.2IBM-PC的中断源及其优先级

76543210定时器键盘打印机中断屏蔽寄存器21H76543210中断命令寄存器20HEOIMOVAL,20HOUT20H,AL8259A7.3中段7.3.2IBM-PC的中断源及其优先级123(2)保护现场:FLAGS、CS、IP入栈(1)取中断类型:CPU←typeN4CPU中断过程5(3)IF=0,TF=0(4)取中断向量:(4×N)→IP

(4×N+2)→CS(5)转中断处理程序7.3中断7.3.3中断向量表中断向量表

类型0的(IP)

类型0的(CS)

类型1的(IP)

类型1的(CS)

类型N的(IP)

类型N的(CS)

类型255的(IP)

类型255的(CS)00000000044*N003FC中断向量—中断处理程序的入口地址(段址):(偏址)用户可利用保留的中断类型号扩充自己需要的中断功能。7.3中断7.3.4软中断及中断指令举例例:为中断类型N设置中断向量

……MOVAX,0MOVES,AXMOVBX,N*4MOVAX,OFFSETINTHANDMOVES:WORDPTR[BX],AX

;偏移地址(N*4)MOVAX,SEGINTHANDMOVES:WORDPTR[BX+2],AX

;段地址(N*4+2)……INTHAND:;中断处理程序

……IRET7.3中断7.3.5外同步指令和空操作指令例:

编写一个中断处理程序,要求在主程序运行期间,每隔10秒响铃一次,同时显示‘bell’

定时器中断18.2次/SEC

;INT_TIMER∶∶

INT1CH∶∶

IRET

INT_1CHPROC

IRET

INT_ICHENDPRINGPROC1.计数182(10秒)2.显示字符串

IRETRINGENDP7.3中断7.3.5外同步指令和空操作指令.modelsmall.stack.datacntdw1mesdb'bell',0ah,0dh,'$'.codemainprocfarstart:movax,@datamovds,ax

moval,1chmovah,35hint21hpushespushbxpushdsmovdx,offsetringmovax,segringmovds,axmoval,1chmovah,25hint21hpopdsinal,21handal,11111110bout21h,alsti7.3中断7.3.5外同步指令和空操作指令movdi,30000dly:movsi,60000dly1:decsijnzdly1decdijnzdly;主程序

popdxpopdsmoval,1chmovah,25hint21h

movax,4c00hint21hmainendp

7.3中断7.3.5外同步指令和空操作指令ringprocnear……

;保存寄存器

movax,@datamovds,ax

sti;开中断

deccntjnzexitmovdx,offsetmesmovah,09int21h

callsoundmovcnt,182exit:cli;关中断

……;恢复寄存器

iretringendpendstart7.3中断7.3.6中断和子程序的比较中断程序的编写步骤:主程序:设置中断向量设置CPU的中断允许位IF设置设备的中断屏蔽位中断处理子程序:保存寄存器内容如允许中断嵌套,则开中断(STI)中断处理功能关中断送中断结束命令(EOI)给中断命令寄存器恢复寄存器内容IRET中断返回7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能7.4.4打印输出的中断功能7.4.6目录和文件的中断功能7.4.3屏幕显示的中断功能7.4.7返回DOS操作系统7.4.5串行通信口的中断功能7.4.1概述7.4

DOS中断和BIOS中断7.4.1概述DOS功能调用(21H)存取中断向量取中断向量:AH=35HAL=中断类型号INT21H返回时送ES:BX=中断向量设置中断向量:AH=25HAL=中断类型号DS:DX=中断向量INT21H7.4

DOS中断和BIOS中断7.4.1概述MOVAL,NMOVAH,35HINT21H;取原中断向量;保存原中断向量PUSHDSMOVAX,SEGINTHANDMOVDS,AXMOVDX,OFFSETINTHANDMOVAL,NMOVAH,25HINT21H;设置新的中断向量POPDS……POPDXPOPDSMOVAL,NMOVAH,25HINT21H;恢复原中断向量……INTHAND:;中断处理程序……IRET用DOS功能调用存取中断向7.4

DOS中断和BIOS中断7.4.1概述

主程序

……CALLSUBP

……

子程序

……

……RETDOS/BIOS调用

源程序

……INTn

……DOS/BIOS

例行程序

……

……IRET实现机制不同7.4

DOS中断和BIOS中断7.4.1概述调用方法:1、将调用参数装入指定的寄存器中;2、BIOS或DOS功能号装入AH;3、如需子功能号,把它装入AL;4、按中断号调用DOS或BIOS中断(INT);5、检查或取得返回参数。BIOS和DOS基本调用7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能键盘模拟程序字符码:采用ASCII码表示字母、数字、专用字符和一些非打印字符,键盘上的控制键和功能键的ASCII码为0,必须用扫描码来识别。扫描码:键盘上的每个键都对应一个扫描码,扫描码是按键的位置来排列的。7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能datasegmentscatabdb0,0,'1234567890-=',8,0db'qwertyuiop[]',0dh,0db'asdfghjkl;',0,0,0,0db'zxcvbnm,./',0,0,0db'',0,0,0,0,0,0,0,0,0,0,0,0,0db'789-456',0dataendsmainprocfar

……leabx,scatabkey_in:

inal,60htestal,80h;通码?

jnzkey_inpushax

inal,61horal,80h;置应答位

out61h,al

andal,7fhout61h,al;复位应答位

popaxcmpal,01jzexit;按Esc退出

7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

xlatbcmpal,0jzno_dispcalldisp_charno_disp:jmpkey_inexit:……mainendp

disp_charprocnearmovah,2movdl,alint21hretdisp_charendp

76543210设备控制寄存器61H键盘7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能MAINBUFFER满

CALLCALL

IRETNKBD中断32次TYP中断17次KBINTIRETRETDISPRETINTIP例;从键盘接收字符,同时对32字节的输入缓冲区进行测试;如缓冲区已满,将键盘挂起,由打印机输出一个提示信息7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能程序包括以下几个部分:main

初始化部分

kbint

键盘中断处理程序

intip

初始化打印机

prtint

打印机中断处理程序

disp

用十六进制显示al中的内容7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能dsegsegmentaddrdw?;缓冲区指针

countdw?bufferdb20hdup('')promptdb'pleaseinput:',0dh,0ah,'$'messagedb'bufferoverflow',0dh,0ah

save_ip9dw?save_cs9dw?save_ipfdw?save_csfdw?dsegendsmainprocfar

……

movaddr,offsetbuffermovcount,07.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能moval,09;键盘movah,35hint21h

movsave_ip9,bxmovsave_cs9,esmovdx,offsetkbintpushdsmovax,segkbintmovds,axmoval,09movah,25hint21hpopdsinal,21handal,0fdhout21h,almoval,0fh;打印机movah,35hint21h

movsave_ipf,bxmovsave_csf,esmovdx,offsetprtintpushdsmovax,segprtintmovds,axmoval,0fhmovah,25hint21hpopdsmovah,9leadx,promptint21h7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

sti

movdi,8000hdly:movsi,9000hdly1:decsijnzdly1decdijnzdly

movah,2movdl,'$'int21hclipushdsmovdx,save_ip9movax,save_cs9movds,axmoval,09movah,25hint21hpopds7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

pushdsmovdx,save_ipfmovax,save_csfmovds,axmoval,0fhmovah,25hint21hpopdsinal,21handal,0fdhout21h,al

sti……mainendp

7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

kbintprocnearpushaxpushbxinal,60hpushaxinal,61hmovah,aloral,80hout61h,al;送键盘应答信号

xchgah,alout61h,al;复位键盘

popax

testal,80hjnzret1;通码时处理通码:(60h)7=0断码:(60h)7=17.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

movbx,addrmov[bx],al

calldispincbxinccountmovaddr,bxcheck:cmpcount,32jbret1;判断是否溢出

inal,21horal,02

;屏蔽键盘中断

andal,7fhout21h,al

;允许打印机中断

callintipret1:climoval,20hout20h,al;结束键盘中断

popbxpopax

iretkbintendp

7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

intipprocnearpushaxpushbxpushdxclimovbx,offsetmessagemovaddr,bxmovdx,378hmoval,0dhoutdx,al

;输出回车

movdx,37ahmoval,1dhoutdx,al

;送选通信号

jmp$+2;展宽选通信号

moval,1choutdx,alpopdxpopbxpopax

retintipendp

7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

pushdsprtintprocnearpushaxpushbxpushdx

movbx,addrmoval,[bx]movdx,378houtdx,al

pushaxmovdx,37ahmoval,1dhoutdx,aljmp$+2moval,1choutdx,alpopax7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

incbxmovaddr,bxcmpal,0ahjnzret2

inal,21horal,80hout21h,al;屏蔽打印机中断ret2:moval,20hout20h,al

;结束打印机中断

popdxpopbxpopax

iretprtintendp

7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

dispprocnear

;显示扫描码

pushaxpushcxpushdxmovch,2movcl,4nextb:rolal,clpushaxmovdl,alanddl,0fhordl,30hcmpdl,3ahjldispitadddl,7dispit:movah,2int21hpopaxdecchjnznextbmovah,2movdl,','int21h

popdxpopcxpopax

retdispendp7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能例:DOS调用:键盘输入,显示输出

MOV AH,01 ;DOS功能号:键盘输入

INT 21H ;DOS调用

MOVCHAR,AL ;返回参数:(AL) MOVDL,’A’ ;调用参数:输出字符

MOV AH,02 ;DOS功能号:显示输出

INT 21H ;DOS调用

7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能键盘I/O(1)BIOS键盘中断(INT16H)AH功能返回参数

0

从键盘读一字符AL=字符码,AH=扫描码

1

读键盘缓冲区的字符如ZF=0,AL=字符码,

AH=扫描码如ZF=1,缓冲区空

2

取键盘状态字节AL=键盘状态字节7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

字符数字键字符码为ASCII码功能键、控制键字符码为0对应一个扫描码DOS键盘中断(INT21H)7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能

AH

功能调用参数返回参数

1

从键盘输入一个字符并回显在屏幕上AL=字符

6

读键盘字符,不回显DL=0FFH若有字符可取,AL=字符,ZF=0

若无字符可取,AL=0,ZF=1

7

从键盘输入一个字符,不回显AL=字符

8

从键盘输入一个字符,不回显,AL=字符检测Ctrl-Break

A

输入字符到缓冲区DS:DX=缓冲区首址

B

读键盘状态AL=0FFH有键入,AL=00无键入

C

清除键盘缓冲区,AL=键盘功能号并调用一种键盘功能(1,6,7,8或A)7.4

DOS中断和BIOS中断7.4.2键盘输入的中断功能例:输入字符串到缓冲区STRING

DATASEGMENT

MAXLENDB32

MAXLENDB32,0,32DUP(?)ACTLENDB?MAXLENDB32,33DUP(?)STRINGDB32DUP(?)DATAENDSCODE SEGMENT

… LEA DX,MAXLEN MOV AH,0AH INT 21H …CODE ENDS END32568H61H70H70H79H0DHMAXLENACTLENSTRING7.4

DOS中断和BIOS中断7.4.3屏幕显示的中断功能显示器I/O

文本方式ASCII字符

76543210

76543210前景000=黑111=白亮度0=正常亮度1=加强亮度闪烁0=正常显示1=闪烁显示背景000=黑111=白单色属性

76543210

前景闪烁背景BL

R

G

B

IRGB16色属性7.4

DOS中断和BIOS中断7.4.3屏幕显示的中断功能

BIOS显示中断INT10H

功能号AH=0,1,2,3,5,6,7,8,9,0AH,0EH13H(p.328)例:清除屏幕

mov ah,6 ;屏幕初始化

mov al,0 ;全屏空白

mov bh,7 ;卷入行属性

mov ch,0 ;左上角行号

mov cl,0 ;左上角列号

mov dh,24 ;右下角行号

mov dl,79 ;右下角列号

int 10h ;BIOS调用

7.4

DOS中断和BIOS中断7.4.3屏幕显示的中断功能例:

在品红背景下,显示5个浅绿色闪烁的星号。

MOV AH,09

;光标位置下显示

MOV AL,’*’ ;显示字符

MOV BH,0

;显示页0MOV BL,0DAH;1

101

1010

(表9.7)MOV CX,05 ;显示次数

INT 10H

;BIOS调用7.4

DOS中断和BIOS中断7.4.3屏幕显示的中断功能例:在屏幕上以红底兰字显示字符串:“WORLDSCENERY”STRING DB ‘WORLDSCENERY’;定义在ES段

LEN_TR DW 13 ┇ MOV AL,3 ;80×25,16色文本方式

MOV AH,0

INT 10H MOV BP,SEGSTRING MOV ES,BP ;串地址ES:BP MOV BP,OFFSETSTRING MOV CX,LEN_STR;串长度

MOV DX,0 ;起始行列

MOV BX,0041H ;0100

0001(属性)

MOV AL,1 ;子功能

MOV AH,13H

;显示字符串

INT 10H

7.4

DOS中断和BIOS中断7.4.3屏幕显示的中断功能(2)DOS显示功能调用中断

INT21H

AH

功能调用参数

2

显示一个字符(检验Ctrl-Break)DL=字符光标跟随字符移动

6

显示一个字符(不检验Ctrl-Break)DL=字符 光标跟随字符移动

9

显示字符串DS:DX=串地址

串必须以$结束, 光标跟随串移动7.4

DOS中断和BIOS中断7.4.3屏幕显示的中断功能例:显示字符串

MESSAGEDB‘Thesortoperationisfinished.’,13,10,’$’……

MOVAH,9 MOVDX,SEGMESSAGE MOVDS,DX MOVDX,OFFSETMESSAGE

INT21H7.4

DOS中断和BIOS中断7.4.3屏幕显示的中断功能例:输入字符串到缓冲区STRING

DATASEGMENT

MAXLENDB32

MAXLENDB32,0,32DUP(?)ACTLENDB?MAXLENDB32,33DUP(?)STRINGDB32DUP(?)DATAENDSCODE SEGMENT

… LEA DX,MAXLEN MOV AH,0AH INT 21H …CODE ENDS END32568H61H70H70H79H0DHMAXLENACTLENSTRING7.4

DOS中断和BIOS中断7.4.4打印输出的中断功能INTAH功能调用参数返回参数21H5

打印一个字符

DL=字符

17H0

打印一个字符

AL=字符AH=状态字节

并回送状态字节

DX=打印机号

17H1

初始化打印机

DX

温馨提示

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

评论

0/150

提交评论