第三汇编语言程序设计演示文稿_第1页
第三汇编语言程序设计演示文稿_第2页
第三汇编语言程序设计演示文稿_第3页
第三汇编语言程序设计演示文稿_第4页
第三汇编语言程序设计演示文稿_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

第三汇编语言程序设计演示文稿目前一页\总数七十七页\编于十七点(优选)第三汇编语言程序设计目前二页\总数七十七页\编于十七点计算机语言分为三类:机器语言,汇编语言和高级语言.(1)机器语言机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合.优点:执行速度快,占用内存少缺点:不直观,不易理解和记忆.(2)汇编语言汇编语言是一种用助记符表示的仍然面向机器的计算机语言.为了克服机器语言难读、难编、难记和易出错的缺点,人们就用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码(如用ADD表示运算符号“+”的机器代码),于是就产生了汇编语言.优点:与机器语言相比,编写、阅读和修改都比较方便;占用空间少,执行速度快.缺点:面向机器的语言,通用性差.目前三页\总数七十七页\编于十七点(3)高级语言计算机事业的发展,促使人们去寻求一些与人类自然语言相接近且能为计算机所接受的语意确定、规则明确、自然直观和通用易学的计算机语言.这种与自然语言相近并为计算机所接受和执行的计算机语言称高级语言.目前被广泛使用的高级语言有BASIC、PASCAL、C、COBOL、FORTRAN、LOGO以及VC、VB等.优点:不针对某个具体的计算机,通用性强;语言程序易读、易编.缺点:占用更多的内存,编译或解释的过程也要花费更多的时间.目前四页\总数七十七页\编于十七点为什么要用汇编语言编写程序高级语言“易学易用”,这是因为高级语言的语句是面向数学语言和自然语言的,因此容易接受、掌握.相对来说汇编语言编制程序比高级语言要困难些.既然如此,为什么还要学习和使用汇编语言呢?主要有以下几点:⑴程序设计人员可以充分利用机器硬件的全部功能,发挥机器的长处.⑵现在的微机系统中,底层的一些功能仍然靠汇编语言程序来实现.例如机器的自检、系统初始化、实际的输入输出操作,至今仍然是用汇编语言编制的程序来完成.⑶汇编语言程序的效率通常高于高级语言程序.所以在节省内存空间和提高程序运行速度的重要场合,如实时控制,常常使用汇编语言来编制的.鉴于以上理由,现在许多高级语言都设置有与汇编语言程序接口的功能,以便于提高高级语言程序的效率.目前五页\总数七十七页\编于十七点3.2汇编语言源程序的格式3.2.1程序结构3.2.2语句结构目前六页\总数七十七页\编于十七点3.2.1程序结构-分段结构例3.1将五个字节的16进制数相加.被加数存放在数据段以DATA1为首地址的内存空间内,数据:0F8H,60H,0ACH,74H,3BH.加数存放在数据段以DATA2为首地址的内存空间内,数据为:0C1H,36H,9EH,0D5H,20H.目前七页\总数七十七页\编于十七点;实现将两个五字节的16进制数相加DATASEGMENT;定义数据段DATA1DB0F8H,60H,0ACH,74H,3BH;被加数DATA2DB0C1H,36H,9EH,0D5H,20H;加数DATAENDS ;数据段结束CODESEGMENT;定义代码段

ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循环次数送CXMOVSI,0;置SI初值为零

CLC;清CF标志LOOPER:MOVAL,DATA2[SI];取一个字节加数

ADCDATA1[SI],AL;与被加数相加

INCSI;SI加1DECCX;CX减1JNZLOOPER;若不等于零,转LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代码段结束

ENDSTART;源程序结束目前八页\总数七十七页\编于十七点数据段名SEGMENT┊数据段名ENDS堆栈段名SEGMENT┊堆栈段名ENDS代码段名SEGMENTASSUMECS:代码段名,DS:数据段名,SS:堆栈段名起始标号:MOVAX,数据段名

MOVDS,AX ┊MOVAH,4CHINT21H;返回DOS代码段名ENDSEND起始标号汇编语言源程序的一般格式:目前九页\总数七十七页\编于十七点3.2.1程序结构-分段结构;实现将两个五字节的16进制数相加DATASEGMENT;定义数据段DATA1DB0F8H,60H,0ACH,74H,3BH;被加数DATA2DB0C1H,36H,9EH,0D5H,20H;加数DATAENDS ;数据段结束CODESEGMENT;定义代码段

ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循环次数送CXMOVSI,0;置SI初值为零

CLC;清CF标志LOOPER:MOVAL,DATA2[SI];取一个字节加数

ADCDATA1[SI],AL;与被加数相加

INCSI;SI加1DECCX;CX减1JNZLOOPER;若不等于零,转LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代码段结束

ENDSTART;源程序结束程序由数条语句构成,每语句占一行.指令性语句(指令语句)指示性语句(伪指令语句)分段结构程序按段编写,与8088内存分段编址相对应.每段由伪操作SEGMENT开始、由ENDS结束.程序可由多个段构成,至少有一个代码段程序最后为END结束语句,后跟一启动地址.目前十页\总数七十七页\编于十七点;实现将两个五字节的16进制数相加DATASEGMENT;定义数据段DATA1DB0F8H,60H,0ACH,74H,3BH;被加数DATA2DB0C1H,36H,9EH,0D5H,20H;加数DATAENDS ;数据段结束CODESEGMENT;定义代码段

ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循环次数送CXMOVSI,0;置SI初值为零

CLC;清CF标志LOOPER:MOVAL,DATA2[SI];取一个字节加数

ADCDATA1[SI],AL;与被加数相加

INCSI;SI加1DECCX;CX减1JNZLOOPER;若不等于零,转LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代码段结束

ENDSTART;源程序结束目前十一页\总数七十七页\编于十七点3.2.2语句结构语句分为指令性语句和指示性语句.指令性语句——使CPU产生动作、并在程序执行时才执行的语句,就是第2章学习的指令;指示性语句——不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等,主要由伪操作指令组成;目前十二页\总数七十七页\编于十七点(1)一个程序经汇编,连接和装入内存后,在执行程序之前:指示性语句的功能已经完成,故又称伪操作.而指令性语句的功能尚未完成,需控制CPU去执行,才能完成.(2)汇编以后,每条CPU指令产生一一对应的目标代码;而伪操作则不产生与之对应的目标代码.指示性语句与指令性语句区别目前十三页\总数七十七页\编于十七点;实现将两个五字节的16进制数相加DATASEGMENT;定义数据段DATA1DB0F8H,60H,0ACH,74H,3BH;被加数DATA2DB0C1H,36H,9EH,0D5H,20H;加数DATAENDS ;数据段结束CODESEGMENT;定义代码段

ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循环次数送CXMOVSI,0;置SI初值为零

CLC;清CF标志LOOPER:MOVAL,DATA2[SI];取一个字节加数

ADCDATA1[SI],AL;与被加数相加

INCSI;SI加1DECCX;CX减1JNZLOOPER;若不等于零,转LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代码段结束

ENDSTART;源程序结束目前十四页\总数七十七页\编于十七点语句格式(1)指令性语句[标号:]指令助记符[操作数,操作数][;注释]LOOPER:MOVAL,DATA2[SI](2)指示性语句[名字]伪指令助记符[参数,参数,…][;注释]DATA1DB0F8H,60H,0ACH统一这两种语句格式如下:[名字]助记符/伪操作[操作数][;注释]目前十五页\总数七十七页\编于十七点(1)名字名字项:标号(指令性语句中)、变量名、段名、过程名(指示性语句中).标号有三种属性:段、偏移量和类型标号段属性:是定义标号的程序段的段地址.标号偏移属性:表示标号所在段的起始地址到定义该标号的地址之间的字节数.标号的类型:NEAR和FAR.变量名也有三种属性:段、偏移量和类型变量的段属性:变量所代表的数据区所在段的段地址.变量的偏移量:是该变量所在段的起始地址与变量的地址之间的字节数.变量的类型:

