CN115328390A - 基于c51的指针变量读写操作方法、装置、设备及介质 - Google Patents
基于c51的指针变量读写操作方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN115328390A CN115328390A CN202210791412.6A CN202210791412A CN115328390A CN 115328390 A CN115328390 A CN 115328390A CN 202210791412 A CN202210791412 A CN 202210791412A CN 115328390 A CN115328390 A CN 115328390A
- Authority
- CN
- China
- Prior art keywords
- read
- pointer
- address
- target address
- data
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明涉及计算机数据处理技术领域,公开了一种基于C51的指针变量读写操作方法、装置、设备及介质,其方法包括:获取待运行的指令语句;判断所述指令语句的读写操作类型,确定所述指令语句对应的读写操作;基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入。本发明通过预设的目标地址确定函数确定进行读取或写入操作的目标地址,基于该目标地址实现指针变量数据的读取或写入,减少了程序指令及汇编语句的调用,提升了单片机存储空间的利用率,并有效提高了指针变量数据进行读取或写入操作的效率。
Description
技术领域
本发明涉及计算机数据处理技术领域,尤其涉及一种基于C51的指针变量读写操作方法、装置、设备及介质。
背景技术
在针对单片机中指针变量的读写方法中,如果需要对指针类型变量进行读取或写入操作,当需要向目标地址写入时,需要反复执行写入操作对应的汇编指令以获取需写入指针变量数据的待写入目标地址;当需要读取目标地址的指针变量时,则需要反复执行读取操作对应的汇编指令,以确定待读取指针变量数据的待读取目标地址。
进一步地,针对指针类型的读取和写入操作,指针变量进行读写操作的次数与执行对应的汇编指令的次数需要在数量上达到一致,才能完成对应的指针变量读写操作目标,而这也就意味着,虽然指针变量的读写操作在每次完成读写操作的步骤方式都相同,但还是需要进行与操作需求次数对应的程序代码,进行读写操作的代码占存储空间较大,限制了单片机搭载代码的种类,缩小了设备的应用范围,并在很大程度上降低了在单片机中指针变量进行读写操作的效率。
发明内容
本发明的主要目的在于提出一种指针变量读写操作方法、装置、设备及介质,旨在提高指针变量数据进行读写操作的效率。
为实现上述目的,本发明提供一种指针变量读写操作方法,所述指针变量读写操作方法,包括:
获取待运行的指令语句;
判断所述指令语句的读写操作类型,确定所述指令语句对应的读写操作;
基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入。
优选地,所述判断所述指令语句的读写操作指令,确定所述指令语句对应的读写操作的步骤,包括:
对所述指令语句进行类型判断;
若所述指令语句的读写类型为读取指令语句,则确定对应的读取操作;
若所述指令语句的读写类型为写入指令语句,则确定对应的写入操作。
优选地,所述基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入的步骤,包括:
基于所述读取操作,通过预设的寄存器获取读取操作对应的基地址和地址偏移量;
基于所述基地址和地址偏移量,确定对所述待读取指针变量数据进行读取操作对应的待读取目标地址;
基于所述待读取目标地址,调用对应的读取指针变量数值函数,实现所述待读取指针变量数据的读取。
优选地,所述基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入的步骤,还包括:
基于所述写入操作,通过预设的寄存器获取写入操作对应的基地址和地址偏移量;
基于所述基地址和地址偏移量,获取所述待写入指针变量数据进行写入操作对应的待写入目标地址;
基于所述待写入目标地址,调用对应的写入指针变量数值函数,将所述待写入指针变量数据写入所述待写入目标地址。
优选地,所述基于所述待读取目标地址,调用对应的读取指针变量数值函数,实现所述待读取指针变量数据的读取的步骤,包括:
获取所述待读取目标地址中对应待读取指针变量数据的目标读取长度;
调用获取单字节指针变量数值函数,确定所述待读取目标地址中正读取的预设单字节对应的当前地址;
基于所述预设单字节对应的当前地址,循环调用预设位的指针变量数据读取函数,直到所述目标读取长度对应的待读取指针变量数据完成读取操作。
优选地,所述基于所述待写入目标地址,调用对应的写入指针变量数值函数,将所述待写入指针变量数据写入所述待写入目标地址的步骤,包括:
获取所述待写入指针变量数据的数据源地址;
将所述数据源地址对应的预设位指针变量数据写入对应的预设位待写入目标地址;
基于预设的寄存器循环执行数据源地址与待写入目标地址中待写入指针变量数据的数据传递,直到所述数据源地址中的待写入指针变量数据完成写入操作。
优选地,所述方法还包括:
通过寻址寄存器dptr获取对应的基地址和地址偏移量;
将所述基地址和所述地址偏移量进行预设的目标地址计算规则,确定对应的目标地址;
将所述基地址、地址偏移量和计算得到对应的目标地址存入预先定义的内存空间。
此外,为实现上述目的,本发明实施例还提出一种数据读写装置,所述数据读写装置包括:
指令获取模块,用于获取待运行的指令语句;
读写类型判断模块,用于判断所述指令语句的读写操作类型,确定所述指令语句对应的读写操作;
读写操作实现模块,用于基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入。
优选地,所述读写类型判断模块用于:
对所述指令语句进行类型判断;
若所述指令语句的读写类型为读取指令语句,则确定对应的读取操作;
若所述指令语句的读写类型为写入指令语句,则确定对应的写入操作。
优选地,所述读写操作实现模块用于:
基于所述读取操作,通过预设的寄存器获取读取操作对应的基地址和地址偏移量;
基于所述基地址和地址偏移量,确定对所述待读取指针变量数据进行读取操作对应的待读取目标地址;
基于所述待读取目标地址,调用对应的读取指针变量数值函数,实现所述待读取指针变量数据的读取。
优选地,所述读写操作实现模块用于:
基于所述写入操作,通过预设的寄存器获取写入操作对应的基地址和地址偏移量;
基于所述基地址和地址偏移量,获取所述待写入指针变量数据进行写入操作对应的待写入目标地址;
基于所述待写入目标地址,调用对应的写入指针变量数值函数,将所述待写入指针变量数据写入所述待写入目标地址。
优选地,所述读写操作实现模块用于:
获取所述待读取目标地址中对应待读取指针变量数据的目标读取长度;
调用获取单字节指针变量数值函数,确定所述待读取目标地址中正读取的预设单字节对应的当前地址;
基于所述预设单字节对应的当前地址,循环调用预设位的指针变量数据读取函数,直到所述目标读取长度对应的待读取指针变量数据完成读取操作。
优选地,所述读写操作实现模块用于:
获取所述待写入指针变量数据的数据源地址;
将所述数据源地址对应的预设位指针变量数据写入对应的预设位待写入目标地址;
基于预设的寄存器循环执行数据源地址与待写入目标地址中待写入指针变量数据的数据传递,直到所述数据源地址中的待写入指针变量数据完成写入操作。
优选地,所述读写操作实现模块用于:
通过寻址寄存器dptr获取对应的基地址和地址偏移量;
将所述基地址和所述地址偏移量进行预设的目标地址计算规则,确定对应的目标地址;
将所述基地址、地址偏移量和计算得到对应的目标地址存入预先定义的内存空间。
此外,为实现上述目的,本发明实施例还提出一种设备,所述设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的数据读写程序,所述数据读写程序被所述处理器执行实现如上所述的指针变量读写操作方法步骤。
此外,为实现上述目的,本发明还提供一种介质,所述介质为计算机可读存储介质,所述计算机可读存储介质上存储有数据读写程序,所述数据读写程序被处理器执行时实现如上所述的指针变量读写操作方法的步骤。
本发明提出的基于C51的指针变量读写操作方法、装置、设备及介质,所述指针变量读写操作方法的步骤包括:获取待运行的指令语句;判断所述指令语句的读写操作类型,确定所述指令语句对应的读写操作;基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入。
相比在现有技术中指针变量数据进行读取或写入操作需要反复执行读取或写入对应的汇编指令,本发明通过直接获取到的指令语句中进行读取或写入操作类型的不同,判断具体执行的读取或写入操作,并通过预设的目标地址确定函数确定进行读取或写入操作的目标地址,基于该目标地址实现指针变量数据的读取或写入。本发明中的方法通过将目标地址作为进行读取或写入操作的一个整体概念,将目标地址作为依据完成对目标地址的读取或写入,减少了程序指令及汇编语句的调用,提升了单片机存储空间的利用率,并有效提高了指针变量数据进行读取或写入操作的效率。
附图说明
图1为本发明基于C51的指针变量读写操作方法实施例方案涉及的硬件运行环境的设备结构示意图;
图2为本发明基于C51的指针变量读写操作方法第一实施例的流程示意图;
图3为本发明基于C51的指针变量读写操作方法第一实施例中通过基地址和地址偏移量确定目标地址的具体流程示意图;
图4为本发明基于C51的指针变量读写操作方法第二实施例的流程示意图;
图5为本发明基于C51的指针变量读写操作方法第二实施例中步骤S213的子流程示意图;
图6为本发明基于C51的指针变量读写操作方法第二实施例中指针类型变量读取函数之间的调用关系示意图;
图7为本发明基于C51的指针变量读写操作方法第三实施例的流程示意图;
图8为本发明基于C51的指针变量读写操作方法第三实施例中步骤S223的子流程示意图;
图9为本发明基于C51的指针变量读写操作方法第三实施例中指针类型变量写入函数之间的调用关系示意图;
图10为本发明基于C51的指针变量读写操作方法的数据读写装置的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
具体地,参照图1,图1为本发明指针变量读写操作方法实施例方案涉及的硬件运行环境的设备结构示意图。
如图1所示,该设备可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及功能控制程序。其中,操作系统是管理和控制设备硬件和软件资源的程序,支持功能控制程序以及其它软件或程序的运行;网络通信模块用于管理和控制网络接口1002;用户接口1003主要用于与客户端进行数据通信;网络接口1004主要用于与服务器建立通信连接;而处理器1001可以用于调用存储器1005中存储的功能控制程序,并执行下述数字卡片的功能控制方法各个实施例中的操作。
本领域技术人员可以理解,图1中示出的设备结构并不构成对设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
为了更好的理解上述技术方案,下面将参照附图更详细地描述本发明基于C51的指针变量读写操作方法的示例性实施例。虽然附图中显示了本发明基于C51的指针变量读写操作方法的示例性实施例,然而应当理解,可以以各种形式实现本公开发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开发明,并且能够将本公开发明的范围完整的传达给本领域的技术人员。
基于上述终端设备架构但不限于上述架构,提出本发明指针变量读写操作方法实施例。
具体地,参照图2,图2为本发明基于C51的指针变量读写操作方法第一实施例的流程示意图,所述指针变量读写操作方法包括:
步骤S10,获取待运行的指令语句;
步骤S20,判断所述指令语句的读写操作类型,确定所述指令语句对应的读写操作;
步骤S30,基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入。
本申请实施例指针变量读写操作方法通过直接获取到的指令语句中进行读取或写入操作类型的不同,判断具体执行的读取或写入操作,并通过预设的目标地址确定函数确定进行读取或写入操作的目标地址,基于该目标地址实现指针变量数据的读取或写入。
以下将对各个步骤进行详细说明:
步骤S10,获取待运行的指令语句;
在一具体的实施例中,将单片机作为主要的指针变量数据读写的执行设备,单片机是一种集成在电路芯片,采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能,单片机获取的指令语句以汇编语言为主要传输语句进行对应的操作,进一步地,汇编语言是一种低级语言,经过汇编过程转换成机器码后,可以直接控制CPU的运行,在不同的设备中,汇编语言对应着不同的机器语言指令集,在实际应用中,汇编语言通常被应用在底层,尤其是硬件操作和高要求的程序优化的场合。
步骤S20,判断所述指令语句的读写操作类型,确定所述指令语句对应的读写操作;
在一具体实施例中,需要将获取到的待运行指令语句进行识别判断,当上述指令语句属于数据传输类时,则还需进一步对上述数据传输类的待运行指令语句进行内部数据传送和外部数据传送的识别判定,即需要对上述数据传输类的待运行指令语句进行读取操作类型和写入操作类型的识别判断,确定具体的汇编语句指令对应的读取或写入操作。
进一步地,所述判断所述指令语句的读写操作指令,确定所述指令语句对应的读写操作的步骤,包括:
对所述指令语句进行类型判断;
若所述指令语句的读写类型为读取指令语句,则确定对应的读取操作;
若所述指令语句的读写类型为写入指令语句,则确定对应的写入操作。
在一具体的实施例中,上述汇编语言由操作码和操作数两个部分组成,MCS-51使用的汇编语言指令,有不同功能对应的操作码助记符,操作数由#data、direct、Rn、@Ri等组成,上述对指令语句进行类型判断的方式可以是通过对汇编语言指令的操作码助记符进行识别,也可以是通过对汇编语言指令的操作数进行判断。
步骤30,基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入。
在一具体实施例中,在确定上述指令语句的类型判断为数据传输类时,并进一步的确定上述数据传输类型对应的读取或写入操作时,通过预设的目标地址确定函数,获取上述待运行指令语句中进行具体的读取或写入操作的目标地址,将上述目标地址作为读取或写入操作的执行依据,将每个字节的指针变量数据进行读取或写入,在程序执行算法方面,将上述目标地址的长度作为汇编语言循环次数,单片机设备能够实现一次整体的循环算法以完成指针变量数据的读取或写入操作,并不需要针对于每个字节的内容都重新编写一个对应的汇编语言以完成指针变量数据的读取或写入操作。
进一步地,包含上述目标地址确定函数的所述方法还包括:
通过寻址寄存器dptr获取对应的基地址和地址偏移量;
将所述基地址和所述地址偏移量进行预设的目标地址计算规则,确定对应的目标地址;
将所述基地址、地址偏移量和计算得到对应的目标地址存入预先定义的内存空间。
在一具体实施例中,上述目标地址确定函数的运行方式可以是:通过在寻址寄存器dptr中取得基地址;基地址与地址偏移量进行加法运算;得到目标地址。参照图3,假设待写入或待读取目标地址的基地址为0000H,经过预设的加法运算,得到待写入或待读取目标地址为0023H,将23H放入DPL,00H放入DPH,完成目标地址的获取。
进一步地,上述DPL、DPH是进行指针变量数据写入或读取设备上包含的具有特别功能的地址存储空间,专门用于存放在上述读取或写入操作过程中所得到的地址数据,具体地,上述地址数据可以包括基地址、地址偏移量、目标地址的头地址和目标地址的尾地址以及经过预设的和运算得到的目标地址。
在本实施例通过直接获取到的指令语句中进行读取或写入操作类型的不同,判断具体执行的读取或写入操作,并通过预设的目标地址确定函数确定进行读取或写入操作的目标地址,基于该目标地址实现指针变量数据的读取或写入。本发明中的方法通过将目标地址作为进行读取或写入操作的一个整体概念,将目标地址作为依据完成对目标地址的读取或写入,减少了程序指令及汇编语句的调用,提升了单片机存储空间的利用率,并有效提高了指针变量数据进行读取或写入操作的效率。
进一步地,基于本申请实施例指针变量读写操作方法的第一实施例,提出本申请实施例指针变量读写操作方法的第二实施例。
指针变量读写操作方法的第二实施例与指针变量读写操作方法的第一实施例的区别在于,本实施例是当判定所述指令语句的读写类型为读取指令语句,则对待读取目标地址对应的待读取指针变量数据进行读取操作的具体执行步骤,参照图4,包括:
步骤S211,基于所述读取操作,通过预设的寄存器获取读取操作对应的基地址和地址偏移量;
在一具体实施例中,通过寻址寄存器dptr获取上述读取指令操作对应的读取指令语句中所包含的待读取指针变量数据的基地址和地址偏移量,并将上述基地址和地址偏移量存储至通用寄存器,存储的具体位置可以是目标地址中的高位地址对应的指针变量数据存放至高位字节存储器DPH,目标地址中的低位地址对应的指针变量数据存放至低位字节存储器DPL。
步骤S212,基于所述基地址和地址偏移量,确定对所述待读取指针变量数据进行读取操作对应的待读取目标地址;
在一具体实施例中,优化前的算法,在获取基地址时,重复执行以下指令:
movx a,@dptr
mov Rn,a
inc dptr
并且,在读取指针类型变量的数值时,读取一个字节数据需要调用一次根据指针类型获取该指针变量的值对应的读取函数,比如:__gptrget函数,这意味着读取K个字节数据就需要调用K次根据指针类型获取该指针变量的值对应的读取函数,然而,通过本方法优化后的汇编代码,在获取基地址时,调用一次所述获取目标地址函数即可。在读取指针类型变量的数值时,读取K个字节数据只需要调用一次所述获取N位指针类型变量数值函数,其中N=K*8。本实施例中的N为16,调用的是读取16位指针类型变量数值函数,例如:__ftldptrget16。需要注意的是,上述获取目标地址函数和所述获取N位指针类型变量数值函数的函数名,可以是任意字符,如字母、数字和符号等,不限定于__ftldptrget16。
步骤S213,基于所述待读取目标地址,调用对应的读取指针变量数值函数,实现所述待读取指针变量数据的读取。
在一具体实施例中,在读取16位指针类型变量数值函数的过程中,包括调用所述获取目标地址函数,对基地址和地址偏移量进行加法运算,得到目标地址;调用获取单字节指针类型变量数值函数,从目标地址的首地址中获取一个字节数据,并暂存到开辟的内存空间中;地址往后偏移一个字节;调用获取单字节指针类型变量数值函数,从当前地址中获取另一个字节数据,存入通用寄存器。需要用到这两个字节的值时,从开辟的内存空间和通用寄存器中取出即可。
参照图5,步骤S213,具体包括:
步骤A1,获取所述待读取目标地址中对应待读取指针变量数据的目标读取长度;
步骤A2,调用获取单字节指针变量数值函数,确定所述待读取目标地址中正读取的预设单字节对应的当前地址;
步骤A3,基于所述预设单字节对应的当前地址,循环调用预设位的指针变量数据读取函数,直到所述目标读取长度对应的待读取指针变量数据完成读取操作。
在一具体实施例中,上述目标地址确定函数可以理解为一段读取N位指针类型变量数据的指针地址确定函数,会调用读取M位指针类型变量数值函数,其中,在本实施例中,上述N为8的正整数倍数,M=N-8且M>0。特别地,当N≤16时,数据占用的字节数较少,少量代码即可实现功能,不存在前述调用关系。
参照图6,图6为指针类型变量读取函数之间的调用关系图,具体地,所述读取N位指针类型变量数值函数之间存在嵌套调用的关系,当N>16时,所述指针类型变量读取函数之间存在调用与被调用的关系;当N=16时,所述指针类型变量读取函数存在被调用关系;当N=8时,所述指针类型变量读取函数单独使用。
进一步地,当N=32时,读取32位指针类型变量数值函数中,包括获取目标地址;取出第一个字节数据,将其暂存到开辟的内存空间1;接着地址往后偏移一个字节,调用读取24位指针类型变量数值函数。
当N=24时,在读取24位指针类型变量数值函数中,包括获取地址;取出数据(32位指针类型变量的第二个字节数据,24位指针类型变量的第一个字节数据)并暂存到开辟的内存空间2;地址往后偏移一个字节,调用读取16位指针类型变量数值函数。
当N=16时,在读取16位指针类型变量数值函数中,包括获取地址;取出数据(32位指针类型变量的第三个字节数据,24位指针类型变量的第二个字节数据,16位指针类型变量的第一个字节数据)并暂存到开辟的内存空间3;地址往后偏移一个字节,读取最后一个字节数据。
进一步地,上述开辟的内存空间1定义为(ftm_gptr_ze_1_18+2),字节数为1;上述开辟的内存空间2定义为(ftm_gptr_ze_1_18+1),字节数为1;上述开辟的内存空间3定义为(ftm_gptr_ze_1_18+0),字节数为1。其中,ftm_gptr_ze_1_18是定义的变量名,(ftm_gptr_ze_1_18+Z)表明字节数为Z+1,变量名可为任意字符,可以是纯字母、纯数字或符号,也可以是字母+数字+符号的组合,不限定于(ftm_gptr_ze_1_18)。上述开辟的内存空间可为所有Memory区域,包括但不局限于DATA、XDATA、IDATA、PDATA和CODE区,并且,定义在这些区域的变量的字节数可为1、2、3、……或Z,Z为任意正整数
本实施例通过直接获取到的指令语句中进行读取操作,并通过预设的目标地址确定函数确定进行读取操作的目标地址,基于该目标地址实现指针变量数据的读取。通过将目标地址作为进行读取操作的一个整体概念,将目标地址作为依据完成对目标地址的读取,减少了程序指令及汇编语句的调用,提升了单片机存储空间的利用率,并有效提高了指针变量数据进行读取操作的效率。
进一步地,基于本申请实施例指针变量读写操作方法第一实施例和第二实施例,提出本申请实施例指针变量读写操作方法的第三实施例。
指针变量读写操作方法的第三实施例与第一、第二实施例的区别在于,本实施例是当判定所述指令语句的读写类型为写入指令语句,则将待写入的指针变量数据进行写入操作,写入对应的待写入目标地址的具体执行步骤,参照图7,包括:
步骤S221,基于所述写入操作,通过预设的寄存器获取写入操作对应的基地址和地址偏移量;
在一具体实施例中,通过寻址寄存器dptr获取上述写入指令操作对应的写入指令语句中所包含的待写入指针变量数据的基地址和地址偏移量,并将上述基地址和地址偏移量存储至通用寄存器。
步骤S222,基于所述基地址和地址偏移量,获取所述待写入指针变量数据进行写入操作对应的待写入目标地址;
在一具体实施例中,优化前的写入算法在写入指针类型变量的数值时,写入一个字节数据需要调用一次将值写入不同类型的指针变量对应的函数,比如:__gptrput函数,这意味着写入K个字节数据就需要调用K次将值写入不同类型的指针变量对应的函数。
然而,通过本方法优化后的汇编代码在写入指针类型变量的数值时,读取K个字节数据只需要调用一次所述写入N位指针类型变量数值函数,其中N=K*8。本例中的N为16,调用的是写入16位指针类型变量数值函数,例如:__ftldptrput16。需要注意的是,上述写入N位指针类型变量数值函数的函数名,可以是任意字符,如字母、数字和符号等,不限定于__ftldptrput16。
步骤S223,基于所述待写入目标地址,调用对应的写入指针变量数值函数,将所述待写入指针变量数据写入所述待写入目标地址。
在一具体实施例中,在写入16位指针类型变量数值函数的过程中,包括:将要写入的第一个字节数据存入通用寄存器;取出存储在开辟的内存空间中的数据,将数据写入目标地址的首地址;地址往后偏移一个字节;调用写入8位指针类型变量数值函数,将第二个字节数据写入偏移后的地址。函数示例中将所述通用寄存器定为a寄存器,但本发明不限定于此,其他通用寄存器也可以实现同样的功能,如b寄存器。写入8位指针类型变量数值函数中,包括执行MOVX指令,将通用寄存器中存储的值写入当前地址,所述通用寄存器不限定于a寄存器。
参照图8,步骤S223,具体包括:
步骤B1,获取所述待写入指针变量数据的数据源地址;
步骤B2,将所述数据源地址对应的预设位指针变量数据写入对应的预设位待写入目标地址;
在一具体实施例中,上述数据源地址对应的预设位指针变量数据可以是高位指针变量数据,上述预设位待写入目标地址可以是低位的待写入目标地址,即,作为一种具体的实施例,从数据源地址将指针变量数据写入待写入目标地址的写入操作的执行方式可以是,将高位数据源地址中对应的待写入指针变量数据写入低位待写入目标地址中,实现数据源地址与待写入目标地址的数据传送。
步骤B3,基于预设的寄存器循环执行数据源地址与待写入目标地址中待写入指针变量数据的数据传递,直到所述数据源地址中的待写入指针变量数据完成写入操作。
在一具体实施例中,上述目标地址确定函数可以理解为一段写入N位指针类型变量数据的指针地址确定函数,会调用写入M位指针类型变量数值函数,其中,在本实施例中,上述N为8的正整数倍数,M=N-8且M>0。特别地,当N≤16时,数据占用的字节数较少,少量代码即可实现功能,不存在前述调用关系。
参照图9,图9为指针类型变量写入函数之间的调用关系图,所述写入N位指针类型变量数值函数之间存在嵌套调用的关系。当N≥16时,所述指针类型变量读取函数之间存在调用与被调用的关系;当N=8时,所述指针类型变量读取函数存在被调用关系。
进一步地,当N=32时,写入32位指针类型变量数值函数中,包括将暂存到开辟的内存空间1的第一个字节数据存入通用寄存器,如图5所写的a寄存器,调用MOVX指令将数据写入当前地址;地址往后偏移一个字节,调用写入24位指针类型变量数值函数。
写入24位指针类型变量数值函数中,包括将暂存到开辟的内存空间1的数据(32位指针类型变量的第二个字节数据,24位指针类型变量的第一个字节数据)存入通用寄存器,调用MOVX指令将数据写入当前地址;地址往后偏移一个字节,调用写入16位指针类型变量数值函数。
写入16位指针类型变量数值函数中,包括将暂存到开辟的内存空间1的数据(32位指针类型变量的第三个字节数据,24位指针类型变量的第二个字节数据,16位指针类型变量的第一个字节数据)存入通用寄存器,调用MOVX指令将数据写入当前地址;地址往后偏移一个字节,调用写入8位指针类型变量数值函数。
进一步地,写入16位指针类型变量数值函数中,参照图5的第三个函数示例,包括:将要写入的第一个字节数据存入通用寄存器;取出存储在开辟的内存空间中的数据,将数据写入目标地址的首地址;地址往后偏移一个字节;调用写入8位指针类型变量数值函数,将第二个字节数据写入偏移后的地址。函数示例中将所述通用寄存器定为a寄存器,但本发明不限定于此,其他通用寄存器也可以实现同样的功能,如b寄存器。
在写入8位指针类型变量数值函数中,调用MOVX指令将数据(32位、24位、16位指针类型变量的最后一个字节数据)写入当前地址。
进一步地,写入8位指针类型变量数值函数中,参照图5的最后一个函数示例,包括执行MOVX指令,将通用寄存器中存储的值写入当前地址。所述通用寄存器不限定于a寄存器。
本实施例通过直接获取到的指令语句中进行写入操作,并通过预设的目标地址确定函数确定进行写入操作的目标地址,基于该目标地址实现指针变量数据的写入。通过将目标地址作为进行写入操作的一个整体概念,将目标地址作为依据完成对目标地址的写入,减少了程序指令及汇编语句的调用,提升了单片机存储空间的利用率,并有效提高了指针变量数据进行写入操作的效率。
此外,本发明实施例还提出一种数据读写装置,参照图10,图10为本发明指针变量读写操作方法实施例方案涉及的数据读写装置的功能模块示意图。如图10所示,所述数据读写装置包括:
指令获取模块10,用于获取待运行的指令语句;
读写类型判断模块20,用于判断所述指令语句的读写操作类型,确定所述指令语句对应的读写操作;
读写操作实现模块30,用于基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入。
本实施例实现指针变量读写操作方法的原理及实施过程,请参照上述各实施例,在此不再赘述。
此外,本发明实施例还提出一种设备,所述设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的数据读写程序,所述数据读写程序被所述处理器执行时实现如上述实施例所述的指针变量读写操作方法的步骤。
此外,为实现上述目的,本发明还提供一种介质,所述介质为计算机可读存储介质,所述计算机可读存储介质上存储有数据读写程序,所述数据读写程序被处理器执行时实现如上所述的指针变量读写操作方法的步骤。
由于本数据读写程序被处理器执行时,采用了前述所有实施例的全部技术方案,因此至少具有前述所有实施例的全部技术方案所带来的所有有益效果,在此不再一一赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品储存在如上所述的一个储存介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书与附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种指针变量读写操作方法,其特征在于,所述指针变量读写操作方法基于C51,包括:
获取待运行的指令语句;
判断所述指令语句的读写操作类型,确定所述指令语句对应的读写操作;
基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入。
2.如权利要求1所述的指针变量读写操作方法,其特征在于,所述判断所述指令语句的读写操作指令,确定所述指令语句对应的读写操作的步骤,包括:
对所述指令语句进行类型判断;
若所述指令语句的读写类型为读取指令语句,则确定对应的读取操作;
若所述指令语句的读写类型为写入指令语句,则确定对应的写入操作。
3.如权利要求2所述的指针变量读写操作方法,其特征在于,所述基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入的步骤,包括:
基于所述读取操作,通过预设的寄存器获取读取操作对应的基地址和地址偏移量;
基于所述基地址和地址偏移量,确定对所述待读取指针变量数据进行读取操作对应的待读取目标地址;
基于所述待读取目标地址,调用对应的读取指针变量数值函数,实现所述待读取指针变量数据的读取。
4.如权利要求2所述的指针变量读写操作方法,其特征在于,所述基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入的步骤,还包括:
基于所述写入操作,通过预设的寄存器获取写入操作对应的基地址和地址偏移量;
基于所述基地址和地址偏移量,获取所述待写入指针变量数据进行写入操作对应的待写入目标地址;
基于所述待写入目标地址,调用对应的写入指针变量数值函数,将所述待写入指针变量数据写入所述待写入目标地址。
5.如权利要求3所述的指针变量读写操作方法,其特征在于,所述基于所述待读取目标地址,调用对应的读取指针变量数值函数,实现所述待读取指针变量数据的读取的步骤,包括:
获取所述待读取目标地址中对应待读取指针变量数据的目标读取长度;
调用获取单字节指针变量数值函数,确定所述待读取目标地址中正读取的预设单字节对应的当前地址;
基于所述预设单字节对应的当前地址,循环调用预设位的指针变量数据读取函数,直到所述目标读取长度对应的待读取指针变量数据完成读取操作。
6.如权利要求4所述的指针变量读写操作方法,其特征在于,所述基于所述待写入目标地址,调用对应的写入指针变量数值函数,将所述待写入指针变量数据写入所述待写入目标地址的步骤,包括:
获取所述待写入指针变量数据的数据源地址;
将所述数据源地址对应的预设位指针变量数据写入对应的预设位待写入目标地址;
基于预设的寄存器循环执行数据源地址与待写入目标地址中待写入指针变量数据的数据传递,直到所述数据源地址中的待写入指针变量数据完成写入操作。
7.如权利要求1-4中任一项所述的目标地址确定函数,其特征在于,所述方法还包括:
通过寻址寄存器dptr获取对应的基地址和地址偏移量;
将所述基地址和所述地址偏移量进行预设的目标地址计算规则,确定对应的目标地址;
将所述基地址、地址偏移量和计算得到对应的目标地址存入预先定义的内存空间。
8.一种数据读写装置,其特征在于,所述数据读写装置包括:
指令获取模块,用于获取待运行的指令语句;
读写类型判断模块,用于判断所述指令语句的读写操作类型,确定所述指令语句对应的读写操作;
读写操作实现模块,用于基于预设的目标地址确定函数,确定所述读写操作对应的目标地址,实现指针变量数据的读取或写入。
9.一种设备,其特征在于,所述设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的数据读写程序,所述数据读写程序被所述处理器执行时实现如权利要求1-7中任一项所述的指针变量读写操作方法。
10.一种介质,所述介质为计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有数据读写程序,所述数据读写程序被处理器执行时实现如权利要求1至7中任一项所述的指针变量读写操作方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210791412.6A CN115328390A (zh) | 2022-07-06 | 2022-07-06 | 基于c51的指针变量读写操作方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210791412.6A CN115328390A (zh) | 2022-07-06 | 2022-07-06 | 基于c51的指针变量读写操作方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115328390A true CN115328390A (zh) | 2022-11-11 |
Family
ID=83916763
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210791412.6A Pending CN115328390A (zh) | 2022-07-06 | 2022-07-06 | 基于c51的指针变量读写操作方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115328390A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117236236A (zh) * | 2023-11-10 | 2023-12-15 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
-
2022
- 2022-07-06 CN CN202210791412.6A patent/CN115328390A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117236236A (zh) * | 2023-11-10 | 2023-12-15 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
CN117236236B (zh) * | 2023-11-10 | 2024-04-16 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100266337B1 (ko) | 정보처리회로,반도체집적회로장치,마이크로컴퓨터,및전자기기 | |
US5682531A (en) | Central processing unit | |
US20070136558A1 (en) | Data access program instruction encoding | |
CN112395093A (zh) | 多线程数据处理方法、装置、电子设备及可读存储介质 | |
CN115328390A (zh) | 基于c51的指针变量读写操作方法、装置、设备及介质 | |
CN116860334A (zh) | 用于计算两个区块操作数中的半字节的数量积的系统和方法 | |
JP2001005675A (ja) | プログラム変換装置及びプロセッサ | |
CN111782270A (zh) | 一种数据处理方法及装置、存储介质 | |
JPH1049369A (ja) | データ処理装置 | |
US6499099B1 (en) | Central processing unit method and apparatus for extending general instructions with extension data of an extension register | |
US7516304B2 (en) | Parsing-enhancement facility | |
CN107851022B (zh) | 向量长度查询指令 | |
US20030046516A1 (en) | Method and apparatus for extending instructions with extension data of an extension register | |
JP2551167B2 (ja) | マイクロコンピュータ | |
CN109324838B (zh) | 单片机程序的执行方法、执行装置及终端 | |
CN107480479B (zh) | 应用程序的加固方法及装置、计算设备、计算机存储介质 | |
JP3570287B2 (ja) | マイクロコンピュータ | |
US20040205701A1 (en) | Computer system, virtual machine, runtime representation of object, storage media and program transmission apparatus | |
CN110308933B (zh) | 访问指令确定方法、装置及存储介质 | |
US20070022271A1 (en) | Processor with changeable correspondences between opcodes and instructions | |
CN112463327B (zh) | 逻辑线程快速切换的方法、装置、cpu芯片及服务器 | |
CN112346780B (zh) | 一种信息处理方法、装置和存储介质 | |
JP2000112754A (ja) | データ処理装置 | |
CN109710310B (zh) | 用于嵌入式环境的数据处理方法、系统、终端及存储介质 | |
CN107193757B (zh) | 数据预取方法、处理器和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |