重要的子程序分析及其程序框图Word文档格式.docx

上传人:b****4 文档编号:7687827 上传时间:2023-05-08 格式:DOCX 页数:26 大小:376.39KB
下载 相关 举报
重要的子程序分析及其程序框图Word文档格式.docx_第1页
第1页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第2页
第2页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第3页
第3页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第4页
第4页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第5页
第5页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第6页
第6页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第7页
第7页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第8页
第8页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第9页
第9页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第10页
第10页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第11页
第11页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第12页
第12页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第13页
第13页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第14页
第14页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第15页
第15页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第16页
第16页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第17页
第17页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第18页
第18页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第19页
第19页 / 共26页
重要的子程序分析及其程序框图Word文档格式.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

重要的子程序分析及其程序框图Word文档格式.docx

《重要的子程序分析及其程序框图Word文档格式.docx》由会员分享,可在线阅读,更多相关《重要的子程序分析及其程序框图Word文档格式.docx(26页珍藏版)》请在冰点文库上搜索。

重要的子程序分析及其程序框图Word文档格式.docx

E命令的执行流程如图1(b)所示。

在等待输入数值时,直接打空格键或回车键,相应内存单元的内容将保持不变。

 

第2组U命令和A命令

U命令:

反汇编15条机器指令

U命令若跟地址参数,则该地址己在R15中,否则将U命令用的默认地址从UADR单元读入R15。

U命令的功能是反汇编15条机器指令,即把一条机器指令代码翻译成对应的汇编语句的格式,结果显示在计算机终端(或PC及仿真终端)的屏幕上,其执行流程如图2所示。

实现U命令处理功能的子程序虽然较长,但实现原理并不难理解。

例如,遇到的指令是二进制的0000000000101001,按照指令格式和编码的具体规定,指令的最高8位是操作码,查指令汇总表,00000000是加法指令,汇编语句名为ADD,加法指令的最低8位是两个寄存器的编码,其中高4位是目的寄存器DR的编号,0010为R2,低4位是源寄存器SR的编号,1001是R9。

按指令格式规定,两个寄存器之间要有一个逗号,因此,对0000000000101001指令反汇编的结果是ADDR2,R9。

这一结果在显示器屏幕上更具体的格式为:

指令地址指令字1指令个2汇编语句

其中的指令地址,指令字1,指令字2(可以没有),都用4位16进制数值表示,反汇编语句要满足对汇编语句的格式要求。

4项内容之间例如用2个空格作为符号间距。

假如上述指令被保存在内存的2000h(h代表前面的2000是十六进制)单元中,则反汇编的结果和格式是:

20000029ADDR2,R9(单字指令,无指令字2)

如果把对上述特例的处理过程更加一般化来展开讨论,结论是:

每条机器指令8位的操作码,直接对应一个汇编语句名称(最多4个字母),可以保存在一张表格中,用于从指令操作码查出汇编语句名(反汇编过程使用),或从汇编语句名查出指令操作码(汇编过程使用)。

每条机器指令第1个字的低8位和第2个指令字(如果有的话),是指令的操作数地址字段,指令字1的低8位可以是1或者2个4位的寄存器编码,可能是一个8位的IO端口地址,或相对转移指令的变址偏移量offset,第2个指令字可以是一个立即数,一个直接地址,或者长转移指令的变址偏移量offset,它们的有无和到底代表的是什么,取决于指令的操作码,换句话说,知道了指令的操作码,就清楚了怎样去看待与处理操作数地址字段的内容。

这里有个寄存器编码和寄存器名称的对应问题,例如4位二进制0000代表R0,也需要建立一张对应表,用于从4位编码查出寄存器名(反汇编过程使用),或转换寄存器名为4位编码(汇编过程使用)。

其他情况下的操作数地址字段内容,通常被理解为8位或者16位的整数数值使用,不存在类型变换问题。

唯一例外的一点是,相对转移指令与对应的汇编语句之间,有一个地址计算过程,例如,在2005(16进制,下同)内存单元有一条编码值为0100000111111100的指令,反汇编操作时,查得该指令是无条件相对转移,汇编语句名为JR,低8位的11111100是offset,是补码形式的负4,按计算公式(当前指令地址+1+offset是转移的目标地址),则转移地址为2002,最终的反汇编结果是JR2002。