BYTE(字节)、WORD(字)和DWORD(双字)目前十六页\总数七十七页\编于十七点(2)助记符/伪操作

对于指令,汇编程序将其翻译成机器语言指令

MOVAX,100→B80001对于伪操作,汇编程序据其要求的功能进行处理.伪指令没有机器代码.伪指令助记符将在下一节学习,前面引入的定义字节数据和字符串的DB就是伪指令.目前十七页\总数七十七页\编于十七点(3)操作数操作数可以是常数、寄存器、标号、变量或表达式等.常数:常数可以为二进制数、十进制数、十六进制数、八进制数以及数的各种表示法表示的数,例如科学表示法表示的数等.常数不得以字母开头,因此,当十六进制数的最高位为A~F时,应在其前增加数字“0”.例0F3H.用单引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值.例如:'d'=64H'AB'=4142H.目前十八页\总数七十七页\编于十七点表达式表达式中常用的运算符有以下几种:(1)算术运算符movax,3*4+5 ;等价于movax,17(2)逻辑运算符MOVAL,01011010BAND11100000B(3)关系运算符

EQ,NE,LT,GT,LE,GEMOVAX,4EQ3;(AX)=0MOVAX,4NE3;(AX)=0FFFFH(4)分析运算符和合成运算符OFFSET、SEG、PTR目前十九页\总数七十七页\编于十七点(4)分析运算符和合成运算符:用以分析一个存储操作数的属性,如段、偏移量或类型等.合成运算符则规定存储器操作数的某个属性,例如类型.OFFSET标号/变量MOVSI,OFFSETDATA1LEASI,DATA1SEG标号/变量MOVAX,SEGARRAYMOVDS,AX;将变量ARRAY的段地址送DS寄存器.PTR指定存储器操作数的类型.INCBYTEPTR[BX][SI]目前二十页\总数七十七页\编于十七点3.3伪操作命令(指示性语句)3.3.1处理器方式伪操作3.3.2数据定义伪操作(变量定义伪操作)3.3.3符号定义伪操作3.3.4段定义伪操作3.3.5过程定义伪操作3.3.6模块定义与连接伪操作3.3.7宏处理伪操作3.3.8条件伪操作3.3.9列表伪操作3.3.10其他伪操作目前二十一页\总数七十七页\编于十七点3.3.2数据定义伪操作(变量定义伪操作)数据定义伪操作的用途是定义一个变量的类型,给变量分配存储单元,再给存储器赋初值或者不赋予特定的值.它的一般格式如下:[变量名]伪指令助记符操作数[,操作数]HEXTABDB01,02,03,04,05,06,07,08,09目前二十二页\总数七十七页\编于十七点DB:定义变量类型为BYTE,DB伪操作后面的操作数每个占1个字节.DW:定义变量类型为WORD,DW伪操作后面的操作数每个占1个字,即2个字节.在内存中存放时,低位字节在前,高位字节在后.DD:定义变量类型为DWORD,DD伪操作后面的操作数每个占2个字,即4个字节.在内存中存放时,低位字节在前,高位字节在后.DQ:定义变量类型为QWORD,DQ伪操作后面的操作数每个占4个字,即8个字节.在内存中存放时,低位字节在前,高位字节在后.DT:定义变量类型为TBYTE,DT伪操作后面的操作数每个占10个字节.变量定义伪指令助记符目前二十三页\总数七十七页\编于十七点MNDB01H,02HMNDW01H,02HMNDD01H,02HMNDQ01H,02HMNDT01H,02H目前二十四页\总数七十七页\编于十七点DATADB100,0FFHEXPRDB2*3+7STRDB‘WELCOME’ABDB‘AB’BADW‘AB’ABDDDD‘AB’OFFABDWABADRSDWTABLE,TABLE+5,TABLE+10TOTALDDTABLEDECMLDT1234567890HHEXTABDB01,02,03,04,05,06,07,08,09DB0AH,0BH,0CH,0DH,0EH,0FHFILLERDB?目前二十五页\总数七十七页\编于十七点例:定义字符串变量(超过两个字符的字符串只能用DB定义)

