CN101482814A - 应用于嵌入式系统的指令的显示、录入和存储方法 - Google Patents
应用于嵌入式系统的指令的显示、录入和存储方法 Download PDFInfo
- Publication number
- CN101482814A CN101482814A CNA2008100025588A CN200810002558A CN101482814A CN 101482814 A CN101482814 A CN 101482814A CN A2008100025588 A CNA2008100025588 A CN A2008100025588A CN 200810002558 A CN200810002558 A CN 200810002558A CN 101482814 A CN101482814 A CN 101482814A
- Authority
- CN
- China
- Prior art keywords
- instruction
- parameter
- display
- user
- character
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Input From Keyboards Or The Like (AREA)
Abstract
本发明公开一种应用于嵌入式系统的指令的显示、录入和存储方法,包括有:系统存储器中预先存储了指令集中所有指令的显示属性,并在对所述指令集中所有指令按指令助记符首字符进行分类排序的基础上,为每一条指令分配一个唯一的指令ID,当用户需要录入一条指令时,包括了指令索引模式、指令选择模式、参数选择模式,系统对用户录入的指令实例的存储只存储其指令ID和参数值。本发明的指令的显示、录入和存储方法,特别适用于较少按键的录入环境,而且,通过仅存储指令ID和参数值,提高便携设备有限的存储空间的利用率。
Description
技术领域
本发明涉及一种录入方法,特别涉及一种应用于嵌入式系统的指令的显示、录入和存储方法。
背景技术
目前的软件开发平台,尤其是汇编语言程序开发平台都是运行于个人电脑上的软件平台,对程序指令的录入和编辑都是通过包含了英文字母键和数字键的大键盘进行逐个字符的输入,这种输入方式对于熟练使用电脑并在电脑上进行程序录入的人是不成问题的。
然而,当软件开发平台移植到掌上电脑、学习机等便携设备,因为多数设备不方便设置太多的按键,则由大量英文字母、符号和数字组成的程序指令的录入便成为一个不能忽视的问题。
特别地,多数初学者对如汇编语言程序指令有理解和记忆上的困难。而大多数微处理器的汇编语言指令系统,其指令集包含的指令数往往在百条以上,初学者通常难以在短时间内熟悉每一条指令的助记符书写格式,逐个字符的输入方法对他们有困难。
另外,当前PC上对程序指令的存储是保存了全部的字符数据信息到用户程序文件中的,比如,一条汇编语言指令,其助记符和参数加起来的字符数往往超过十个,即要占据十多个字节的存储空间,对于便携式设备较小的存储容量而言,数据量是不小的,提高存储器的利用率,也是一件有意义的事情。
另外,工业上的很多设备需要用户键入指令去操作,甚至有类似于批命令的操作方式,对于命令的输入和存储方法都是有待改进的。
发明内容
本发明所要解决的技术问题在于,提供一种指令语句的显示、录入和存储方法,特别适用于掌上电脑、学习机等便携式设备,以及其它需要输入指令及其参数的嵌入式设备,不采用通常的逐个字符的输入方式,而代之以为每条指令的原型定义一个显示属性、或编写一个显示子程序,由显示器依据显示属性或显示子程序显示无错的指令,并通过指令索引、指令选择、参数选择的方式实现指令及其参数的选择式录入,其中并对当前操作的内容提供相应的注释性提示,特别适用于较少按键的输入环境,同时免去初学者记忆指令助记符的负担;而且,通过仅存储指令ID和参数值,提高便携设备有限的存储空间的利用率。
为解决上述技术问题,本发明所采用的技术方案为:首先提供一种应用于嵌入式系统的指令的显示方法,包括,系统存储器中预先存储了每一条指令的显示属性,所述显示属性包含或隐含了指令的不可编辑的助记符部分的字符的个数、每个助记符字符的显示代码、相对显示位置,如果该指令还有可编辑的参数部分,则还包含或隐含了该指令中参数的个数、每个参数的参数类型及其相对显示位置;系统依据所述的显示属性,结合具体的参数值,通过显示器即可正确显示一个完整的指令实例;其中,系统通过所述的参数类型确保参数值以正确的格式被显示。
所述显示属性在一个具体的应用系统中可定义为下列格式之一(其中方括号部分与具体指令的参数个数有关,为可选项):
本指令的参数部分的参数个数,[参数1类型,参数1显示位置,][参数2类型,参数2显示位置,][…,参数n类型,参数n显示位置,]本指令的助记符部分的显示字符个数,字符1显示代码,字符2显示代码,…,字符k显示代码;或者
[参数1类型,参数1显示位置,][参数2类型,参数2显示位置,][…,参数n类型,参数n显示位置,]分隔符,字符1显示代码,字符2显示代码,…,字符k显示代码,分隔符;或者
本指令的助记符部分的显示字符加上参数部分的参数的总个数,字符1显示代码,字符2显示代码,…,字符k显示代码,[参数1类型,]字符k+1显示代码,…,[参数2类型,]…,字符k+x显示代码[,参数n类型]。
其中,所述参数类型还决定了该参数的取值范围。
并且,每一条指令的显示属性对应于一个唯一的指令ID。
相应地,提供一种应用于嵌入式系统的指令的存储方法:系统对一条指令的实例的存储只存储该实例的指令ID和参数值。
进一步地,提供一种应用于嵌入式系统的指令的录入方法,其特征在于:
系统存储器中预先存储了指令集中所有指令的显示属性,并在对所述指令集中所有指令按指令助记符首字符或指令功能进行分类排序的基础上,为每一条指令分配一个唯一的指令ID,当用户需要录入一条指令时,包括以下步骤:
(a)系统首先进入指令索引模式,向用户提供基于指令首字符进行分类排序的索引、或基于指令功能进行分类排序的索引;系统并且取出当前默认索引类别下的第一个指令ID,依据该指令ID对应的显示属性,通过显示器在光标所在行显示一条完整的指令实例,若该指令有参数,所显示参数为系统提供的默认参数值;系统接收用户的输入如上、下箭头键的控制信息,递增或递减索引ID,从而依次显示各个索引类别、实现对所需指令所在类别的快速定位;用户此时可通过输入单元如回车键确认当前索引类别,从而进入步骤(b);
(b)系统进入指令选择模式,系统接收用户的输入如上、下箭头键的控制信息,递增或递减指令ID,从而依次显示当前类别下的其它指令、进而可依次显示浏览整个指令集的指令;用户通过输入单元如回车键确认所需指令,从而进入步骤(c);
(c)当用户确认了所选择指令,系统进入参数选择模式,并依据显示属性、把光标定位到该指令行的第一个参数;系统接收用户的输入如上、下箭头键的控制信息,递增或递减当前的参数值、或依次显示可选参数值,并依据参数类型保证参数值在合法范围内;当用户通过输入单元如回车键确认所需参数值,系统自动把光标下移到下一参数位置,用户又可以对该参数的值进行编辑,依此类推,直到当前指令的最后一个参数完成编辑,用户通过输入单元如回车键确认后,完成当前指令实例的录入;
(d)系统对用户录入的指令实例的存储只存储其指令ID和参数值。
其中,所述指令的显示属性也可以用指令的显示子程序代替,所述指令的显示子程序能按指令的书写顺序依次显示本指令各助记符和参数值,其中,依据参数类型的不同调用相应的参数显示子程序以正确的格式显示参数,并把本指令参数的个数和各参数的参数类型赋值给相应的系统变量,以作为系统编辑参数的依据。
其中,系统在指令索引模式提供了对当前所在索引类别的提示、在指令选择模式提供了对当前显示指令的功能的提示、在参数选择模式提供了对当前编辑参数值的含义的提示。
并且,伪指令也可以作为指令原型定义显示属性或显示子程序,并与所述指令集中其它指令一起分配指令ID,供用户选择录入。
基于上述的录入方法,当使用键盘录入时,典型地只需使用五个输入键:
(1)功能菜单键,用于触发在屏幕上弹出当前可用的操作功能菜单;
(2)确认键,用于确认、执行或接受当前的操作;
(3)取消键,用于取消或退出当前的操作;
(4)上移箭头键,弹出菜单时用于把光标定位到上一个菜单项,浏览程序时用于把光标定位到上一指令行,在指令索引模式、指令选择模式、参数选择模式中用于显示上一项可选择内容,涉及参数值的选择时用于递减数值;
(5)下移箭头键,弹出菜单时用于把光标定位到下一个菜单项,浏览程序时用于把光标定位到下一指令行,在指令索引模式、指令选择模式、参数选择模式中用于显示下一项可选择内容,涉及参数值的选择时用于递增数值。
最后,还提供一种程序标号的录入方法,其特征在于:
(a)把程序标号定义为包括不可编辑的助记符部分和可编辑的参数部分,并把该参数的类型定义为一种标签参数类型;
(b)为程序标号定义一个显示属性或一个显示子程序,从而把所定义标号当作一条指令原型与指令集中的指令一起统一分配指令ID,系统通过标号的指令ID取得标号的显示属性或显示子程序,结合一个默认的参数值,在当前光标行显示一个完整的程序标号实例,进而用户可编辑该标号实例的参数部分、获得所需的程序标号,作为用户程序的位置标签;
(c)在跳转类指令的显示属性或显示子程序中把跳转到的目标对象作为可编辑的参数,并把其参数类型归为标签参数类型,从而系统在显示跳转类指令时,可以在跳转到的目标对象的位置显示一个默认的程序标号参数,从而可以被用户编辑为所要跳转到的程序标号;
(d)在其它应用到程序标号的指令的参数中,系统把一个默认的程序标号作为该参数的可选项供用户选择使用,当用户把程序标号选择为该参数的参数值,系统进而允许用户对该程序标号的可编辑部分进行编辑,从而获得所需程序标号;
(e)对程序标号实例的存储只需存储其指令ID和参数值。
实施本发明,具有如下有益效果:解决了把软件开发平台移植到掌上电脑、学习机等按键较少的便携设备上的输入瓶颈,以及那些需要用户输入指令来执行系统功能的嵌入式设备的指令录入和存储方法;因为对用户指令的存储仅存储其指令ID和参数,所以可以大大提高便携设备上存储器的利用率,而且使得对指令的读取和执行或处理更为方便;同时,因为减轻了初学者记忆指令助记符的学习负担,将使更多的人更容易地获得程序编程技术的入门,或者,大大增加设备的易用性,改善设备的人机交互界面。
附图说明
图1是基于显示属性定义1的指令显示流程图;
图2是基于显示属性定义2的指令显示流程图;
图3是基于显示属性定义3的指令显示流程图;
图4是指令录入流程图。
具体实施方式
对于一个已知的指令集,包括自定义的指令集,如果该指令集中的每一条指令至少可划分为一个不可编辑的有固定书写格式的助记符部分,如果有,还可以划分出一个可编辑的参数部分,并且每个参数在指令中有着相对固定的显示位置,每个参数都可以归入某一类的参数类型,则显然可以为该指令集中的每一条指令定义一个显示属性,或撰写一个具体的显示子程序,以便能实现用户灵活的指令和参数值的选择式输入。
上面所述的对指令的不可编辑部分和可编辑部分的划分或者定义,完全是根据本发明的需要、或者是方便显示、存储和录入的需要而实施的,并不以某个指令集的厂商技术文档中对助记符和参数的划分为绝对标准,但可以是必要的参考。
容易得出结论,本发明所述及的指令并不完全是传统意义上的指令,而是一种广义上的指令,除了可以是CPU赖以执行或运算的传统意义上的指令如汇编语言指令外,也可以是为了实现某些特别的需要而额外定义的指令或语句,比如伪指令,甚至程序标号等。
本发明中多处述及指令原型和指令实例,二者的区别在于,指令原型不包含具体的参数值,而是在参数的位置用一个参数的描述性别名表示参数的存在,而指令实例是用户具体录入的包含了具体参数值的指令应用。
下面结合MCS-51单片机汇编语言指令集中的一些指令的例子来理解本发明的概念。
为了实现系统对指令的主动显示,而不完全依赖于用户对指令字符的输入,就要在存储器中预先保存了每一条指令的显示属性或显示子程序,所述显示属性或显示子程序应能够使系统以整齐的、正确的格式显示指令。下面首先说明本发明所述的显示属性如何定义。
汇编语言指令由操作码和操作数构成,操作码决定了CPU需要完成什么样的操作,操作数则是CPU在完成这个操作中需要用到的数据。为了避免记忆纯二进制数字的操作码,操作码在汇编语言中往往用描述这个操作功能的若干个英文单词的缩写来代替,称之为助记符,一条指令的助记符的书写格式是固定不变的;操作数则往往表现为一个立即数,或一个存储器地址,其值是可变的,其表达的形式也是可变的,比如十进制、十六进进制,但不管其以什么形式表达,把它作为一个整体来考虑,则其在指令中的相对书写位置是固定不变的,并且,其内容有着非常明显的分类特征,这些分类特征主要体现为操作数的可允许大小范围。在本发明中,我们把上述的操作数、或我们自定义的指令语句中的可编辑部分统称为参数,其分类特征相应称之为参数类型。对于一条具体的指令或语句中的一个具体的参数,其参数类型也是固定不变的。这就意味着,可以利用参数类型来保证参数值处于合法的大小范围,并保证参数值在指令实例中的正确显示。比如指令原型MOV A,Rn(下划线表示该部分为一个指令的表达式,下同)中的Rn,代表了8051单片机的工作寄存器R0~R7,如果把n定义为参数部分,显然它的合法范围是0~7,可以把它的参数类型定义为“工作寄存器”,这样,在编辑的时候,当系统知道当前编辑的参数是工作寄存器类参数,就可以限定它的取值范围为0~7,避免用户录入非法数值;而在显示的时候,只显示一位数字,而不是两位数字。
所以一条指令的固有显示属性,应该包含了正确显示指令所必需的固有信息:包含或隐含了指令的不可编辑的助记符部分的字符的个数、每个助记符字符的显示代码、相对显示位置,如果该指令还有可编辑的参数部分,则还包含或隐含了该指令中参数的个数、每个参数的参数类型及其相对显示位置。这里所称的隐含,是指在显示属性中没有显式地写出来、但通过显示属性能够得出的内容。比如显示属性中包含了10个助记符字符,但没有明确地写出字符数量“10”,然而我们可以通过对这些字符的计数,得出其数量为10个;再比如相对显示位置,假设上述的10个字符在显示属性中并没有明确地写出每个字符的显示位置,但我们很容易通过这些字符排列的先后次序得出其相对于首字符的显示位置。
据此,我们可以把指令的显示属性具体定义为如下形式,实际使用中可选择其中之一:
定义1:本指令的参数部分的参数个数,[参数1类型,参数1显示位置,][参数2类型,参数2显示位置,][…,参数n类型,参数n显示位置,]本指令的助记符部分的显示字符个数,字符1显示代码,字符2显示代码,…,字符k显示代码;或者
定义2:[参数1类型,参数1显示位置,][参数2类型,参数2显示位置,][…,参数n类型,参数n显示位置,]分隔符,字符1显示代码,字符2显示代码,…,字符k显示代码,分隔符;或者
定义3:本指令的助记符部分的显示字符加上参数部分的参数的总个数,字符1显示代码,字符2显示代码,…,字符k显示代码,[参数1类型,]字符k+1显示代码,…,[参数2类型,]…,字符k+x显示代码[,参数n类型]。
上述对显示属性的定义格式并没有穷举,不排除还有其它的定义形式。
在上述的显示属性定义中,方括号部分是可选的,因为不同的指令可能有一个参数,也可能有两个参数或更多,也可能没有参数。
当然,对于上述的定义,其中助记符部分和参数部分的显示信息也可以分开定义和存储,但考虑到其本质并无不同,只是形式上拆分开来而已,所以本发明不对这些可能的定义形式加以描述。
系统只需使用一个主显示子程序,结合具体的参数值,即可依据不同的显示属性显示不同的指令,其中,系统还需依据不同的参数类型,调用相应的参数显示子程序,从而正确显示参数值。
对于一个指令集而言,不同的指令其助记符字符、参数的数量及其参数类型是不同的,为了标志不同的指令,需要为每条指令分配一个识别码,我们称之为指令ID。在本发明中,因为指令的原型已经用显示属性表达出来,所以,一条指令的指令ID也就是该指令的显示属性的指令ID,以后的描述中不再加以区别。
在一个具体的应用系统中,应该只使用一种显示属性的定义格式。通过对指令集中所有指令逐一分析,分别得到各指令的显示属性的具体数据,之后,这些数据需要保存在系统的存储器中以方便显示时使用。为了读取显示属性数据的方便,需要对各指令的显示属性经过分类排序后再分配指令ID。本实施例中,我们依据指令助记符首字符来对显示属性分类并排序,如果助记符为英文字母的,则以英文字母来分类并排序,如果助记符为中文的,则以汉字拼音来分类排序,即把具有相同首字符的指令的指令ID安排在一起,假设助记符为英文字符,则字符‘A’开头的指令ID排列在一起,之后是‘B’开头的指令,等等,并且助记符越相近的指令ID越靠近。比如指令ID从0~9为以字符‘A’开头的指令,10~17为以字符‘B’开头的指令,依次类推,直到全部分配完毕。但指令ID本身并不需要存储在显示属性中,只是作为对显示属性寻址的依据,作为用户指令实例的识别码,会出现在系统程序中或其它场合。
不同的指令其显示属性的数据长度是不同的,假设各显示属性数据是连续存储的,为了依据指令ID寻址相应的显示属性的首地址,需要建立一个表,这个表的以指令ID为顺序的元素是指向各相应显示属性的首地址的指针(或者是基于显示属性存储区首地址的偏移量),有了这个表,当我们要取得指令ID为10的指令的显示属性,只需从这个表中取得其第十个元素(视指令集的大小一个元素可能是单字节数据也可能是双字节数据),即指令ID为10的显示属性的首地址,即可直接据此地址取得显示属性的数据。
在对指令ID分类排序的基础上,为了实现对指令依英文字母顺序进行索引,加快查找指令的速度,必须建立一个字符索引表。假设我们的指令集中所有指令的助记符首字符可归类为四个:A、B、C和D,再假设分类排序后四类指令的首个指令ID分别为:0、10、18、33,如下表所示:
索引ID | 字符索引类别首指令ID | 字符分类索引首字符提示信息(存储时为ASCII码) |
0 | 0 | ‘A’ |
1 | 10 | ‘B’ |
2 | 18 | ‘C’ |
3 | 33 | ‘D’ |
上表中需要存储的是右边两列的数据,左侧一列为系统据以寻址的索引ID值,系统为此需定义一个索引ID变量,当系统向用户提供索引的浏览时,只需对索引ID变量的值递增递减,然后从上表左起第二列的数据存储区中取得相应索引类别的首指令ID,进而取得相应显示属性执行该索引类别下首个指令实例的显示,并可取得相应的索引类别的提示信息,在当前指令行的上一行或下一行显示字符索引提示,使用户清晰地知道当前正在进行索引浏览;当用户确认当前索引,需要对该索引类别下的其它指令浏览时,只需把前面取得的首指令ID的值加1(递增),即可得到该类别下的下一个指令ID,如此执行,即可实现对同类指令的浏览。
同理,为了向用户提供每条指令的功能的提示,必须把每条指令的功能提示信息预先存储在系统存储器中,并把各指令提示信息首地址以指令ID为顺序建立相应的寻址指针表。当用户对具体指令进行浏览时,系统能依据指令ID取得提示信息,在当前指令行的上一行或下一行提供相应的指令功能提示,比如当系统显示指令实例MOV A, #00H,可以同时给出提示“把立即数送入累加器A”。
进一步地,为了实现对指令依功能进行分类索引,加快查找指令的速度,还要建立一个功能索引表,一个例子如下表所示。
索引ID | 各功能索引类别地址偏移量 | 按功能进行分类的指令ID集合 | 各功能索引类别提示信息 |
0 | 0 | 0,1,2,3,16,17 | 数据传送到累加器A |
1 | 6 | 4,5,6 | 数据传送到工作寄存器Rn |
2 | 9 | 7,8,9,10,11,15 | 数据传送到地址 |
3 | 15 | 12,13,14 | 数据传送到间址寄存器 |
上表左起第一列是索引ID值,此列数据不必存储,第二列是按索引ID顺序存储于系统存储器中的各功能索引类别的地址偏移量,这个偏移量是基于第三列的按功能进行分类并连续存储的指令ID数据存储区的首地址的,第四列为功能索引类别提示信息(该提示信息的存储及寻址方法不再赘述)。系统向用户提供索引的浏览时,只需对系统定义的索引ID变量的值递增递减,然后从上述第二列的偏移量存储区中取得对应索引类别的地址偏移量,把此偏移量加上第三列的按功能分类排序存储的指令ID存储区的首地址,即可取得相应功能索引类别下的第一个指令ID,据此指令ID取得对应的显示属性,即可在当前指令行显示出当前索引类别下的第一条指令,同时在该指令行的上方或下方显示功能索引类别提示信息;当用户确认当前的功能索引类别,设如上表中的0类功能,需要浏览该类下的其它指令时,只需把前面取得的地址偏移量值0加1(即递增),再加上第三列的指令ID存储区的首地址,即可取得当前功能索引类别下的下一个指令ID的值1,依次执行,即可实现同类功能的指令的浏览。
同理,还可以依据参数类型以及其它有必要的分类方法对参数的用途或含义进行细分,甚至针对具体的某个专用寄存器名,把其含义信息预先存储在系统存储器中,同时建立相应的寻址指针表,当用户录入参数值落入某个范围时,或为某个专用别名,即提供相关含义的信息提示。比如对于寄存器地址,可以对00H~1FH间的地址提供提示信息“工作寄存器区地址”,20H~2FH间的地址提示信息为“可位寻址区地址”,再如对于专用寄存器“SP”,可提示“堆栈指针寄存器”,等等。
有了显示属性,就有了通过显示器向用户正确显示指令的依据。但系统在工作时还要定义几个通用全局变量,设定义一个指令ID变量用于存放当前操作的指令的指令ID值,还要定义三个用于存放当前指令参数值的变量VAR1、VAR2、VAR3。注意,上述存放参数值的变量的个数应以当前指令集中最多参数的那条指令的参数个数为准(必要时要考虑多字节数据),本实施例假设当前指令集中一条指令最多的参数个数为3个。其中,VAR1(或称参数1,下同)总是用于存放当前编辑指令的第一个参数,VAR2总是用于存放指令的第二个参数,VAR3总是用于存放指令的第三个参数。如果一条指令仅有一个参数,则VAR2、VAR3对它无意义。如果指令中包含比如双字节的数据,则应拆分为单字节数据后依次存储在如VAR1、VAR2或VAR2、VAR3中。
需要说明的是,对于系统预先定义的字符串类变量名或其它符号别名,如专用寄存器名称,在用户指令实例的存储时并不需要直接保存该名称的字符串,而是保存该名称所代表的地址、或常数等数值,所以在系统存储器中也应预先保存有系统定义的字符串及其关联数值的表,以便显示时系统可以根据用户要求在显示数值和显示数值所对应的别名之间进行切换。
当系统要显示一条新指令,系统首先取一个默认值到指令ID变量,同时把VAR1、VAR2、VAR3全部初始化为0,然后依据指令ID变量的值取得相应指令的显示属性数据,依据显示属性把该指令实例显示出来,其中,系统需要依据不同的参数类型,调用相应的参数显示子程序,确保正确显示指令中的参数值。然后,用户只要通过输入单元,比如上、下箭头键,来控制系统改变当前指令ID变量中的值,比如最简单的,用下箭头键令ID值递增、上箭头键令ID值递减,并允许循环,就可以改变指令ID,系统从而寻址相应的新的显示属性,更新当前显示的指令实例,实现用户对指令集中各指令的浏览。当用户找到所需指令,按确认键确认,如果该指令有参数,系统很容易通过显示属性得到参数的显示位置,并把编辑光标定位到第一个参数的位置,该第一个参数对应于变量VAR1,用户就可以对系统显示的VAR1中的默认参数值进行修改,比如,最简单的,同样使用上、下箭头键,令VAR1中的值递增或递减,同时系统依据显示属性中的该参数的参数类型保证参数值在合法范围内,系统并同步更新指令(VAR1)的显示,用户从而最终获得自己所要的参数值,依次类推,直到实现当前指令全部参数的输入,完全获得用户所需的指令实例。
相应地,当用户确认了所需的指令实例,对用户指令实例的存储就显得非常简单,因为有关指令显示方面的信息已经以显示属性的形式另外地保存在存储器中,则对用户指令数据的保存只需保存指令ID和参数值就可以了。对于上面描述的录入例子,对用户指令行的存储内容是:指令ID[,VAR1][,VAR2][,VAR3]。
容易得出用户录入的指令信息的通用存储格式:指令ID[,参数1][,参数2][,…,参数n]。
在上述的存储格式定义中,方括号部分是可选的,因为不同的指令可能有一个参数,也可能有两个参数或更多,也可能没有参数。
下面用更为具体的指令例子来对本发明所述的指令语句的显示、存储和录入方法加以说明。
以指令原型MOV Rn,#data为例,说明如何划分不可编辑的助记符部分和可编辑的参数部分,然后如何得出其显示属性并执行显示。
本指令中,Rn属于工作寄存器组中的一个寄存器,工作寄存器组由R0~R7组成,其中可编辑部分为n,因此,本指令的第一个参数的参数类型应命名为“工作寄存器”,设用2标记,其取值范围为0~7;然后,#data表示一个立即数,‘#’是立即数在指令中的标志符,其可编辑部分为之后的数值data,于是,得到本指令的第二个参数的参数类型“立即数”,设用3来标记该类型,其取值范围为00H~0FFH。
则,在本指令中,除了n和data之外的字符,包括MOV后的空格(本指令设为有两个空格),都属于助记符部分,可以数得助记符部分字符总个数为8。
设指令助记符的第一个字符‘M’的位置为0,可以得到第一个参数n在指令中的位置为6,第二个参数data的位置为8。注意,在这里计算位置时不考虑参数本身所占用的位置(当然也可以计算,只是在显示程序中要做相应修改),并且不管一个参数实际显示时为多少位,总是把它作为一个整体来描述其位置。一种特例,在指令的最前面为一个参数,这时该参数的位置应定义为0,而该参数之后的第一个助记符位置也是0(本文不考虑第一个助记符前面有两个参数的情况,也不考虑指令助记符字符少于2个的情况,因为目前未检索到哪一种指令集存在这些情况)。
于是根据显示属性定义1,得到指令MOV Rn,#data显示属性为:2,2,6,3,8,8,‘M’,‘O’,‘V’,‘’,‘’,‘R’,‘,’,‘#’
其中,本指令的参数个数=2,参数1类型为2,参数1显示位置为6,参数2类型为3,参数2显示位置为8,本指令助记符的字符个数=8,首字符为‘M’。这里为了直观,没有写出字符的存储时代码,实际存储时存储的是助记符字符的ASCII码,如字符‘M’的AS CII码为4DH,以后不再说明。
假设本指令的指令ID为6,并且MOV R3,#88H为用户录入的指令实例,则根据本发明定义的对用户指令实例的存储方法,系统在存储器中将保存如下用户数据:6、3、88H。
当系统需要重新显示上述用户指令实例,首先从用户数据存储区把指令数据6、3、88H读出到指令ID变量和参数变量VAR1、VAR2中(VAR3在本指令实例中未用到,不必理会),然后依据指令ID变量中的值6,取得相应指令显示属性的首地址,继而读出该显示属性中的第一个数据2,这个2表示本指令有2个参数,据此读出其后4字节的参数数据2、6、3、8到相应的内存变量中暂存以备后用;然后读出下一个数据,即助记符的字符个数8;然后,调用指令显示子程序,执行本指令的显示;以下是一个基本的显示流程,参考图1:首先令助记符字符显示计数器清0,然后判断参数是否显示完毕,若有参数未显示,则从第一个参数起,依次判断各参数是否已显示,若未显示,再判断计数器值是否等于参数的显示位置,若等于,则执行参数显示;本例中当计数器值等于第一个参数的显示位置6,系统将依据该位置参数的参数类型2,调用工作寄存器类参数显示子程序,把VAR1中的工作寄存器序号3显示出来(该参数显示子程序可以确保只显示一位数字3,而不是显示3H或03H等其它形式);完成参数1显示后,判断助记符是否显示完毕,若未完毕,从显示属性中读出下一个数据即助记符字符的显示代码,显示该字符,并令计数器加1;然后返回重新判断参数是否显示完毕,开始下一个参数或字符的显示;到位置计数器等于8,开始显示第二个参数VAR2中的88H,依据该位置参数的参数类型3,调用立即数类参数显示子程序,显示两位的十六进制数88及其标志符‘H’(当十六进制数高位大于9时,显示为如0FFH形式),当第二个参数显示完毕,助记符字符也已显示完毕,完成指令显示。
顺便提到,通常参数的显示形式有二进制、十进制和十六进制,系统可以增加几个标志来标志当前用户需要的显示形式,并在具体的参数显示子程序中据上述标志有选择地执行相应显示形式的显示,具体的参数显示方法并不困难,本文不细述。
类似地,根据显示属性定义2,得到指令MOV Rn,#data的显示属性为:2,6,3,8,‘/’,‘M’,‘O’,‘V’,‘’,‘’,‘R’,‘,’,‘#’,‘/’。
其中,参数1类型为2,显示位置为6,参数2类型为3,显示位置为8,第一个分隔符‘/’标志着参数部分数据的结束,之后为助记符字符显示数据,最后一个分隔符‘/’标志助记符部分数据的结束。分隔符可以使用任何不与显示信息数据冲突的符号。
当系统依据显示属性定义2的显示属性数据执行指令的显示时,需要在读取数据的同时进行字节数计数,直到读到第一个分隔符为止,如本例中当读到第一个分隔符‘/’时所得计数为4,该数值除以2即得本指令参数的个数2(注:若第一个字符即为分隔符,则参数个数为0);在读到第一个分隔符‘/’后,调用指令显示子程序,显示流程如图2所示,与图1的流程图基本相同,稍为不同的地方在于,指令显示结束的判断不必依据计数器的计数,而是读出一个数据,若该数据为第二个分隔符‘/’,结束显示,显示过程不再赘述。
与定义2配套的用户指令存储方法仍只需保存指令ID和参数,不再赘述。
类似地,根据显示属性定义3,得到指令MOV Rn,#data的显示属性为:10,‘M’,‘O’,‘V’,‘’,‘’,‘R’,82H,‘,’,‘#’,83H。
其中第一个数据10为本指令的助记符字符加上参数的总个数,也就是显示属性中该数据之后的数据总个数。
定义3的特点是没有参数位置数据,而是直接把参数类型数据放置到该参数在指令中的相应位置,具体地就是助记符字符显示代码数据中相应的位置,如本例中倒数第四个数据82H和倒数第一个数据83H,即为本指令中两个参数的参数类型数据,此二数据对应于参数类型2和参数类型3,即实际的存储数据是参数类型值加上80H。这样定义的原因,是为了把助记符显示字符数据与参数类型数据区别开来,因为标准ASCII码数据最大为7FH,这样,数据小于80H的就是助记符字符,大于或等于80H的就是参数类型数据。而一般指令集的参数类型在10种左右,况且从80H开始到FFH之间最多可容纳128种参数类型,所以足够使用。
本定义下指令实例的基本的显示流程如图3所示,当系统执行指令的显示时,首先读取显示属性的第一个数据10放入计数器,凭此数据进行显示倒计数,之后每取一个数据,均首先判断其是否小于80H,小于则为字符数据,执行字符显示,若大于或等于80H,则为参数类型数据,调用参数显示子程序执行相应参数的显示。每显示一个字符或参数,计数器减1,直到为0,完成显示。
下面再举一例说明显示属性数据的获得。
指令NOP的显示属性。
这是一条不带可编辑参数的指令,因为它没有操作数,整条指令都属于不可编辑的助记符。其助记符部分的显示字符总个数为3,参数个数为0。
依据显示属性定义1,其显示属性为:0,3,‘N’,‘O’,‘P’。
依据显示属性定义2,其显示属性为:‘/’,‘N’,‘O’,‘P’,‘/’。
依据显示属性定义3,其显示属性为:3,‘N’,‘O’,‘P’。
假设本指令的指令ID为15H,则对本指令实例的存储只需存储指令ID一个字节:15H,可见,实施本发明可以使用户程序数据的存储变得非常经济。
如图4所示为一个具体的指令录入流程,一条指令的录入过程包括了指令索引模式、指令选择模式和参数选择模式,概述如下:
(a)系统首先进入指令索引模式,向用户提供基于指令首字符进行分类排序的索引、或基于指令功能进行分类排序的索引;系统并且取出当前默认索引类别下的第一个指令ID,进而取得并依据该指令ID对应的显示属性,通过显示器在光标所在行显示一条完整的指令实例,若该指令有参数,所显示参数为系统提供的默认参数值;同时在该指令行的上方或下方弹出当前索引类别说明;系统接收用户的输入比如确认+上箭头组合键来进行字符索引和功能索引之间的切换;系统同时接收用户的输入如上、下箭头键对索引ID值进行递增或递减,从而依次显示以首字符为标志的各个索引类别下的第一条指令、实现对所需指令所在类别的快速定位;用户此时可通过确认键比如回车键确认当前索引类别,从而进入步骤(b);
(b)系统进入指令选择模式,弹出的索引类别说明消失,代之以当前指令的功能说明,当前显示指令仍为所选定索引类别下的第一条指令;系统接收用户的输入如上、下箭头键的控制信息,递增或递减指令ID,从而依次显示当前类别下的其它指令、进而可依次显示浏览整个指令集的指令;用户通过回车键确认所需指令,从而进入步骤(c);
(c)当用户确认了所选择指令,系统自动进入参数选择模式,并依据显示属性、自动把光标定位到该指令行的第一个参数,弹出的指令功能说明消失,代之以当前编辑参数的含义说明;系统接收用户的输入如上、下箭头键的控制信息,递增或递减当前的参数值、或依次显示可选参数值,并依据参数类型保证参数值在合法范围内;当用户通过回车键确认所需参数值,系统自动把光标下移到下一参数,用户又可以对该参数的值进行编辑,依此类推,直到当前指令的最后一个参数完成编辑,用户通过回车键确认后,完成当前指令实例的录入;
(d)系统保存用户录入的指令实例的指令ID和参数值,并退出当前指令的录入状态。
指令的显示也可以不使用显示属性,而代之以为每一个指令原型撰写一个显示子程序(函数),以指令原型MOV Rn,#data的显示子程序为例说明其原理,以下为一个基本的显示流程例子(为方便描述起见,其中的显示子程序采用C语言函数的格式描述,括号内为入口参数,‘//’之后文字为附加注释):
A.DpChar(‘M’,EditInstFg);//显示一个字符‘M’,
//EditInstFg=1反相显示字符
B.DpChar(‘O’,EditInstFg);
C.DpChar(‘V’,EditInstFg);
D.DpChar(‘’,EditInstFg);
E.DpChar(‘’,EditInstFg);
F.DpChar(‘R’,EditInstFg);
G.//显示本指令的第一个工作寄存器类参数n,其值在VAR1中
a)EditInstFg==1? //是否指令选择状态?
i.是,RevDpFg=1,转c);//RevDpFg=1反相显示参数
ii.否,RevDpFg=0,下一步;
b)EditVarFg==1? //EditVarFg=1为编辑参数状态
i.是,EditVNo==1? //编辑本指令第一个参数?
1.是,RevDpFg=1,转c); //反相标志置1
2.否,RevDpFg=0,转c);
ii.否,下一步;
c)DpVn(VAR1,RevDpFg);//显示Rn类参数VAR1,
//仅显示其十六进制低位数字
//RevDpFg=1时反相显示
H.DpChar(‘,’,EditInstFg);
I.DpChar(‘#’,EditInstFg);
J.//显示本指令的第二个参数data,其值在VAR2中
a)EditInstFg==1?; //是否指令选择状态?
i.是,RevDpFg=1,转c); //反相显示标志置1
ii.否,RevDpFg=0,下一步;
b)EditVarFg==1? //参数编辑标志=1?
i.是,EditVNo==2?//编辑本指令第二个参数?
1.是,RevDpFg=1,转c); //反相显示标志置1
2.否,RevDpFg=0,转c);
ii.否,下一步;
c)DpVdata(VAR2,RevDpFg);//显示data类参数VAR2;
//RevDpFg=1时反相显示
K.VARNo=2;//返回本指令参数个数=2
L.Attr1=2;//返回本指令第一个参数的参数类型为2
M.Attr2=3;//返回本指令第二个参数的参数类型为3
N.完成显示,返回。
其中DpChar(‘字符’,EditInstFg)为显示引号中字符的子程序,步骤如下:
(一)EditInstFg==1?; //是否指令选择状态?
i.是,RevDpFg=1,转(二);//反相显示标志置1
ii.否,RevDpFg=0,下一步;
(二)DpChar1(‘字符’,RevDpFg);//显示一个字符,
//RevDpFg=1时反相显示
(三)返回。
上述显示子程序中,EditInstFg为编辑(选择)指令标志,为1时整个指令反相显示,标志用户正在浏览选择指令;EditVarFg为编辑(选择)参数标志,当处于参数编辑状态下此标志置1;EditVNo为当前编辑的参数序号,标志当前正在编辑指令的第几个参数;以上变量均由系统在调用显示子程序时作为入口参数予以赋值。RevDpFg为反相显示标志,在具体的字符或参数显示子程序中决定所显示内容是否反相显示;VARNo为向系统(调用者)返回的本指令参数个数,本例指令有2个参数,Attr1为返回的本指令第一个参数的参数类型,本例为2,表示该参数为工作寄存器类,取值范围为0~7,Attr2为第二个参数的类型(相应地,如果有第三个参数,还应该返回Attr3),本例为3,表示该参数为立即数类,取值范围为00H~0FFH。
其它指令的显示子程序的撰写与上述MOV Rn,#data的流程相同,其中VAR1、VAR2、VAR3是公用的全局变量,如果指令有参数,总是存放当前光标所在指令的第一、第二、第三个参数值(相应地,其参数类型在显示子程序中赋值到Attr1、Attr2、Attr3),在具体的指令显示子程序中使用多少个上述变量视具体指令有多少个参数而定。作为编辑参数的依据,在显示子程序的末尾,需要把本指令的参数个数存入一个全局变量VARNo,当系统通过指令ID寻址并调用指令显示子程序,调用显示完毕通过显示子程序返回的VARNo就可以知道当前指令有多少个参数了,相应地,系统通过Attr1、Attr2、Attr3就可以知道当前指令的各参数是什么类型的参数,在编辑时即可依据参数类型把参数值限定在合法的范围内。
与前述的显示属性的显示原理类似,当系统要显示一条新指令,系统首先取得一个指令ID到指令ID变量,同时把VAR1、VAR2、VAR3全部初始化为0,参数编辑标志EditVarFg=0,然后依据指令ID变量的值调用相应的显示子程序,把该指令实例显示出来,其间令指令编辑标志EditInstFg在1和0之间间歇变化,使产生指令闪烁光标的效果来标志指令编辑状态;然后,用户只要通过输入单元,比如上、下箭头键,来控制系统改变当前ID变量中的指令ID值,比如最简单的,用下箭头键令ID值递增、上箭头键令ID值递减,就可以改变指令ID,系统从而调用相应的新的显示子程序,更新当前显示的指令实例,实现用户对指令集中各指令的浏览;当用户找到所需指令,按确认键确认,系统通过VARNo知道该指令有无参数,若无,EditInstFg=1保留静态光标在该指令行,然后退出录入状态;若有,系统即令指令编辑标志EditInstFg=0,参数编辑标志EditVarFg=1,并初始化当前编辑参数的序号EditVNo=1,调用显示子程序更新显示,整条指令不再闪烁显示,反相光标出现在第一个参数的位置,该第一个参数对应于变量VAR1,用户就可以通过输入单元对系统提供的VAR1中的默认参数值进行修改,比如,最简单的,同样使用上、下箭头键,令VAR1中的值递增或递减,同时系统依据参数类型Attr1保证参数值在合法范围内,然后调用显示子程序更新VAR1的显示,用户从而最终获得自己所要的参数值,当用户通过确认键接受第一个参数值,如果还有参数,系统会令EditVNo加1从而等于2,开始反相显示并允许用户编辑参数2,依次类推,直到实现当前指令全部参数的输入,当用户通过确认键确认最后一个参数值,系统令EditInstFg=1保留静态光标在该指令行,EditVarFg=0,退出指令录入状态。
对指令的保存只需保存指令ID和参数值,其中保存VAR1、VAR2、VAR3中哪几个与具体指令的参数个数有关,比如对于指令MOV Rn,#data,只需保存VAR1、VAR2中的值。
采用显示子程序代替显示属性时,录入过程如图4所示,其完整的录入过程也包括了指令索引模式、指令选择模式和参数选择模式,与讨论显示属性时对图4的描述基本相同,只是把通过指令ID取得并依据显示属性显示指令、改为通过指令ID调用相应的显示子程序显示指令就可以了,此处不再赘述。
另外,如果用户录入的是程序指令,则标号和伪指令也是程序中必不可少的内容,为了实现选择式录入,标号和伪指令也应该象一般指令一样按照统一的规则实现显示、录入和存储。为此,把标号和伪指令也定义为包括不可编辑的助记符部分和可编辑的参数部分,依据首字符分类规则与普通指令一起分类排序,然后统一分配指令ID,也具有各自的显示属性或显示子程序。下面首先讨论程序标号的录入规则。
程序标号是程序中的位置(地址)标记,往往用于标志一段程序或数据的开始,方便跳转类指令描述跳转到的目标地址,或其它需要取得程序中某个地址的指令使用,通常的语法规则要求在标号字符串后用一个冒号来标志,比如通常程序的开始用“MAIN:”或“START:”作为标号。本发明中为实现标号的选择式录入,采用了以下的定义方法:
(a)把程序标号定义为包括不可编辑的助记符部分和可编辑的参数部分,并把参数的类型定义为一种标签参数类型。比如,把标号的不可编辑部分定义为开头一个‘L’和末尾一个‘:’(‘L’取Label的首字符之意),这样方便与其它指令一起分类排序,中间为参数部分,把标号的参数部分定义为用三位十六进制数值(双字节数据,低三位有效)表示的序号,如000和001,这时标号显示为“L000:”、“L001:”,参数的取值范围为000H~FFFH,这种定义法特别有利于提高存储器的利用率。
(b)为程序标号定义一个显示属性或一个显示子程序,从而把所定义标号当作一条指令原型与指令集中的指令一起统一分类排序后分配指令ID、以便由用户选择录入。设标签参数类型标记为7,依据显示属性定义1,本例中以‘L’为开头的标号其显示属性为:1,7,1,2,‘L’,‘:’;其中,本指令的参数个数=1,参数1类型=7,参数1显示位置=1,本指令非参数字符个数=2,助记符首字符为‘L’(标号的其它显示属性定义例子及显示子程序的撰写方法参考本文的有关部分,此处不再赘述);系统可以通过标号的指令ID取得标号的显示属性或显示子程序,结合一个默认的参数值,在当前光标行显示一个完整的程序标号实例,如“L000:”,进而用户可编辑该标号实例的参数部分000、获得所需的程序标号,作为用户程序的位置标签。具体的录入流程与普通指令相同,不再赘述。
(c)在跳转类指令的显示属性或显示子程序中把跳转到的目标对象作为可编辑的参数,并把其参数类型归为标签参数类型,从而系统在显示跳转类指令时,可以在跳转到的目标对象的位置显示一个默认的程序标号参数,从而可以被用户编辑为所要跳转到的程序标号。比如,无条件跳转指令原型JMP label,依据前述对标号的定义显示为JMP Lxxx,其中可把JMP L定义为本指令的助记符部分,后面的三个xxx代表了用户可编辑的参数部分,为标签参数类型,则系统对本指令默认的显示为JMP L000,进而,与编辑其它指令的参数一样,当用户确认录入该指令,系统将把编辑光标定位到000的位置,使用户可编辑该十六进制数值。
(d)在其它应用到程序标号的指令的参数中,系统把一个默认的程序标号作为该参数的可选项供用户选择使用,当用户把程序标号选择为该参数的参数值,系统进而允许用户对该程序标号的可编辑部分进行编辑,从而获得所需程序标号。比如,指令MOV DPTR,#xxxx,该指令的助记符部分为MOV DPTR,#,四个xxxx代表其参数部分,其参数类型为双字节立即数,取值范围0000H~0FFFFH,默认情况下该指令显示为如MOV DPTR,#0000H,但是,在本例的选择式输入中,当用户从0000H再往下减1,或从0FFFFH再往上加1,该指令的显示就变成MOV DPTR,#L000,即系统把一个默认的程序标号作为该参数的可选项提供给了用户,当用户确认使用该标签类参数值,系统进而将把编辑光标定位到000的位置,使用户可编辑该十六进制数值。
(e)对程序标号指令实例的存储只需存储其指令ID和参数值;对于前述(d)步骤的应用情况,因为在同一位置存在两种参数的显示形式,为加以区别,除遵循存储其指令ID和参数值的原则外,可在指令数据的前头增设一个标志字节或标志位,比如,本实施例中,因为MCS-51指令集的指令数少于128,即其指令ID值小于128,所以可把存储的指令ID值的最高位置1来标志该指令实例包含标签类参数值(相应地,显示时需要增加一个对上述标志字节或标志位的判断步骤,当判断为有上述标志,应首先显示一个‘L’,再把该双字节数据低三位显示为三位十六进制数)。
伪指令的显示属性或显示子程序的定义与普通指令的定义方法完全相同,以下以显示属性定义1为例来说明,其它格式定义的显示属性及显示子程序的定义不再赘述。
比如,伪指令ORG xxxx的显示属性,其助记符部分为ORG,四个xxxx代表了参数部分,参数类型为双字节的立即数,设标记为6,默认显示为如ORG 0000H。根据显示属性定义1,伪指令ORG的显示属性为:1,6,5,5,‘O’,‘R’,‘G’,‘’,‘’。
其中,本指令的参数个数=1,参数1类型=6,参数1显示位置=5,本指令非参数字符个数=5,助记符首字符为‘O’。设其指令ID=70,则ORG 0000H的存储数据为:70,0,0。
特别需要说明的是,伪指令中有涉及用户自定义变量名等符号别名的情况,本发明中把用户自定义的符号名也归入标签参数类型,类似标号,定义为一个助记符‘L’和三位可编辑的十六进制数xxx的形式。
如伪指令“EQU”,其默认的显示形式为Lxxx EQU xxH,其中xxx和xxH为可编辑部分,前者为标签类参数,后者为立即数类参数,其余字符为助记符部分,根据显示属性定义1,其显示属性为:2,7,1,3,6,6,‘L’,‘’,‘E’,‘Q’,‘U’,‘’。
其中,本指令的参数个数=2,参数1类型=7,参数1显示位置=1,参数2类型=3,参数2显示位置=6,本指令非参数字符个数=6,助记符首字符为‘L’。设伪指令“EQU”的指令ID为109,则指令实例L012 EQU 23H的存储数据为109、00H、12H、23H。
为了定义双字节数据的别名,可为伪指令“EQU”多定义一个指令ID,如把Lxxx EQU xxxxH格式的指令ID定为110,具体属性等不再论述。
本发明的录入方法,当使用键盘输入,典型地只需五个输入键(括号中为一个键名例子):
(1)功能菜单键(FUNC),用于触发在屏幕上弹出当前可用的操作功能菜单;
(2)确认键(YES),用于确认、执行或接受当前的操作;
(3)取消键(NO),用于取消或退出当前的操作;
(4)上移箭头键(UP),弹出菜单时用于把光标定位到上一个菜单项,浏览程序时用于把光标定位到上一指令行,在指令索引模式、指令选择模式、参数选择模式中用于显示上一项可选择内容,涉及参数值的选择时用于递减数值;
(5)下移箭头键(DOWN),弹出菜单时用于把光标定位到下一个菜单项,浏览程序时用于把光标定位到下一指令行,在指令索引模式、指令选择模式、参数选择模式中用于显示下一项可选择内容,涉及参数值的选择时用于递增数值。
以下以在MCS-51汇编语言指令程序的编辑环境中录入一条指令为例来说明键盘输入时的典型操作过程,此处结合录入一条新指令MOV A,#30H来说明:
(a)用户在程序指令编辑界面通过按下FUNC键弹出功能操作菜单,通过箭头键把光标移动到“添加指令”项(或使功能菜单显示为“添加指令”项),按YES键开始添加指令,系统首先进入指令索引模式;在指令索引模式中系统可以向用户提供基于指令功能进行分类排序的索引,或基于指令首字符进行分类排序的索引;系统会在用户需要添加新指令的行默认反相显示一条完整指令,并在该指令的上方或下方弹出该指令所属索引类别的加大字体的索引提示,用户通过箭头键可以上下浏览索引,可以通过一个组合键如FUNC+UP进行索引之间的切换,假设用户选择了基于指令首字符的索引,为了实现指令MOV A,#30H的录入,用户需要一直浏览到出现‘M’提示的索引(此时光标行显示的是‘M’类下第一条以字符M开头的指令),此时按下YES键完成索引查找,索引提示消失。本步骤的用途,在于通过索引实现对所需指令所在类别的快速定位。
(b)系统进入指令选择模式,当前在需要添加新指令行的位置是‘M’类索引下的第一条指令,该类别下的其它指令被依次排列在前述第一条指令之后,并且该指令开始在正常与反相之间交替显示闪烁,作为进入指令选择模式的标志,这时系统在该指令行的上方或下方弹出该指令的功能注释;用户通过下移箭头DOWN键可以控制对其余指令的浏览,也可通过UP键逆向浏览,只要每更新显示一条指令,其功能注释内容也会随之更新,本例中需要一直找到指令MOV A,#00H为止,其中立即数00H是系统默认提供的参数值,相应的功能注释为“立即数传送到累加器A”,此时用户可按下YES键确认接受该指令。
(c)当用户在上一步骤中确认了所选择指令MOV A,#00H,系统自动进入参数选择模式,整行指令不再闪烁显示,而把反相光标定位到该指令行的第一个参数00H的最高位0(注意,如果该参数显示为一个二进制或十进制或十六进制的数值,系统首先会把光标定位于该参数的最高位,否则,光标将覆盖整个参数,比如在显示寄存器名的情况),同时系统在该参数的上方或下方弹出该参数的含义注释,本例本步骤中注释始终为“立即数”;用户通过上、下箭头键可以对此参考值进行递减递增,本例需要把参数的最高位递增到3,然后按下确认键,系统自动把光标下移到该参数的下一位低位0(注意,如果该参数非数字值,则会下移到下一参数,用户又可以对该参数进行选择输入,依此类推,直到当前指令的最后一个参数或其最低位完成编辑),本例中不需要对这个0再进行修改,故再次按下确认键接受当前值,系统将自动退出参数选择模式,参数注释也随之消失,整条指令全部正常反相显示,表示用户录入完成,光标并处于当前指令行。(之后用户可通过箭头键把反相光标在指令行间上下移动,通过FUNC键选择对其它指令的编辑动作,这些内容已超出本文范围,不作详细论述)
(d)系统在用户程序文件中保存当前选定的指令的指令ID及其参数值,完成当前指令的录入或编辑。
当仅需对已经录入的指令的参数进行编辑时,仅需把光标移到所需编辑的指令行,按下功能菜单键,在弹出的操作菜单中选择“编辑参数”,系统即直接进入上述步骤(c)。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种应用于嵌入式系统的指令的显示方法,其特征在于,
系统存储器中预先存储了每一条指令的显示属性,所述显示属性包含或隐含了指令的不可编辑的助记符部分的字符的个数、每个助记符字符的显示代码及其相对显示位置,如果该指令还有可编辑的参数部分,则还包含或隐含了该指令中参数的个数、每个参数的参数类型及其相对显示位置;系统依据所述的显示属性,结合具体的参数值,通过显示器即可正确显示一个完整的指令实例;其中,系统通过所述的参数类型确保参数值以正确的格式被显示。
2.根据权利要求1所述的一种应用于嵌入式系统的指令的显示方法,其特征在于,所述显示属性在一个具体的应用系统中可定义为下列格式之一(其中方括号部分与具体指令的参数个数有关,为可选项):
本指令的参数部分的参数个数,[参数1类型,参数1显示位置,][参数2类型,参数2显示位置,][…,参数n类型,参数n显示位置,]本指令的助记符部分的显示字符个数,字符1显示代码,字符2显示代码,…,字符k显示代码;或者
[参数1类型,参数1显示位置,][参数2类型,参数2显示位置,][…,参数n类型,参数n显示位置,]分隔符,字符1显示代码,字符2显示代码,…,字符k显示代码,分隔符;或者
本指令的助记符部分的显示字符加上参数部分的参数的总个数,字符1显示代码,字符2显示代码,…,字符k显示代码,[参数1类型,]字符k+1显示代码,…,[参数2类型,]…,字符k+x显示代码[,参数n类型]。
3.根据权利要求1所述的一种应用于嵌入式系统的指令的显示方法,其特征在于,所述参数类型还决定了该参数的取值范围。
4.根据权利要求1所述的一种应用于嵌入式系统的指令的显示方法,其特征在于,每一条指令的显示属性对应于一个唯一的指令ID。
5.一种应用于嵌入式系统的指令的存储方法,其特征在于:
系统对一条指令的实例的存储只存储该实例的指令ID和参数值。
6.一种应用于嵌入式系统的指令的录入方法,其特征在于,
系统存储器中预先存储了指令集中所有指令的显示属性,并在对所述指令集中所有指令按指令助记符首字符或指令功能进行分类排序的基础上,为每一条指令分配一个唯一的指令ID,当用户需要录入一条指令时,包括以下步骤:
(a)系统首先进入指令索引模式,向用户提供基于指令首字符进行分类排序的索引、或基于指令功能进行分类排序的索引;系统并且取出当前默认索引类别下的第一个指令ID,依据该指令ID对应的显示属性,通过显示器在光标所在行显示一条完整的指令实例,若该指令有参数,所显示参数为系统提供的默认参数值;系统接收用户的输入如上、下箭头键的控制信息,递增或递减索引ID,从而依次显示各个索引类别、实现对所需指令所在类别的快速定位;用户此时可通过输入单元比如回车键确认当前索引类别,从而进入步骤(b);
(b)系统进入指令选择模式,系统接收用户的输入如上、下箭头键的控制信息,递增或递减指令ID,从而依次显示当前索引类别下的其它指令;用户通过输入单元如回车键确认所需指令,从而进入步骤(c);
(c)当用户确认了所选择指令,系统进入参数选择模式,并依据显示属性、把光标定位到该指令行的第一个参数;系统接收用户的输入如上、下箭头键的控制信息,递增或递减当前的参数值、或依次显示可选参数值,并依据参数类型保证参数值在合法范围内;当用户通过输入单元如回车键确认所需参数值,系统自动把光标下移到下一参数位置,用户又可以对该参数的值进行编辑,依此类推,直到当前指令的最后一个参数完成编辑,用户通过输入单元如回车键确认后,完成当前指令实例的录入;
(d)系统对用户录入的指令实例的存储只存储其指令ID和参数值。
7.根据权利要求6所述的一种应用于嵌入式系统的指令的录入方法,其特征在于,所述指令的显示属性也可以用指令的显示子程序代替,所述指令的显示子程序能按指令的书写顺序依次显示本指令各助记符和参数值,其中,依据参数类型的不同调用相应的参数显示子程序以正确的格式显示参数,并把本指令参数的个数和各参数的参数类型赋值给相应的系统变量,以作为系统编辑参数的依据。
8.根据权利要求6或7所述的一种应用于嵌入式系统的指令的录入方法,其特征在于,系统在指令索引模式提供了对当前所在索引类别的提示、在指令选择模式提供了对当前显示指令的功能的提示、在参数选择模式提供了对当前编辑参数值的含义的提示。
9.根据权利要求6或7所述的一种应用于嵌入式系统的指令的录入方法,其特征在于,伪指令也可以作为指令原型定义显示属性或显示子程序,并与所述指令集中其它指令一起分配指令ID,供用户选择录入。
10.根据权利要求6或7所述的一种应用于嵌入式系统的指令的录入方法,其特征在于,当使用键盘录入,典型地只需使用五个输入键:
(1)功能菜单键,用于触发在屏幕上弹出当前可用的操作功能菜单;
(2)确认键,用于确认、执行或接受当前的操作;
(3)取消键,用于取消或退出当前的操作;
(4)上移箭头键,弹出菜单时用于把光标定位到上一个菜单项,浏览程序时用于把光标定位到上一指令行,在指令索引模式、指令选择模式、参数选择模式中用于显示上一项可选择内容,涉及参数值的选择时用于递减数值;
(5)下移箭头键,弹出菜单时用于把光标定位到下一个菜单项,浏览程序时用于把光标定位到下一指令行,在指令索引模式、指令选择模式、参数选择模式中用于显示下一项可选择内容,涉及参数值的选择时用于递增数值。
11.一种程序标号的录入方法,其特征在于,
(a)把程序标号定义为包括不可编辑的助记符部分和可编辑的参数部分,并把该参数的类型定义为一种标签参数类型;
(b)为程序标号定义一个显示属性或一个显示子程序,从而把所定义标号当作一条指令原型与指令集中的指令一起统一分类排序后分配指令ID,系统通过标号的指令ID取得标号的显示属性或显示子程序,结合一个默认的参数值,在当前光标行显示一个完整的程序标号实例,进而用户可编辑该标号实例的参数部分、获得所需的程序标号,作为用户程序的位置标签;
(c)在跳转类指令的显示属性或显示子程序中把跳转到的目标对象作为可编辑的参数,并把其参数类型归为标签参数类型,从而系统在显示跳转类指令时,可以在跳转到的目标对象的位置显示一个默认的程序标号参数,从而可以被用户编辑为所要跳转到的程序标号;
(d)在其它应用到程序标号的指令的参数中,系统把一个默认的程序标号作为该参数的可选项供用户选择使用,当用户把程序标号选择为该参数的参数值,系统进而允许用户对该程序标号的可编辑部分进行编辑,从而获得所需程序标号;
(e)对程序标号指令实例的存储只需存储其指令ID和参数值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100025588A CN101482814A (zh) | 2008-01-08 | 2008-01-08 | 应用于嵌入式系统的指令的显示、录入和存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100025588A CN101482814A (zh) | 2008-01-08 | 2008-01-08 | 应用于嵌入式系统的指令的显示、录入和存储方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101482814A true CN101482814A (zh) | 2009-07-15 |
Family
ID=40879943
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008100025588A Pending CN101482814A (zh) | 2008-01-08 | 2008-01-08 | 应用于嵌入式系统的指令的显示、录入和存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101482814A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102681882A (zh) * | 2011-03-15 | 2012-09-19 | 新奥特(北京)视频技术有限公司 | 一种利用剧本插件控制播出任务执行的方法 |
CN102681905A (zh) * | 2011-03-09 | 2012-09-19 | 新奥特(北京)视频技术有限公司 | 一种任务之间的相互通讯方法及系统 |
CN105812086A (zh) * | 2014-12-30 | 2016-07-27 | 深圳市科曼医疗设备有限公司 | 监护仪的通信方法及系统 |
CN102681882B (zh) * | 2011-03-15 | 2016-12-14 | 新奥特(北京)视频技术有限公司 | 一种利用剧本插件控制播出任务执行的方法 |
CN107589383A (zh) * | 2016-07-07 | 2018-01-16 | 北京普源精电科技有限公司 | 一种测量设备的参数显示方法 |
CN108280025A (zh) * | 2018-01-18 | 2018-07-13 | 中国地质大学(武汉) | 一种at指令模块的学习调试系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040073775A1 (en) * | 2000-12-15 | 2004-04-15 | International Business Machines Corporation | Data flow oriented storage |
US6751759B1 (en) * | 2000-11-03 | 2004-06-15 | Freescale Semiconductor, Inc. | Method and apparatus for pipeline hazard detection |
CN1538292A (zh) * | 2003-10-22 | 2004-10-20 | 北京四方继保自动化有限公司 | 基于嵌入式系统的变电站信息接入实时数据库的应用管理方法 |
-
2008
- 2008-01-08 CN CNA2008100025588A patent/CN101482814A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6751759B1 (en) * | 2000-11-03 | 2004-06-15 | Freescale Semiconductor, Inc. | Method and apparatus for pipeline hazard detection |
US20040073775A1 (en) * | 2000-12-15 | 2004-04-15 | International Business Machines Corporation | Data flow oriented storage |
CN1538292A (zh) * | 2003-10-22 | 2004-10-20 | 北京四方继保自动化有限公司 | 基于嵌入式系统的变电站信息接入实时数据库的应用管理方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102681905A (zh) * | 2011-03-09 | 2012-09-19 | 新奥特(北京)视频技术有限公司 | 一种任务之间的相互通讯方法及系统 |
CN102681882A (zh) * | 2011-03-15 | 2012-09-19 | 新奥特(北京)视频技术有限公司 | 一种利用剧本插件控制播出任务执行的方法 |
CN102681882B (zh) * | 2011-03-15 | 2016-12-14 | 新奥特(北京)视频技术有限公司 | 一种利用剧本插件控制播出任务执行的方法 |
CN105812086A (zh) * | 2014-12-30 | 2016-07-27 | 深圳市科曼医疗设备有限公司 | 监护仪的通信方法及系统 |
CN105812086B (zh) * | 2014-12-30 | 2019-05-03 | 深圳市科曼医疗设备有限公司 | 监护仪的通信方法及系统 |
CN107589383A (zh) * | 2016-07-07 | 2018-01-16 | 北京普源精电科技有限公司 | 一种测量设备的参数显示方法 |
CN107589383B (zh) * | 2016-07-07 | 2021-03-30 | 北京普源精电科技有限公司 | 一种测量设备的参数显示方法 |
CN108280025A (zh) * | 2018-01-18 | 2018-07-13 | 中国地质大学(武汉) | 一种at指令模块的学习调试系统 |
CN108280025B (zh) * | 2018-01-18 | 2021-03-16 | 中国地质大学(武汉) | 一种at指令模块的学习调试系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105378606B (zh) | 用于手势键入的备选假设错误修正 | |
KR101265851B1 (ko) | 데이터베이스로의 질의를 통한 자동 완성 | |
CN103425628B (zh) | 电子书笔记共享方法及电子阅读装置、计算机可读取媒体 | |
CN104756061A (zh) | 多手势文本输入预测 | |
US10592211B2 (en) | Generation of application behaviors | |
CN105431809A (zh) | 用于国际语言的虚拟键盘输入 | |
CN105117376A (zh) | 多模式输入法编辑器 | |
CN111538942B (zh) | 表达式处理方法、电子装置及存储介质 | |
CN101286093A (zh) | 客户端输入方法 | |
CN102422245A (zh) | 输入法编辑器 | |
CN103109264A (zh) | 创建配置文件模板 | |
US20140089841A1 (en) | Device and method for providing application interface based on writing input | |
CN101482814A (zh) | 应用于嵌入式系统的指令的显示、录入和存储方法 | |
CN104503957A (zh) | 一种公式图形自动生成方法和装置 | |
CN105159673A (zh) | 一种设置控件样式的方法和装置 | |
Kirch-Prinz et al. | A complete guide to programming in C++ | |
CN103325360B (zh) | 一种字段式lcd显示方法 | |
CN101375273A (zh) | 用于绘制文本和其他应用的嵌入式规则引擎 | |
CN113687827B (zh) | 基于微件的数据列表生成方法、装置、设备及存储介质 | |
CN103150118A (zh) | 一种基于多点触控技术的内容选择方法、装置及移动终端 | |
CN109885702A (zh) | 自然语言处理中的序列标注方法、装置、设备及存储介质 | |
WO2019135897A1 (en) | Smart search for annotations and inking | |
CN113268965A (zh) | 用于自动生成路由表的方法、装置、存储介质及电子设备 | |
JP2002007420A (ja) | 電子辞書装置およびそのプログラム記録媒体 | |
Feiler | Learn Computer Science with Swift: Computation Concepts, Programming Paradigms, Data Management, and Modern Component Architectures with Swift and Playgrounds |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20090715 |