注意,8位的补码与16位的正的数值(同补码表示)相加时,8位补码的符号位要扩展到高8位上的每一位上去。

A命令:

单条指令汇编

A命令若跟地址参数,则该地址己在R15中,否则将A命令用的默认地址从AADR单元读入R15。

A命令的执行流程如图3所示。

A命令把用户从键盘输入到教学计算机中的一个汇编语句翻译成对应的机器指令编码,这里说的单条指令汇编,是指对每一个汇编语句可以直接完成汇编操作,与其他汇编语句不存在彼此之间的制约或者协调关系,因此,在这种方式下的汇编不能支持汇编伪指令和语句标号,是属于实用的汇编程序的一个最基本功能的子集,实现的只是在汇编语句与机器指令之间的翻译功能。

实现单条指令汇编的原理简介如下:

如果对ADDR2,R9语句执行汇编,得到的第1个符号(标示符)是ADD,查汇编语句名和指令操作码的表格,ADD对应的指令操作码为十六进制的00,接下来跳过空格后得到的第2个符号(标示符)为R2,是目的操作寄存器名称,查寄存器名称和寄存器编码的表格,R2的编码是十六进制的2,在跳过逗号后得到的第3个符号(标示符)为R9,是源操作寄存器名称,得到的寄存器编码为十六进制的9,最后遇到的是回车符,表明对该语句的汇编翻译工作已经结束,故得到的最终机器指令码为十六进制的0029,即二进制的0000000000101001,接着还要把该机器指令写到一个内存单元中去,对一个汇编语句的汇编操作全部完成。

同理,如果遇到的是汇编语句JR2002,并需要把汇编结果(机器指令)保存到内存的2005单元,则查得指令的操作码为16进制41,指令中的offset是通过转移目标地址(2002)减本指令地址(2005)再减1得到,是负4,即8位的补码FC,故汇编的最终结果(指令码)为16进制41FC。

在教学计算机系统中,交叉汇编程序支持某些伪指令的功能,也支持使用语句标号给出一条指令的地址,这对设计较长的程序是非常必要的功能,此时需要通过两遍扫描整个用户汇编源程序的方式来完成汇编操作的全过程,产生由机器指令码组成的目标程序,还可以按照用户的要求,产生汇编清单文件和汇编符号表。

第3组G命令、T命令和G命令

G命令:

启动执行一个用户程序

G命令若跟地址参数,则将该地址值写入内存映射区中对应PC的存储单元中。

G命令的功能是启动并运行一个用户程序,其执行流程如图4(a)所示。

理解这个子程序执行过程,需要清楚如下的概念

涉及到监控程序和用户程序两个运行环境的切换和衔接,正如在前面说到过的,教学计算机分为监控程序运行方式和用户程序运行方式,都要求有自己的现场信息,包括16个累加器的内容(含PC和SP),程序状态字的内容,需要保持独立,彼此不应该受到另外一个运行方式(程序)的干扰。

请注意,监控程序是一个不断读入监控命令,再调用对应的子程序实现监控命令处理功能的重复过程,程序处在一个封闭运行的环境之中。

怎样才能让用户程序投入运行过程,用户程序运行结束后,又如何再次正确地恢复监控程序的运行过程,需要在对应G命令的子程序中加以解决,就存在一个在运行监控程序和运行用户程序之间正确的切换和相互配合的问题。

简单地说,就是切换到用户程序时,必须首先保存监控程序的堆栈指针和监控程序的断点,再把用户程序的现场信息从内存中指定的区域(由

MAPREG给出的17个存储字单元)恢复出来,才能进入用户程序的运行过程。

在用户程序结束后,必须返回监控程序的断点,恢复系统堆栈指针,还要把用户程序的现场信息保存到内存中指定的区域(由MAPREG给出的17个存储字单元),以便在下一轮恢复运行该用户程序时,可以从内存的这一指定的区域恢复程序的现场信息。