dataSEGMENT

str1DB'TsingHua'

str2DB'INPUT:',0dH,0aH,'$'dataENDS注意:3个及其以上的字符,只能用DB定义str1DW‘abcd’str2DD‘abcd’目前二十六页\总数七十七页\编于十七点DUP复制操作数可用DUP复制操作数,用以定义相同的操作数,其格式为:重复次数DUP(操作数)例

EEDB3DUP(4)

等价于EEDB4,4,4FFDB3DUP(4,5)

等价于FFDB4,5,4,5,4,5FILIERDB?SUMDB?DB?,?,?BUFFERDB10DUP(?)ZERODW30DUP(0)MASKDB5DUP(‘OK!’)ARRAYDB100DUP(3DUP(8),6)目前二十七页\总数七十七页\编于十七点3.3.4段定义伪操作1、SEGMENT/ENDS格式:段名 SEGMENT[定位][组合][‘类别’]

…… ;语句段名 ENDS(1)段定义由SEGMENT和ENDS这一对伪指令实现,SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表示一个段的结束.(2)SEGMENT伪操作后面还有三个任选项:定位类型、组合类型和‘类别’.它们可有可无.如果有,三者的顺序必须符合格式中的规定.(3)这些任选项是给汇编程序和连接程序(LINK)的命令.目前二十八页\总数七十七页\编于十七点2、ASSUME伪指令格式:

ASSUME段寄存器名:段名[,段寄存器名:段名,…]其中,段寄存器名为CS、DS、ES、SS中的一个.段名为用伪操作SEGMENT定义过的段名.例:ASSUMECS:CODE,DS:DATA1,ES:DATA2,SS:STACKASSUME伪操作的作用:告诉汇编程序,将某一个段寄存器设置为某一个逻辑段的段地址,即明确指出源程序中的逻辑段与物理段之间的关系.当汇编程序汇编一个逻辑段时,即可利用相应的段寄存器寻址该逻辑段中的指令或数据.目前二十九页\总数七十七页\编于十七点例用程序实现1234H+5678H

DATASEGMENTvalueDW1234H,5678HresultDW?

DATAENDS

CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA;给DS赋值

MOVDS,AXMOVAX,value;取数

ADDAX,value+2;两数相加

MOVresult,AX;保存结果

MOVAH,4CH;返回DOSINT21H

CODEENDSENDSTART目前三十页\总数七十七页\编于十七点需要说明的是,尽管ASSUME语句指明了段寄存器与逻辑段的关系,但是,并没有给段寄存器赋予实际的初始值.目前三十一页\总数七十七页\编于十七点3.3.5过程定义伪操作过程定义伪操作命令为PROC/ENDP,格式如下:过程名 PROC[NEAR/FAR];隐含为NEAR …… RET;必须有返回指令过程名 ENDP(1)过程名常用作CALL调用指令的操作数,过程的最后安排RET返回指令,使执行完过程后能返回调用处.(2)过程有两种类型:NEAR和FAR,无类型项时,默认为NEAR类型.当过程与调用指令不在同一段时,应将过程定义为FAR类型.目前三十二页\总数七十七页\编于十七点;汇编语言程序结构例子(子程结构);用二进制显示中断向量表中数据D0H的个数目前三十三页\总数七十七页\编于十七点3.5DOS和BIOS调用DOS的基本组成:DOS引导程序、IO.SYS、MSDOS.SYS、COMMAND.COM.MSDOS.SYS:是整个DOS系统的核心,由如下两部分组成:初始化程序,用来完成DOS内部的初始化工作;系统功能调用程序.IO.SYS:在系统盘上的,称为BIOS接口(DOS内核与硬件系统的接口).COMMAND.COM:DOS的外壳(shell)程序,它接受外部命令并对该命令进行解释和执行.C:\>COPY\WPS\ABC.WPSA:\BAC.WPSBIOS的基本组成:自检及初始化、程序服务处理、硬件中断处理,程序服务处理:其中包括BIOS中断服务程序.附录5BIOS调用目前三十四页\总数七十七页\编于十七点BIOS是英文“Basic