与此相联系的还有,各自要使用自己的堆栈,就要有自己的堆栈指针,运行监控程序使用系统堆栈(初值27FEh),运行用户程序使用用户堆栈(初值2780h)。

例如,用户程序结束后,就需要恢复系统堆栈指针。

在G命令中的具体实现办法是:

在做好全部(哪一些?

)准备后,通过这个子程序中的一条LDRRR5,[R14]指令(该指令在内存的021Ah单元),把用户程序的起始地址写入程序计数器PC中(请注意,用户不能在自己的程序中用类似的办法修改PC的内容),则下面将直接进入用户程序的运行过程,监控程序自然就停止了自己的运行,事实上,已经完成了2个程序的切换。

可以认为,监控程序是在要执行021Bh单元中的指令时被打断的,则021Bh就是监控程序的断点。

为了确保用户程序结束后,可以回到监控程序的断点以恢复监控程序的运行过程,在让用户程序进入运行过程之前所作的准备工作中,就包括把021Bh这个断点地址(语句标号为RETMON)写进用户的堆栈中;

如果再强行规定用户程序的最后一个汇编语句只能是RET(子程序返回指令),则执行该RET指令时,将把已经保存在堆栈中的监控程序的断点地址恢复到PC中,接下来运行的将是监控程序的后续指令了,在保存好用户程序的现场信息后,实现G命令的这个子程序结束自己的运行过程。

T命令、P命令:

以单条指令方式运行用户程序

T命令、P命令若跟地址参数,则将该地址写入映射区对应PC的存储单元。

两个命令的功能都是执行用户程序的一条指令,区别在于,T命令总是执行单条指令,P命令把CALA指令和它调用的子程序作为一条指令来执行。

T命令执行流程如图5所示。

显而易见,执行T命令比起执行G命令处理起来要复杂。

执行G命令时,用户程序作为一个整体,仅一次与监控程序进行切换,执行T命令时,则每运行用户程序的一条指令,就需要与监控程序进行一次切换过程,运行用户的一个程序要通过连续很多次地执行T命令才能完成。

这就带来了2个需要解决的问题。

首先,正确保护用户程序的现场信息至关重要。

只有保护好用户程序的现场信息,用户程序的指令才能正确衔接,并用正确的数据完成运算功能。

其次,执行用户程序的一条指令后,下一条指令的地址肯定送入了PC(硬件本身的功能),但是如何返回到监

控程序断点的问题却没有解决,在处理G命令中使用过的(通过在用户程序的最后一个

语句使用子程序返回指令RET)解决方案在这里是行不通的。

特别是当程序中的指令不是顺序执行而是要依据某个条件来变化指令的执行顺序时,处理上要更复杂一点,这些都要在监控程序中加以解决,即在执行用户程序的一条指令的前后,监控程序都必须做一点事情,在执行前,要修改用户程序以便暂时加进返回监控的指令,执行之后,又要恢复用户程序中被修改过的几条指令,请参见图5中给出的T命令的执行流程。

在执行用户程序的一条指令之前,完成的是依据PC中的地址值,读出用户程序的将要执行的一条指令,再按指令操作码分成如下的3种情况:

1肯定非顺序执行的指令(CALA、JMPA和JR),其中的CALA、JMPA指令的后续执行的指令地址在本指令的第2个字中,可将其保存进R15中;

JR指令的后续执行的指令地址可以使用本指令的OFFSET字段的内容通过计算得到,然后保存进R15中。

2肯定是顺序执行的指令(非RET、JR、CALA、JMPA和条件相对转移JRcnd),其后续指令地址已经在R15中。

3条件相对转移指令(JRC、JRNC、JRZ和JRNZ),它的后续指令地址有2种可能,取决于所依据的条件成立(转移执行)还是不成立(顺序执行),顺序执行时,其后续指令地址已经在R15中,和情况①相同;

转移执行时,后续执行的指令地址可以使用本指令的OFFSET字段的值,通过计算得到,然后保存进R15中,和情况②相同。