Input

Output

System”的缩略,“基本输入输出系统”.其内容集成在微机主板上的一个ROM芯片上,主要保存着有关微机系统最重要的BIOS中断服务程序,BIOS系统设置程序,POST上电自检,BIOS系统启动自举程序.BIOS应该是连接软件程序与硬件设备的一座“桥梁”,负责解决硬件的即时要求.BIOS的功用:BIOS中断服务程序,BIOS系统设置程序,POST上电自检,BIOS系统启动自举程序.CMOS是主板上的一块可读写的RAM芯片,里面装的是关于系统配置的具体参数,其内容可通过设置程序进行读写.“通过BIOS设置程序对CMOS参数进行设置.”目前三十五页\总数七十七页\编于十七点目前三十六页\总数七十七页\编于十七点目前三十七页\总数七十七页\编于十七点用户程序控制PC机硬件的方式(1)使用高级语言提供的功能控制硬件优点:使用高级语言提供的I/O语句,使用方便缺点:高级语言的I/O语句较少,执行速度慢.(2)使用DOS提供的程序控制硬件优点:使用DOS调用的程序可移植性好,I/O功能多,编程简单.缺点:执行效率较低.(3)使用BIOS提供的程序控制硬件优点:使用BIOS调用的程序I/O功能多,编程简单,执行效率较高.缺点:可移植性差.(4)直接控制硬件系统编程(IN/OUT)优点:执行速度快缺点:程序的移植性较差,需要用户熟悉硬件.目前三十八页\总数七十七页\编于十七点应该选哪种方法来控制PC机的硬件呢?应该根据编程人员的素质和所编程序的使用要求来考虑这个问题,一个程序员需权衡程序的可移植性、编程的复杂性和目标代码大小后做出决定.具体说几点:(1)如果高级语言提供的功能完全能满足编程的需要,就没有必要直接使用DOS和BIOS功能调用,这样的程序就具有良好的可移植性,而且接口比较简单.但是高级语言提供的I/O功能比DOS要少,所以有些操作仅仅使用高级语言提供的语句将无法完成.此外,使用高级语言作I/O操作将明显增加程序的代码段.(2)尽可能使用DOS的系统功能调用,提高程序可移植性.(3)在DOS功能不能实现情况下,考虑用BIOS功能调用.(4)在DOS和BIOS的中断子程不能解决问题时,使用IN/OUT指令直接控制硬件.目前三十九页\总数七十七页\编于十七点1、键盘中断的调用(1)键盘的工作原理(2)DOS键盘中断(3)BIOS键盘中断2、显示中断的调用(1)显示的基本概念(2)BIOS显示中断(3)DOS显示中断目前四十页\总数七十七页\编于十七点1、键盘中断的调用(1)键盘的工作原理(1)键盘上的键有三种类型:①字符键,如字母A到Z,数字0到9,%,$,等.②功能键,如F1~F10、PgUp等.③组合键及双态键,如Shift,Alt,Ctrl,Capslock,Numlock等.使用这些键能改变其它键所产生的字符码.(2)键盘上的每个键都有一个字符码和扫描码(P396).①扫描码的作用是:确定操作的是哪个键以及是按下键还是释放键;②扫描码用一个字节表示:低7位是扫描码的数字编码,与键盘上的键一一对应;最高位D7位表示键的操作状态:当按下键时,D7=0;当释放键时,D7=1目前四十一页\总数七十七页\编于十七点PC机对键盘的管理:PC机键盘内都有一个单片机,一般为INTEL8048,它不断地扫描各键,对于按下的键,将其扫描码串行送往主机.在主机接口将它变为并行数据存于一并行输入口(60H),并由硬件引起09H号可屏蔽中断.目前四十二页\总数七十七页\编于十七点INT09H中断服务程序完成以下任务:①从8255可编程序外围接口芯片的输入端口60H读取操作键的扫描码.②将扫描码转换成字符码:大部分键的字符码为ASCII码,无ASCII码键(如组合键Shift、Ctrl等)的字符码为0.③将键的扫描码、字符码存放在键盘缓冲区,供其它有关键盘的中断子程应用.目前四十三页\总数七十七页\编于十七点(2)DOS键盘中断(1)单字符输入(2)字符串输入(3)检测键盘状态目前四十四页\总数七十七页\编于十七点DOS和BIOS调用方法设置入口参数在AH设置功能号m执行中断指令INTN分析、应用出口参数例1单字符显示功能调用MOVDL,‘A’;设置入口参数MOVAH,02H;设置功能号INT21H;执行中断调用例2单字符输入功能调用MOVAH,01H;设置功能号INT21H;执行中断调用CMPAL,0DH;分析、应用出口参数JZexit……………目前四十五页\总数七十七页\编于十七点(1)单字符输入(01H、07H、08H功能)入口参数无功能号

AH=01H或07H或08H类型号

21H出口参数

(AL)=键入字符的ASCII码实现功能:

01H:等待从键盘输入一个字符,并在屏幕上回显,光标移动,检测Ctrl-Break键.若按下了此组合键,则结束当前程序,返回DOS提示符下.07H:等待从键盘输入一个字符,不在屏幕上回显,

不检测Ctrl-Break键.08H:等待从键盘输入一个字符,不在屏幕上回显,检测Ctrl-Break键若按下了此组合键,则结束当前程序,返回DOS提示符下.目前四十六页\总数七十七页\编于十七点例利用键盘输入的字符产生分支:

MOVAH,01H;等待从键盘输入

INT21H

CMPAL,‘Y’

;是’Y’?

JZyes

CMPAL,‘N’

;是’N’?

JZnono:......JMPexityes:......exit:...目前四十七页\总数七十七页\编于十七点(2)字符串输入(0AH功能)实现功能:等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动.因此必须事先定义一个缓冲区.其第一个字节给定缓冲区中能存放的字节数,第二个留给系统填写实际键入的字符个数,从第三个字节开始用来存放键入的字符串,最后键入回车符(Enter)键表示字符输入结束.调用前缓冲区的段地址和偏移量应分别送DS:DX.注意事项:应按要求先定义缓冲区,再调用.目前四十八页\总数七十七页\编于十七点例应用0AH功能输入字符串DATASEGMENT;定义缓冲区BUFSIZEDB25;定义限制最多输入个数ACTCHARDB?;用于存放实际输入个数CHARTEXTDB25DUP(?);用于存放输入的字符串DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA;置缓冲区地址于DS:DXMOVDS,AXMOVDX,OFFSETBUFSIZE

MOVAH,0AHINT21H;调0A输入功能

MOVAH,4CHINT21HCODEENDSENDSTART目前四十九页\总数七十七页\编于十七点DATASEGMENTBUFSIZEDB25ACTCHARDB?

CHARTEXTDB25DUP(?)

DATAENDS从键盘输入‘HELLO’,回车,内存的存放结果:等价于BUFSIZEDB25,?,25DUP(?)目前五十页\总数七十七页\编于十七点(3)检测键盘状态(0BH功能)入口参数无功能号