困难的问题是怎样解决这最后一种情况,因为在用户程序的那条指令执行之前,监控程序无法确定二者(转移或者不转移)中哪一个是正确的后续指令,只能做好两手准备,以便应对用户程序的那条指令执行之后可能出现的任何一种情形,如流程图8.6中粗虚线方框和下面的2条粗虚线所示。

这意味着,用户程序的那条指令的执行结果,将决定返回到监控程序的哪一条指令。

为此,不得不将可能涉及到的用户程序的后续指令暂时修改一下,把原来的指令先保存到内存的一个缓冲区,而代之替换上一条JMPA指令,这个跳转指令的转移地址,是由不同的用户指令来决定的,由它来决定返回到监控程序的哪一条指令,这些是流程图8.6左方部分(图中粗线方框之前)的程序实现的功能。

执行用户程序的一条指令,通过把该指令的地址直接传送到PC中来实现,接下来将执行暂时安排的那条JMPA指令,实现返回到监控程序的不同程序段的入口,以便可以执行稍有不同的后续处理功能,包括保存用户程序的现场信息,恢复被暂时安排的JMPA指令替代掉的用户程序中的原有指令,这是由流程图8.6中粗线方框下面和右面部分的多个程序段实现的功能。

注意,G、P、T命令执行的最后的一项功能,是在屏幕上显示用户程序的现场信息,包括16个通用寄存器(含PC和SP)的内容,程序状态字的内容,和下一条将要执行的指令的反汇编结果,即不带参数的R命令实现的功能。

P命令与T命令的唯一区别,它将把CALA指令连同它调用的子程序作为单条指令一次执行完,为此,就不必单独分析和处理CALA指令,将其作为通常的顺序执行的指令对待就可以了,在流程图5中去掉判别CALA指令的部分即可。

第4组R命令

R命令带参数(寄存器名)时,是要修改一个寄存器的内容,不带参数时,是显示16个通用寄存器、程序状态字、下一条将要执行指令的反汇编结果等信息。

不仅R命令要调用这个子程序,在G、P、T命令结束运行前,也要通过运行(不是子程序调用方式)这个程序段,用于显示用户程序或者一条指令执行后的执行结果。

这个子程序的功能和实现算法相对简单,监控的源程序中又加了详细的注释,在此不再多加说明。

R命令执行流程与使用到的2个子程序的流程如图6所示。

2.一些功能较强的常用子程序

在本小节,简要介绍监控程序中略复杂一点点的几个子程序,例如,输入一个命令行的子程序,输入一个整数值的子程序,通过汇编语句名查找指令操作码的子程序,也包括已提供出来,在汇编语言程序设计时能直接使用的几个常用子程序(用户完全可以提取另外一些子程序用于自己的程序设计过程)。

略复杂一点的给出执行流程图,简单一点的用文字直接说明,大部分只是列出子程序名,参数,实现的功能等几项内容,供读者在阅读监控程序时快速查找,避免过多地前后翻阅整个监控程序,提高一点学习效率。

输入一个命令行的子程序,INLNE的流程如图7(a)所示。

这个子程序用于完成从键盘读入一个以回车键结束的监控命令。

将解释4个问题。

1输入监控命令的过程,是从键盘逐个地读入字符,结束字符输入过程,是通过检查是否读到了回车键来决定的。

2为了支持监控命令的2种格式(命令行中使用或者不使用空格符),需要允许在输入命令行的过程中输入空格符,输入完成后通过滤掉全部的空格符,使分析输入命令和参数的正确性更统一方便。

为此使用了2个字符计数寄存器(R2和R3)。

3在输入过程中,如果发现敲错了键,可以使用’←Backspace’键执行删除操作,如果有内容可以删除,需要修改屏幕上的显示,输入字符的数目,缓冲区地址指针等。

4输入缓冲区使用的是BUFF,输入的每一个字符在内存中占用一个字单元,而不是一个字节。

字符串长度表示的是输入的有效字符个数。

输入一个整数值的子程序,INDAT的流程如图7(b)所示。

这个子程序用于完成从键盘读入一个以回车键或者空格键结束的整数值。