AH=0BH类型号21H出口参数

AL=FFH,表示有键按下.AL=0,表示无键按下.实现功能检测是否有字符键入.这个调用十分有用.例如有时要求程序保持运行状态,但又要靠用户按任意一键使程序结束或退出循环时,则必须使用0BH号调用.目前五十一页\总数七十七页\编于十七点例利用0B功能实现按键退出循环.….continue:….MOVAH,0BH;检测是否有键按下

INT21HCMPAL,0FFH

JNZcontinue;无键按下继续循环….….

MOVAH,4CHINT21H目前五十二页\总数七十七页\编于十七点(3)BIOS键盘中断大家把书翻到P395和156页目前五十三页\总数七十七页\编于十七点DOS系统功能调用中的键盘子功能(01H,07H,08H)与BIOS调用中INT16H功能有何不同?不同是:INT21H的功能01H、07H、08H都能从键盘缓冲区读入一个字符的ASCⅡ码到AL寄存器中,且功能1能显示字符.但不能区分那些ASII码都为00H的键,例如一些特殊功能键.INT16H可以得到键的ASCII码和扫描码,可以区分键盘上的任意键被按下,但不能显示字符.目前五十四页\总数七十七页\编于十七点(1)从键盘读一个字符入口参数无

功能号

AH=00H

类型号

16H

出口参数

AL=键入字符的ASCII码=0(字符无ASCII码)

AH=字符的扫描码

实现功能

读一个键盘字符(若字符已键入并放入键盘缓冲区,则立即返回该字符,否则等待,直到有字符输入为止)例如:从键盘输入一个字符CODESEGMENTASSUMECS:CODESTART:MOVAH,0INT16HMOVAH,4CHINT21HCODEENDSENDSTART目前五十五页\总数七十七页\编于十七点下面一段程序的功能是,按下F1和F2键,分别执行两段不同程序,按其他键转至错误处理.

MOVAH,0INT16H;键入字符

CMPAL,0JNEERROR;若为字符键,转ERRORCMPAH,3BH;F1键码为3BHJETT1;若为F1键,转TT1CMPAH,3CH;F2键码为3CHJETT2;若为F2键,转TT2JMPERRORTT1:…….;按F1键功能断……..TT2:…….;按F2键功能断…….ERROR:…….;错误处理目前五十六页\总数七十七页\编于十七点前面我们已经提到SHIFT、CTRL、ALT、NUMLOCKINS和SCROLLLOCK这些键不具有ASCII码,但按动了它们能改变其它键所产生的代码,那么如何能判断这些键按动与否呢?INT16H的AH=2的功能可以把表示这些键状态的字节——键盘状态字节(KB_FLAG)回送到AL寄存器.目前五十七页\总数七十七页\编于十七点(2)取键盘的状态字节入口参数无功能号

AH=02H类型号

16H出口参数

AL=转换键的状态实现功能取当前转换键的状态例如:取键盘的状态字节CODESEGMENTASSUMECS:CODESTART:MOVAH,2INT16HMOVAH,4CHINT21HCODEENDSENDSTART目前五十八页\总数七十七页\编于十七点2、显示中断的调用(1)显示的基本概念①显示器通过显卡(显示适配器)连接到计算机上.②屏幕上各象素的显示信息,存放在显示缓冲区(显存)中.④显示器有两种显示方式:文本方式:将屏幕划分为若干行和列,在每个网格位置上显示象素,一个字符是一个象素.图形方式:将屏幕划分为m×n的点阵,在每个点的位置显示象素,一个点是一个象素.目前五十九页\总数七十七页\编于十七点文本方式:将屏幕划分为m列和n行(m×n),在每个网格位置上显示象素,一个字符是一个象素.80×25文本方式A~~~~~~~~~~~~~~~~0列0行79列24行BC目前六十页\总数七十七页\编于十七点~~~~640×480图形方式640点480点图形方式:将屏幕划分为m×n的点阵,在每个点的位置显示象素,一个点是一个象素.目前六十一页\总数七十七页\编于十七点在文本方式下,对应屏幕上的每个字符,在显示缓冲区中占用两个单元:一个存放ASCII码,一个存放显示属性.41H07H42H07H61H70H62H70H、、、显示缓冲区(显存)字符A,