1输入监控命令的过程,是从键盘逐个地读入字符,结束字符输入过程,是通过检查是否读到了回车键或者空格键来决定的。

也支持用空格键来结束输入数值的过程,是为了应对在实现E命令的子程序中的特定需求。

2在输入过程中,如果发现敲错了键,可以使用’←Backspace’键执行删除操作,如果有内容可以删除,需要修改屏幕上的显示,输入字符的数目,缓冲区地址指针等。

3输入数值的过程中,最多可以输入十六进制的4个数字符,这意味着拒绝接受非数字符输入,也拒绝接受超过4个的数字符输入。

4读入的数字符(0~4个)将被转换成16位的整数值,并被写入由R15指向的内存单元。

在修改存储器内容、修改寄存器内容的操作过程中,都会调用这个子程序来取得从键盘输入的整数值并完成修改相关的写入操作。

通过汇编语句名查找指令操作码的子程序,SEARCH的流程如图4(b)所示。

从标号SEARCH调用子程序,实现的是通过汇编语句名查找对应的指令操作码,从标号SCHREG调用子程序,实现的是通过寄存器名查找对应的寄存器编码。

汇编语句名最多由4个字符组成,少于4个字符的用空格字符补足,每个字符存储在一个内存字单元的低位字节,该字的高位字节填0值,指令操作码8位,保存在一个内存字单元的高位字节,该字的低位字节填0值,这样每5个字组成一个表项,表明一个汇编语句名与它的指令操作码的对照关系。

用这样的多个表项就可以构成了一张列表,把整个指令系统中的全部指令都表示清楚。

为了指明列表的末尾,还需要在列表的末尾用一个数值为0的字来特殊加以标记。

这一列表既可以用于从汇编语句名查找出对应指令的操作码,也可以用于从指令的操作码查找出对应汇编语句名。

例如这里的SEARCH实现的功能,就是通过顺序地比较4对内存字内容是否完全相同,检查从键盘读来的一个汇编语句名是否可以在这张列表中找到,找得到,是合法的汇编语句名,同时也找到了相应的指令操作码,若查找了整个列表(已经遇到了列表末尾的取数值为0的字)还找不到,则是输入了错误的汇编语句名。

用类似的数据结构,也建立了寄存器名和寄存器编码对应关系的一个列表,用于实现通过寄存器名查找对应的寄存器编码,例如子程序SCHREG实现的功能,或者从寄存器编码查找对应的寄存器名。

数据结构的一致性,使得子程序SEARCH成为子程序SCHREG的主体部分。

通过汇编语句名查找对应的指令操作码时,由主调用程序指定了查找过程使用的是汇编语句名列表(被分成10种指令类型)。

通过寄存器名查找对应的寄存器编码,则是由SCHREG的前2个语句指明了使用的是寄存器名列表,接下来顺序地执行到(不是子程序调用方式)SEARCH的第一个语句。

在开始查找之前,首先把汇编语句名或者寄存器名的4个字符传送到STR缓冲区,在通过一个汇编语句名查找相应的指令操作码的过程中,使用10个列表,这是依据指令的操作数地址字段的不同格式和含义来组织的,因此,查找结果还需要给出是从哪一个列表中查到的,即这个列表在10个列表中的顺序号,在程序注释中称为指令类型,用于分析与处理指令汇编语句的操作数地址内容和指令的形式地址编码的相互转换。

ASCNUM:

变缓冲区(STR)中的4个数字符为一个整数值并存到R15中

NUMASC:

把R15中一个整数值以十六进制数字符形式显示出来

在这两个子程序中都涉及到数据类型的转换,即字符类型和整数类型之间的变换。

在子程序ASCNUM中,需要检查得到的字符是否属于数字符,不是数字符则是错误,结束转换过程。

是数字符才可以转换,当字符在’0’到’9’的范围内时,字符的编码减掉0字符的ASCII码就得到对应的整数值,最低的4个二进制位构成一位十六进制的数位。

若字符在’A到’F’的范围内时(如果是小写字母,已经事先转换为大写字母),则在这个字符的ASCII码减过0字符的ASCII码的基础上再减掉7,就得到了对应的数值10到15的数值,即一位十六进制的数位。