黑底白字字符B,

黑底白字字符a,白底黑字字符b,

白底黑字目前六十二页\总数七十七页\编于十七点例10000111B或87H

表示黑底白字,闪烁

01110000B或70H

表示白底黑字,不闪烁16种0000黑1000灰

0010绿1010浅绿0100红1100浅红0111灰白1111白BLRGBIRGB闪烁背景前景765432108种000黑010绿

100红111白0不闪烁1闪烁属性字节的含义:目前六十三页\总数七十七页\编于十七点(2)BIOS显示中断有关显示输出的DOS功能调用不多,而BIOS调用(INT10H)的功能很强,主要包括设置显示方式,清屏,设置光标大小和位置,显示字符,显示图形等.设置显示方式清屏幕置光标的位置显示功能的调用目前六十四页\总数七十七页\编于十七点(1)设置显示方式入口参数

AL=显示方式值

0040×25黑白文本方式

0140×25彩色文本方式

0280×25黑白文本方式

0380×25彩色文本方式………………….功能号

AH=00H类型号

10H出口参数无实现功能将显示方式设置为指定形式例将显示方式设置为80×25彩色文本方式

MOVAL,03HMOVAH,00

INT10H目前六十五页\总数七十七页\编于十七点(2)清屏、清窗口功能入口参数

AL=0CH=窗口左上角行号

CL=窗口左上角列号

DH=窗口右下角行号

DL=窗口右下角列号

BH=窗口属性功能号

AH=06H

或AH=07H类型号

10H出口参数无实现功能按给定属性清除指定的窗口内容目前六十六页\总数七十七页\编于十七点例清除屏幕显示,将其属性置为反白(白底黑字)显示.MOVAL,0;清屏功能MOVBH,70H;白底黑字MOVCH,0;左上角行号MOVCL,0;左上角列号MOVDH,24;右下角行号MOVDL,79;右下角列号MOVAH,6;功能号INT10H;中断调用目前六十七页\总数七十七页\编于十七点(3)置光标位置(控制光标开始显示的位置)~~~~~~~~~~~~~~~~0列0行79列24行5列1列1行2行目前六十八页\总数七十七页\编于十七点置光标位置入口参数

DH=行号

DL=列号

BH=页号

功能号

AH=02H

类型号

10H

出口参数无

实现功能将光标设置在指定的位置目前六十九页\总数七十七页\编于十七点例将光标设置在2行5列的位置MOVDH,2MOVDL,5MOVBH,0MOVAH,2INT10H~~~~~~~~~~~~~~~~0列0行79列24行5列1列1行2行目前七十页\总数七十七页\编于十七点(4)字符的显示(单色显示器字符的显示)入口参数

BH=页号

AL=字符的ASCII码

BL=字符的属性功能号

AH=09H类型号

10H出口参数无实现功能在光标位置上显示字符及属性入口参数

BH=页号

AL=字符的ASCII码功能号

AH=0AH类型号

10H出口参数无实现功能在光标位置上显示字符目前七十一页\总数七十七页\编于十七点DATASEGMENTATRIDB5EH,94H,5EH,94H,5EH,94H,5EH,94H,5EH,94HDATAENDSSTACKSEGMENTPARASTACK'STACK'DB200DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AX

MOVAH,0;设置80列25行的彩色文本方式

MOVAL,3INT10HLEASI,ATRI;属性字节值表首址存SI寄存器

MOVDI,10;显示10个字符

MOVDH,0CH;设置显示位置(35列12行开始)

MOV

温馨提示

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

评论

0/150

提交评论