把4个数字符对应的4个十六进制的数位按正确的顺序拼接到R15中,就得到了最终的转换结果。

ASCNUM子程序的执行流程如图8(a)所示。

在NUMASC子程序中,需要把R15中的整数,每4位分成一段,对应一个十六进制的数位,这是一个整数值,若它的值在0到9之间,该数值加上0字符的ASCII码就转换成了对应的阿拉伯数字符,若它的值在10到15之间,该数值在加上0字符的ASCII码的基础上再加上7,就得到了对应的十六进制’A’到’F’中的一个数字符,每转换完一个字符就输出它,4次循环完成整个的转换与输出过程。

在这个子程序中,对每一个十六进制数位的处理上,是通过保存R15进堆栈,R15的内容逻辑右移12位(高位补0),把寄存器最高的4位值移到最低4位的位置并传送到R0中(得到一个十六进制数位,供接下来的类型转换和显示),再从堆栈中恢复R15的内容并完成逻辑左移4位(低位补0),移去了原来的最高的4位中的内容,下一步循环回去再用这个内容继续进行数据类型转换和输出,此时处理的已经是下一个十六进制的数位了。

NUMASC子程序执行流程如图8(b)所示。

LDBYTE子程序和ASC子程序

ASC子程序的功能,是检查寄存器R0低位字节中的一个字符是否是阿拉伯数字符或是大写的英文字母,流程很简单,如图8.9©

所示。

即检查这个字符是否在‘0’到‘9’或者‘A’到‘Z’的范围内。

这个程序非常直观地体现了2项重要内容:

(1)减法和比较指令对触发器C的影响,以及巧妙使用标志触发器C的方法。

(2)在实用的汇编程序(包括教学机的交叉汇编程序)中,涉及到数值的地方,允许使用表达式(监控程序的A命令中则不能),这里的‘0’-1,’9’+1,’A’-1和’Z’+1就是表达式,实现的是把一个字符的ASCII码和一个整数值执行加、减运算,得到一个整数值,作为MVRD指令中的立即数。

LDBYTE子程序的功能,是读出以R10为地址的一个存储单元中的内容到R0,并修改地址指针,接着直接执行(不是子程序调用方式)ASC的第一个语句,开始检查读到R0低位字节中的字符是否是一个阿拉伯数字符或是大写的英文字母。

串行接口输入输出操作的原理说明:

(1)教学计算机可以配备2路串行口,从输入输出指令的层次来观察,2路串行口只能分时工作,监控程序需要检查到底哪一路串行口正在作为系统默认使用的主接口(控制台终端)使用,这是通过在系统工作区的RSPORT单元写一个0值或者1值来区分的,通过检查这个单元中的值是0还是1,来判断使用的是哪一路串行接口,通常情况下,0值表示使用第1路串行口,1值表示使用第2路串行口。

第1路串行口的端口地址为十六进制的80(PORT1D,数据缓冲寄存器)和81(PORT1C,命令或状态寄存器),第2路串行口的端口地址为82(PORT2D)和83(PORT2C)。

(2)每一路串行接口电路中有2个数据缓冲寄存器,使用相同的端口地址,还需要通过指令操作码来区分使用的是哪一个,指令IN和OUT各对应一个,IN指令使用的是输入数据缓冲寄存器,OUT指令使用的是输出数据缓冲寄存器。

类似的,IN指令使用的是接口的状态寄存器,OUT指令使用的是命令态寄存器。

(3)串行接口状态寄存器的最低一位的值是1,表示串行接口中的数据已经串行地输出完毕,可以向串行口送入输出的下一个字符,不检查前一个字符是否已经从串行口送走,就向接口传送输出的下一个字符,会造成输出的错误(丢失应该显示的信息)。

串行接口状态寄存器的最低的第2位的值是1,表示操作者已经敲过键盘上的一个字符键,字符的编码已经送到串行接口的数据缓冲寄存器,CPU可以读这个字符了。

不检查是否已经有了有效的输入字符到了串行接口中,直接读接口中的数据,会

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2