CN102508632B - 一种在嵌入式系统中实现乘法运算的方法和装置 - Google Patents
一种在嵌入式系统中实现乘法运算的方法和装置 Download PDFInfo
- Publication number
- CN102508632B CN102508632B CN201110302024.9A CN201110302024A CN102508632B CN 102508632 B CN102508632 B CN 102508632B CN 201110302024 A CN201110302024 A CN 201110302024A CN 102508632 B CN102508632 B CN 102508632B
- Authority
- CN
- China
- Prior art keywords
- data
- bit
- parameter
- pending data
- place
- 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.)
- Active
Links
Abstract
本发明公开了一种在嵌入式系统中实现乘法运算的方法和装置,涉及密码学领域。解决了现有技术执行乘法运算的运算速度比较低的问题。所述方法包括:(1)获取第一待处理数据和第二待处理数据;(2)判断比特位位数之和是否大于运算装置支持的比特位位数;(3)生成第三待处理数据,生成第四待处理数据;(4)生成第一参数;(5)将最低位对齐;(6)将第三待处理数据进行划分;(7)生成第二参数,并生成第三参数;(8)得到第一数据;(9)得到第二数据;(10)得到第三数据;(11)替换当前迭代数据;(12)判断当前偏移单元是否为最后一个单元;(13)将偏移单元指向下一个单元,返回(8);(14)判断当前迭代数据是否小于第一参数;(15)将当前迭代数据自减第一参数;(16)存储或输出当前迭代数据。
Description
技术领域
本发明涉及密码学领域,尤其涉及一种在嵌入式系统中实现乘法运算的方法和装置。
背景技术
许多已知的计算机算法都需要进行乘法运算,如公钥加密等算法。现有技术中可以通过中央处理器(Central Processing Unit,CPU)实现乘法运算。但是当乘法运算中的数据为大数时,CPU执行乘法运算时的运算速度比较低。
发明内容
本发明的实施例提供一种在嵌入式系统中实现乘法运算的方法和装置,能够提高乘法运算的运算速度。
一方面,提供一种在嵌入式系统中实现乘法运算的方法,包括:
(1).接收到乘法运算指令时,获取所述乘法运算指令中第一待处理数据和第二待处理数据;
(2).判断所述第一待处理数据的比特位位数与所述第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数;
如果是,返回错误信息;如果否,执行(3);
(3).对所述第一待处理数据进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第三待处理数据,对所述第二待处理数据的进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第四待处理数据;
(4).根据所述运算装置支持的比特位位数生成第一参数;
(5).将所述第三待处理数据的最低位、所述第四待处理数据的最低位分别与所述第一参数的最低位对齐;
(6).将所述第三待处理数据按预设位长由最低位到最高位进行划分;
(7).根据所述预设位长对应的比特位位数生成第二参数,并根据所述第一参数和所述第二参数生成第三参数;
(8).将当前偏移单元中的数据和所述第四待处理数据的乘积与当前迭代数据相加,得到第一数据;
偏移单元的初始单元为对所述第三待处理数据进行划分得到的第一个单元,迭代数据的初始值为0;
(9).将所述第二参数作为模数,对所述第一数据与所述第三参数进行模乘运算,得到第二数据;
(10).将所述第一参数和所述第二数据的乘积与所述第一数据进行加法运算,得到第三数据;
(11).将所述第三数据右移所述预设位长,并将移位后得到的数据替换当前迭代数据;
(12).判断当前偏移单元是否为最后一个单元;
如果是,执行(14);如果否,执行(13);
(13).将偏移单元指向当前偏移单元的下一个单元,返回(8);
(14).判断当前迭代数据是否小于所述第一参数;
如果是,执行(16);如果否,执行(15);
(15).将当前迭代数据自减所述第一参数;
(16).存储或输出指示所述第一待处理数据与所述第二待处理数据乘积的当前迭代数据。
其中,所述对所述第一待处理数据进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第三待处理数据,对所述第二待处理数据的进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第四待处理数据,包括:
在所述第一待处理数据的最高位前补零生成第三待处理数据,在所述第二待处理数据的最高位前补零生成第四待处理数据,所述第三待处理数据与所述第四待处理数据的比特位位数与所述运算装置支持的比特位位数相同。
其中,所述根据所述运算装置支持的比特位位数生成第一参数,包括:
生成各个比特位均置1的第一参数,所述第一参数的比特位位数与所述运算装置支持的比特位位数相同。
其中,所述预设位长对应的比特位位数,具体为:
能整除所述运算装置支持的比特位位数的整数。
其中,所述根据所述预设位长对应的比特位位数生成第二参数,包括:
以2为底数,以所述预设位长对应的比特位位数为幂数生成所述第二参数。
其中,所述根据所述第一参数和所述第二参数生成第三参数,包括:
生成所述第二参数的值减去所述第一参数关于所述第二参数的乘法逆元的差值;
生成值与所述差值相同的第三参数。另一方面,提供一种在嵌入式系统中实现乘法运算的装置,包括:
待处理数据获取模块,用于接收到乘法运算指令时,获取所述乘法运算指令中第一待处理数据和第二待处理数据;
第一判断模块,用于判断所述第一待处理数据的比特位位数与所述第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数;
所述补位模块,用于在所述第一判断模块判断结果为是时对所述第一待处理数据进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第三待处理数据,对所述第二待处理数据的进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第四待处理数据;
第一参数生成模块,用于根据所述运算装置支持的比特位位数生成第一参数;
对齐模块,用于将所述第三待处理数据的最低位、所述第四待处理数据的最低位分别与所述第一参数的最低位对齐;
划分模块,用于将所述第三待处理数据按预设位长由最低位到最高位进行划分;
第二参数生成模块,用于根据所述预设位长对应的比特位位数生成第二参数,并根据所述第一参数和所述第二参数生成第三参数;
第一数据生成模块,用于将当前偏移单元中的数据和所述第四待处理数据的乘积与当前迭代数据相加,得到第一数据;
所述偏移单元的初始单元为所述第一单元,所述迭代数据的初始值为0;
第二数据生成模块,用于将所述第二参数作为模数,对所述第一数据与所述第三参数进行模乘运算,得到第二数据;
第三数据处理模块,用于将所述第一参数和所述第二数据的乘积与所述第一数据进行加法运算,得到第三数据;
数据替换模块,用于将所述第三数据右移所述预设位长后得到的数据替换当前迭代数据;
第二判断模块,用于判断当前偏移单元是否为最后一个单元;
所述移位模块,用于在所述第二判断模块判断结果为否时将偏移单元指向当前偏移单元的下一个单元,返回第一数据生成模块;
所述第三判断模块,用于在所述第二判断模块判断结果为是时判断当前迭代数据是否小于所述第一参数;
所述自减模块,用于在所述第三判断模块判断结果为否时将当前迭代数据自减所述第一参数;
所述输出模块,用于在所述第三判断模块判断结果为是时存储或输出指示所述第一待处理数据与所述第二待处理数据乘积的当前迭代数据。
其中,所述补位模块,包括:
补位子模块,用于在所述第一待处理数据的最高位前补零生成第三待处理数据,在所述第二待处理数据的最高位前补零生成第四待处理数据,所述第三待处理数据与所述第四待处理数据的比特位位数与所述运算装置支持的比特位位数相同。
其中,所述第一参数生成模块,包括:
第一生成子模块,用于生成各个比特位均置1的第一参数,所述第一参数的比特位位数与所述运算装置支持的比特位位数相同。
其中,所述预设位长对应的比特位位数,具体为:
能整除所述运算装置支持的比特位位数的整数。
其中,所述第二参数生成模块,包括:
第二生成子模块,以2为底数,以所述预设位长对应的比特位位数为幂数生成第二参数的值。
其中,所述第二参数生成模块,包括:
第三生成子模块,用于生成所述第二参数的值减去所述第一参数关于所述第二参数的乘法逆元的差值;
第四生成子模块,用于生成值与所述差值相同的第三参数。
本发明实施例提供的在嵌入式系统中实现乘法运算的方法和装置,在乘法运算指令中第一待处理数据比特位位数和第二待处理数据的比特位位数之和小于运算装置支持的比特位位数时,可以首先将该第一待处理数据和第二待处理数据进行补位,得到第三待处理数据和第四待处理数据;然后在第三待处理数据的最低位、第四待处理数据的最低位分别与第一参数的最低位对齐时,将第三待处理数据按预设位长进行划分,并分别生成第一参数、第二参数和第三参数;最后通过该第一参数、第二参数和第三参数对当前偏移单元中的数据和第四待处理数据进行处理,直到当前偏移单元为最后一个单元时,根据当前迭代数据与第一参数的大小关系,对当前迭代数据进行处理,得到指示第一待处理数据和第二待处理数据乘积的当前迭代数据。本发明实施例提供的技术方案,由于通过模乘算法实现相乘的运算,使得乘法运算的速度得到提高,解决了现有技术中CPU执行乘法运算时的运算速度比较低的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种在嵌入式系统中实现乘法运算的方法的流程图;
图2为本发明实施例二提供的另一种在嵌入式系统中实现乘法运算的方法的流程图;
图3为本发明实施例三提供的在一种嵌入式系统中实现乘法运算的装置的结构示意图;
图4为图3所示的在嵌入式系统中实现乘法运算的装置中补位模块的结构示意图;
图5为图3所示的在嵌入式系统中实现乘法运算的装置中第一参数生成模块的结构示意图;
图6为图3所示的在嵌入式系统中实现乘法运算的装置中第二参数生成模块的结构示意图一;
图7为图3所示的在嵌入式系统中实现乘法运算的装置中第二参数生成模块的结构示意图二。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决现有技术执行乘法运算的运算速度比较低的问题,本发明实施例提供了一种在嵌入式系统中实现乘法运算的方法和装置。
如图1所示,本发明实施例一提供的一种在嵌入式系统中实现乘法运算的方法,包括:
步骤101,接收到乘法运算指令时,获取该乘法运算指令中第一待处理数据和第二待处理数据。
在本实施例中,步骤101中乘法运算指令可以为计算该第一待处理数据和第二待处理数据乘积的指令。具体的,该第一待处理数据和第二待处理数据可以均为大数,可以为其他数据,在此不作限制。
步骤102,判断该第一待处理数据的比特位位数和第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数,是则执行步骤103,否则执行步骤104。
在本实施例中,由于运算装置的配置决定其允许支持的比特位位数;而当第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,可能产生运算错误;因此在进行乘法运算之前,需要首先通过步骤102判断第一待处理数据的比特位位数和第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数。
在本实施例中,当通过步骤102确定第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,可以通过步骤103返回错误信息;当通过步骤102确定第一待处理数据的比特位位数和第二待处理数据的比特位位数之和不大于运算装置支持的比特位位数时,可以通过步骤104对第一待处理数据和第二待处理数据分别进行补位。
步骤103,返回错误信息。
在本实施例中,由于当第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,对第一待处理数据和第二待处理数据进行乘法运算的过程中可能产生运算错误,因此当第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,可以通过步骤103返回错误信息。
步骤104,对第一待处理数据进行补位,生成比特位位数与运算装置支持的比特位位数相同的第三待处理数据,对第二待处理数据进行补位,生成比特位位数与运算装置支持的比特位位数相同的第四待处理数据。
在本实施例中,步骤104中对第一待处理数据进行补位可以为:在该第一待处理数据的最高位前补零生成第三待处理数据;也可以为通过其他方式对第一待处理数据进行补位,在此不再一一赘述。其中,第三待处理数据的比特位位数和运算装置支持的比特位位数相同。
在本实施例中,步骤104中对第二代处理数据进行补位可以为:在该第二待处理数据的最高位前补零生成第四待处理数据;也可以为通过其他方式对第二待处理数据进行补位,在此不再一一赘述。其中,第四待处理数据的比特位位数与运算装置支持的比特位位数相同。
步骤105,根据运算装置支持的比特位位数生成第一参数。
在本实施例中,步骤105中根据运算装置支持的比特位位数生成第一参数可以为:生成各个比特位均置1的第一参数,该第一参数的比特位位数与运算装置支持的比特位位数相同;也可以通过其他方式根据运算装置支持的比特位位数生成第一参数,在此不再一一赘述。
步骤106,将第三待处理数据的最低位、第四待处理数据的最低位分别与第一参数的最低位对齐。
步骤107,由最低位到最高位,将第三待处理数据按预设位长进行划分,依次得到第一单元、第二单元......。
在本实施例中,步骤107中预设位长对应的比特位位数可以为:能整除运算装置支持的比特位位数的整数;也可以为其他整数,在此不再一一赘述。
步骤108,根据该预设位长对应的比特位位数生成第二参数,并根据第一参数和第二参数生成第三参数。
在本实施例中,通过步骤108根据该预设位长对应的比特位位数生成的第二参数可以为:以2为底数,以预设位长对应的比特位位数为幂数生成第二参数的值;也可以通过其他方式根据预设位长对应的比特位位数生成第二参数,在此不再一一赘述。
在本实施例中,通过步骤108根据第一参数和第二参数生成第三参数,可以包括:首先生成第二参数的值减去第一参数关于第二参数的乘法逆元的差值;然后生成值与该差值相同的第三参数。也可以通过其他方式根据第一参数和第二参数生成第三参数,在此不再一一赘述。
步骤109,将当前偏移单元中的数据和第四待处理数据的乘积与当前迭代数据相加,得到第一数据。
在本实施例中,偏移单元的初始单元为第一单元,迭代数据的初始值为0。
步骤110,将第二参数作为模数,对第一数据与第三参数进行模乘运算,得到第二数据。
步骤111,将第一参数和第二数据的乘积与第一数据进行加法运算,得到第三数据。
步骤112,将第三数据右移预设位长,并用移位后得到的数据替换当前迭代数据。
步骤113,判断当前偏移单元是否为最后一个单元,是则实行步骤115,否则执行步骤114。
在本实施例中,通过步骤113确定当前偏移单元不为最后一个单元时,可以通过步骤114将偏移单元指向当前偏移单元的下一个单元;通过步骤113确定当前偏移单元为最后一个单元时,可以通过步骤115判断当前迭代数据是否小于第一参数。
步骤114,将偏移单元指向当前偏移单元的下一个单元,返回步骤109。
步骤115,判断当前迭代数据是否小于第一参数,是则执行步骤117,否则执行步骤116。
在本实施例中,在本实施例中,通过步骤115确定当前迭代数据小于第一参数时,可以通过步骤117直接存储或输出当前迭代数据;通过步骤115确定当前迭代数据不小于第一参数时,可以通过步骤116对当前迭代数据进行处理。
步骤116,将当前迭代数据自减第一参数,顺序执行步骤117。
步骤117,存储或输出指示第一待处理数据与第二待处理数据乘积的当前迭代数据。
本发明实施例提供的在嵌入式系统中实现乘法运算的方法,在乘法运算指令中第一待处理数据比特位位数和第二待处理数据的比特位位数之和小于运算装置支持的比特位位数时,可以首先将该第一待处理数据和第二待处理数据进行补位,得到第三待处理数据和第四待处理数据;然后在第三待处理数据的最低位、第四待处理数据的最低位分别与第一参数的最低位对齐时,将第三待处理数据按预设位长进行划分,并分别生成第一参数、第二参数和第三参数;最后通过该第一参数、第二参数和第三参数对当前偏移单元中的数据和第四待处理数据进行处理,直到当前偏移单元为最后一个单元时,根据当前迭代数据与第一参数的大小关系,对当前迭代数据进行处理,得到指示第一待处理数据和第二待处理数据乘积的当前迭代数据。本发明实施例提供的技术方案,由于通过模乘算法实现相乘的运算,使得乘法运算的速度得到提高,解决了现有技术中CPU执行乘法运算时的运算速度比较低的问题。
如图2所示,本发明实施例二提供的另一种在嵌入式系统中实现乘法运算的方法,包括:
步骤201,接收到乘法运算指令时,获取该乘法运算指令中第一待处理数据和第二待处理数据。
在本实施例中,步骤201中乘法运算指令可以为计算该第一待处理数据和第二待处理数据乘积的指令。具体的,该第一待处理数据和第二待处理数据可以均为大数,可以为其他数据,在此不作限制。
在本实施例中,以下以第一待处理数据为十六进制数B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4,第二待处理数据为十六进制数B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21为例进行说明。
步骤202,判断该第一待处理数据的比特位位数和第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数,是则执行步骤203,否则执行步骤204。
在本实施例中,由于运算装置的配置决定其允许支持的比特位位数;而当第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,可能产生运算错误;因此在进行乘法运算之前,需要首先通过步骤202判断第一待处理数据的比特位位数和第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数。
在本实施例中,当通过步骤202确定第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,可以通过步骤203返回错误信息;当通过步骤202确定第一待处理数据的比特位位数和第二待处理数据的比特位位数之和不大于运算装置支持的比特位位数时,可以通过步骤204对第一待处理数据和第二待处理数据分别进行补位。
在本实施例中,以运算装置支持的比特位位数为512为例。通过步骤101可知,第一待处理数据和第二待处理数据均为224比特,因此第一待处理数据的比特位位数和第二待处理数据的比特位位数之和为448,小于运算装置支持的比特位位数。
步骤203,返回错误信息。
在本实施例中,由于当第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,对第一待处理数据和第二待处理数据进行乘法运算的过程中可能产生运算错误,因此当第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,可以通过步骤203返回错误信息。
步骤204,在该第一待处理数据的最高位前补零生成第三待处理数据,在该第二待处理数据的最高位前补零生成第四待处理数据。
在本实施例中,第三待处理数据与第四待处理数据的比特位位数与运算装置支持的比特位位数相同。
相应地,在本实施例中,通过步骤204在第一待处理数据的最高位前补零生成的第三待处理数据为十六进制数000000000000000000000000000000000000000000000000000000000000000000000000B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4。
在本实施例中,通过步骤204在第二待处理数据的最高位前补零生成的第四待处理数据为十六进制数000000000000000000000000000000000000000000000000000000000000000000000000B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21。
步骤205,生成各个比特位均置1的第一参数。
在本实施例中,步骤205中第一参数的比特位位数与运算装置支持的比特位位数相同。
在本实施例中,运算装置支持的比特位位数为512时,步骤205中第一参数为十六进制数FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF。
步骤206,将第三待处理数据的最低位、第四待处理数据的最低位分别与第一参数的最低位对齐。
步骤207,由最低位到最高位,将第三待处理数据按预设位长进行划分,依次得到第一单元、第二单元......。
在本实施例中,步骤207中预设位长对应的比特位位数可以为:能整除运算装置支持的比特位位数的整数;也可以为其他整数,在此不再一一赘述。
在本实施例中,步骤207中预设位长对应的比特位位数以32为例进行说明。通过步骤207将第三代处理数据按预设位长进行划分,得到16个单元,每个单元中包含的数据为一个,得到的各个单元中的数据分别为00000000、00000000、00000000、00000000、00000000、00000000、00000000、00000000、00000000、B4050A85、0C04B3AB、F5413256、5044B0B7、D7BFD8BA、270B3943、2355FFB4。其中,2355FFB4为第一单元包含的中的数据。
步骤208,根据该预设位长对应的比特位位数生成第二参数,并根据第一参数和第二参数生成第三参数。
在本实施例中,通过步骤208根据该预设位长对应的比特位位数生成的第二参数可以为:以2为底数,以预设位长对应的比特位位数为幂数生成第二参数的值;也可以通过其他方式根据预设位长对应的比特位位数生成第二参数,在此不再一一赘述。在本实施例中,相应地,第二参数的值为2的32次幂,即为十六进制数100000000。
在本实施例中,通过步骤208根据第一参数和第二参数生成第三参数,可以包括:首先生成第二参数的值减去第一参数关于第二参数的乘法逆元得到的差值;然后生成值与该差值相同的第三参数。也可以通过其他方式根据第一参数和第二参数生成第三参数,在此不再一一赘述。相应地,在本实施例中,第三参数的值为1。
步骤209,将当前偏移单元中的数据和第四待处理数据的乘积与当前迭代数据相加,得到第一数据。
在本实施例中,步骤209中当前偏移单元中的数据为当前偏移单元包含的数据,其中,偏移单元的初始单元为第一单元,迭代数据的初始值为0。
步骤210,将第二参数作为模数,对第一数据与第三参数进行模乘运算,得到第二数据。
步骤211,将第一参数和当前第二数据的乘积与第一数据进行加法运算,得到第三数据。
步骤212,用第三数据右移预设位长,并用第三数据右移预设位长得到的数据替换当前迭代数据。
步骤213,判断当前偏移单元是否为最后一个单元,是则执行步骤214,否则执行步骤214。
在本实施例中,通过步骤213确定当前偏移单元不为最后一个单元时,可以通过步骤214将偏移单元指向当前偏移单元的下一个单元;通过步骤213确定当前偏移单元为最后一个单元时,可以通过步骤215判断当前迭代数据是否小于第一参数。
在本实施例中,具体的,步骤213中最后一个单元为第十六单元。
步骤214,将偏移单元指向当前偏移单元的下一个单元,返回步骤209。
步骤215,判断当前迭代数据是否小于第一参数,是则执行步骤217,否则执行步骤216。
在本实施例中,在本实施例中,通过步骤215确定当前迭代数据小于第一参数时,可以通过步骤217直接存储或输出当前迭代数据;通过步骤215确定当前迭代数据不小于第一参数时,可以通过步骤216对当前迭代数据进行处理。
步骤216,将当前迭代数据自减第一参数,顺序执行步骤217。
步骤217,存储或输出指示第一待处理数据与第二待处理数据乘积的当前迭代数据。
在本实施例中,通过上述计算过程,存储或输出的指示第一待处理数据与第二待处理数据乘积的当前迭代数据具体为:80B97BC11ED23B160DC05E9226392D7C97ABAF222EF0D0A74E131B6C1FF0DD2A5EB8FCD20EC90DB9211A392082E285B0624E260324BD5A34。
本发明实施例提供的在嵌入式系统中实现乘法运算的方法,在乘法运算指令中第一待处理数据比特位位数和第二待处理数据的比特位位数之和小于运算装置支持的比特位位数时,可以首先将该第一待处理数据和第二待处理数据进行补位,得到第三待处理数据和第四待处理数据;然后在第三待处理数据的最低位、第四待处理数据的最低位分别与第一参数的最低位对齐时,将第三待处理数据按预设位长进行划分,并分别生成第一参数、第二参数和第三参数;最后通过该第一参数、第二参数和第三参数对当前偏移单元中的数据和第四待处理数据进行处理,直到当前偏移单元为最后一个单元时,根据当前迭代数据与第一参数的大小关系,对当前迭代数据进行处理,得到指示第一待处理数据和第二待处理数据乘积的当前迭代数据。本发明实施例提供的技术方案,由于通过模乘算法实现相乘的运算,使得乘法运算的速度得到提高,解决了现有技术中CPU执行乘法运算时的运算速度比较低的问题。
如图3所示,本发明实施例三提供的一种在嵌入式系统中实现乘法运算的装置,包括:
待处理数据获取模块301,用于接收到乘法运算指令时,获取乘法运算指令中第一待处理数据和第二待处理数据。
在本实施例中,待处理数据获取模块301中乘法运算指令可以为计算该第一待处理数据和第二待处理数据乘积的指令。具体的,该第一待处理数据和第二待处理数据可以均为大数,可以为其他数据,在此不作限制。
第一判断模块302,用于判断第一待处理数据的比特位位数与第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数。
在本实施例中,由于运算装置的配置决定其允许支持的比特位位数;而当第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,可能产生运算错误;因此在进行乘法运算之前,需要首先通过第一判断模块302判断第一待处理数据的比特位位数和第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数。
在本实施例中,当通过第一判断模块302确定第一待处理数据的比特位位数和第二待处理数据的比特位位数之和大于运算装置支持的比特位位数时,可以返回错误信息;当通过第一判断模块302确定第一待处理数据的比特位位数和第二待处理数据的比特位位数之和不大于运算装置支持的比特位位数时,可以通过补位模块303对第一待处理数据和第二待处理数据分别进行补位。
补位模块303,用于对第一待处理数据进行补位,生成比特位位数与运算装置支持的比特位位数相同的第三待处理数据,对第二待处理数据的进行补位,生成比特位位数与运算装置支持的比特位位数相同的第四待处理数据。
在本实施例中,补位模块303中对第一待处理数据进行补位可以为:在该第一待处理数据的最高位前补零生成第三待处理数据;也可以为通过其他方式对第一待处理数据进行补位,在此不再一一赘述。其中,第三待处理数据的比特位位数和运算装置支持的比特位位数相同。
在本实施例中,补位模块303中对第二代处理数据进行补位可以为:在该第二待处理数据的最高位前补零生成第四待处理数据;也可以为通过其他方式对第二待处理数据进行补位,在此不再一一赘述。其中,第四待处理数据的比特位位数与运算装置支持的比特位位数相同。
第一参数生成模块304,用于根据运算装置支持的比特位位数生成第一参数。
在本实施例中,第一参数生成模块304中根据运算装置支持的比特位位数生成第一参数可以为:生成各个比特位均置1的第一参数,该第一参数的比特位位数与运算装置支持的比特位位数相同;也可以通过其他方式根据运算装置支持的比特位位数生成第一参数,在此不再一一赘述。
对齐模块305,用于将第三待处理数据的最低位、第四待处理数据的最低位分别与第一参数的最低位对齐。
划分模块306,用于由最低位到最高位,将第三待处理数据按预设位长进行划分,依次得到第一单元、第二单元......。
在本实施例中,划分模块306中预设位长对应的比特位位数可以为:能整除运算装置支持的比特位位数的整数;也可以为其他整数,在此不再一一赘述。
第二参数生成模块307,用于根据预设位长对应的比特位位数生成第二参数,并根据第一参数和第二参数生成第三参数。
在本实施例中,通过第二参数生成模块307根据该预设位长对应的比特位位数生成的第二参数可以为:以2为底数,以预设位长对应的比特位位数为幂数生成第二参数的值;也可以通过其他方式根据预设位长对应的比特位位数生成第二参数,在此不再一一赘述。
在本实施例中,通过第二参数生成模块307根据第一参数和第二参数生成第三参数,包括:用第二参数的值减去第一参数关于第二参数的乘法逆元得到的差值;该差值为第三参数的值。也可以通过其他方式根据第一参数和第二参数生成第三参数,在此不再一一赘述。
第一数据生成模块308,用于将当前偏移单元中的数据和第四待处理数据的乘积与当前迭代数据相加,得到第一数据。
在本实施例中,第一数据生成模块308中偏移单元的初始单元为第一单元,迭代数据的初始值为0。
第二数据生成模块309,用于将第二参数作为模数,对所述第一数据与第三参数进行模乘运算,得到第二数据。
第三数据处理模块310,用于将第一参数和当前第二数据的乘积与第一数据进行加法运算,得到第三数据。
数据替换模块311,用于用第三数据右移预设位长后得到的数据替换当前迭代数据。
第二判断模块312,用于判断当前偏移单元是否为最后一个单元。
在本实施例中,通过第二判断模块312确定当前偏移单元不为最后一个单元时,可以通过移位模块313将偏移单元指向当前偏移单元的下一个单元;通过第二判断模块312确定当前偏移单元为最后一个单元时,可以通过第三判断模块314判断当前迭代数据是否小于第一参数。
移位模块313,用于将偏移单元指向当前偏移单元的下一个单元,返回第一数据生成模块308。
第三判断模块314,用于判断当前迭代数据是否小于第一参数。
在本实施例中,在本实施例中,通过第三判断模块314确定当前迭代数据小于第一参数时,可以通过输出模块316直接存储或输出当前迭代数据;通过第三判断模块314确定当前迭代数据不小于第一参数时,可以通过自减模块315对当前迭代数据进行处理。
自减模块315,用于将当前迭代数据自减第一参数。
输出模块316,用于存储或输出指示第一待处理数据与第二待处理数据乘积的当前迭代数据。
进一步的,如图4所示,本实施例中补位模块303,包括:
补位子模块3031,用于在第一待处理数据的最高位前补零生成第三待处理数据,在第二待处理数据的最高位前补零生成第四待处理数据,第三待处理数据与第四待处理数据的比特位位数与运算装置支持的比特位位数相同。
进一步的,如图5所示,本实施例中,第一参数生成模块304,包括:
第一生成子模块3041,用于生成各个比特位均置1的第一参数,第一参数的比特位位数与运算装置支持的比特位位数相同。
进一步的,如图6所示,在本实施例中,第二参数生成模块307,包括:
第二生成子模块3071,用于用以2为底数,以预设位长对应的比特位位数为幂数的生成第二参数的值。
如图7所示,该第二参数生成模块307,还可以包括:
第三生成子模块3072,用于生成第二参数的值减去第一参数关于第二参数的乘法逆元的差值;
第四生成子模块3073,用于生成值与差值相同的第三参数。
本发明实施例提供的在嵌入式系统中实现乘法运算的装置,在乘法运算指令中第一待处理数据比特位位数和第二待处理数据的比特位位数之和小于运算装置支持的比特位位数时,可以首先将该第一待处理数据和第二待处理数据进行补位,得到第三待处理数据和第四待处理数据;然后在第三待处理数据的最低位、第四待处理数据的最低位分别与第一参数的最低位对齐时,将第三待处理数据按预设位长进行划分,并分别生成第一参数、第二参数和第三参数;最后通过该第一参数、第二参数和第三参数对当前偏移单元中的数据和第四待处理数据进行处理,直到当前偏移单元为最后一个单元时,根据当前迭代数据与第一参数的大小关系,对当前迭代数据进行处理,得到指示第一待处理数据和第二待处理数据乘积的当前迭代数据。本发明实施例提供的技术方案,由于通过模乘算法实现相乘的运算,使得乘法运算的速度得到提高,解决了现有技术中CPU执行乘法运算时的运算速度比较低的问题。
本发明实施例提供的在嵌入式系统中实现乘法运算的方法和装置,可以应用在嵌入式系统中。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (6)
1.一种在嵌入式系统中实现乘法运算的方法,其特征在于,包括:
⑴.接收到乘法运算指令时,获取所述乘法运算指令中第一待处理数据和第二待处理数据;
⑵.判断所述第一待处理数据的比特位位数与所述第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数;
如果是,返回错误信息;如果否,执行⑶;
⑶.对所述第一待处理数据进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第三待处理数据,对所述第二待处理数据的进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第四待处理数据;
⑷.生成各个比特位均置1的第一参数,所述第一参数的比特位位数与所述运算装置支持的比特位位数相同;
⑸.将所述第三待处理数据的最低位、所述第四待处理数据的最低位分别与所述第一参数的最低位对齐;
⑹.将所述第三待处理数据按预设位长由最低位到最高位进行划分;
⑺.以2为底数,以所述预设位长对应的比特位位数为幂数生成第二参数,生成所述第二参数的值减去所述第一参数关于所述第二参数的乘法逆元的差值,生成值与所述差值相同的第三参数;
⑻.将当前偏移单元中的数据和所述第四待处理数据的乘积与当前迭代数据相加,得到第一数据;
偏移单元的初始单元为对所述第三待处理数据进行划分得到的第一个单元,迭代数据的初始值为0;
⑼.将所述第二参数作为模数,对所述第一数据与所述第三参数进行模乘运算,得到第二数据;
⑽.将所述第一参数和所述第二数据的乘积与所述第一数据进行加法运算,得到第三数据;
⑾.将所述第三数据右移所述预设位长,并将移位后得到的数据替换当前迭代数据;
⑿.判断当前偏移单元是否为最后一个单元;
如果是,执行⒁;如果否,执行⒀;
⒀.将偏移单元指向当前偏移单元的下一个单元,返回⑻;
⒁.判断当前迭代数据是否小于所述第一参数;
如果是,执行⒃;如果否,执行⒂;
⒂.将当前迭代数据自减所述第一参数;
⒃.存储或输出指示所述第一待处理数据与所述第二待处理数据乘积的当前迭代数据。
2.根据权利要求1所述的在嵌入式系统中实现乘法运算的方法,其特征在于,所述对所述第一待处理数据进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第三待处理数据,对所述第二待处理数据的进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第四待处理数据,包括:
在所述第一待处理数据的最高位前补零生成第三待处理数据,在所述第二待处理数据的最高位前补零生成第四待处理数据,所述第三待处理数据与所述第四待处理数据的比特位位数与所述运算装置支持的比特位位数相同。
3.根据权利要求1所述的在嵌入式系统中实现乘法运算的方法,其特征在于,所述预设位长对应的比特位位数,具体为:
能整除所述运算装置支持的比特位位数的整数。
4.一种在嵌入式系统中实现乘法运算的装置,其特征在于,包括:
待处理数据获取模块,用于接收到乘法运算指令时,获取所述乘法运算指令中第一待处理数据和第二待处理数据;
第一判断模块,用于判断所述第一待处理数据的比特位位数与所述第二待处理数据的比特位位数之和是否大于运算装置支持的比特位位数;
补位模块,用于在所述第一判断模块判断结果为否时对所述第一待处理数据进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第三待处理数据,对所述第二待处理数据的进行补位,生成比特位位数与所述运算装置支持的比特位位数相同的第四待处理数据;
第一参数生成模块,用于生成各个比特位均置1的第一参数,所述第一参数的比特位位数与所述运算装置支持的比特位位数相同;
对齐模块,用于将所述第三待处理数据的最低位、所述第四待处理数据的最低位分别与所述第一参数的最低位对齐;
划分模块,用于将所述第三待处理数据按预设位长由最低位到最高位进行划分;
第二参数生成模块,用于以2为底数,以所述预设位长对应的比特位位数为幂数生成第二参数,生成所述第二参数的值减去所述第一参数关于所述第二参数的乘法逆元的差值,生成值与所述差值相同的第三参数;
第一数据生成模块,用于将当前偏移单元中的数据和所述第四待处理数据的乘积与当前迭代数据相加,得到第一数据;
所述偏移单元的初始单元为第一单元,所述迭代数据的初始值为0;
第二数据生成模块,用于将所述第二参数作为模数,对所述第一数据与所述第三参数进行模乘运算,得到第二数据;
第三数据处理模块,用于将所述第一参数和所述第二数据的乘积与所述第一数据进行加法运算,得到第三数据;
数据替换模块,用于将所述第三数据右移所述预设位长后得到的数据替换当前迭代数据;
第二判断模块,用于判断当前偏移单元是否为最后一个单元;
移位模块,用于在所述第二判断模块判断结果为否时将偏移单元指向当前偏移单元的下一个单元,返回第一数据生成模块;
第三判断模块,用于在所述第二判断模块判断结果为是时判断当前迭代数据是否小于所述第一参数;
自减模块,用于在所述第三判断模块判断结果为否时将当前迭代数据自减所述第一参数;
输出模块,用于在所述第三判断模块判断结果为是时存储或输出指示所述第一待处理数据与所述第二待处理数据乘积的当前迭代数据。
5.根据权利要求4所述的实现乘法运算的装置,其特征在于,所述补位模块,包括:
补位子模块,用于在所述第一待处理数据的最高位前补零生成第三待处理数据,在所述第二待处理数据的最高位前补零生成第四待处理数据,所述第三待处理数据与所述第四待处理数据的比特位位数与所述运算装置支持的比特位位数相同。
6.根据权利要求4所述的实现乘法运算的装置,其特征在于,所述预设位长对应的比特位位数,具体为:
能整除所述运算装置支持的比特位位数的整数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110302024.9A CN102508632B (zh) | 2011-09-30 | 2011-09-30 | 一种在嵌入式系统中实现乘法运算的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110302024.9A CN102508632B (zh) | 2011-09-30 | 2011-09-30 | 一种在嵌入式系统中实现乘法运算的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102508632A CN102508632A (zh) | 2012-06-20 |
CN102508632B true CN102508632B (zh) | 2014-10-29 |
Family
ID=46220726
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110302024.9A Active CN102508632B (zh) | 2011-09-30 | 2011-09-30 | 一种在嵌入式系统中实现乘法运算的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102508632B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103092688B (zh) * | 2012-12-28 | 2015-11-18 | 飞天诚信科技股份有限公司 | 一种在嵌入式系统中生成坐标点的方法 |
CN109819674B (zh) * | 2017-09-21 | 2022-04-26 | 深圳市汇顶科技股份有限公司 | 计算机存储介质、嵌入式调度方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN2566363Y (zh) * | 2002-07-31 | 2003-08-13 | 清华大学 | Vlsi用的智能卡模乘器结构 |
CN1570848A (zh) * | 2003-04-25 | 2005-01-26 | 三星电子株式会社 | 使用进位存储加法的蒙哥马利模乘器及其方法 |
CN101216754A (zh) * | 2007-12-27 | 2008-07-09 | 广州杰赛科技股份有限公司 | 模乘运算的处理方法、数据加解密处理的方法、装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0227793D0 (en) * | 2002-11-29 | 2003-01-08 | Koninkl Philips Electronics Nv | Multiplier with look up tables |
-
2011
- 2011-09-30 CN CN201110302024.9A patent/CN102508632B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN2566363Y (zh) * | 2002-07-31 | 2003-08-13 | 清华大学 | Vlsi用的智能卡模乘器结构 |
CN1570848A (zh) * | 2003-04-25 | 2005-01-26 | 三星电子株式会社 | 使用进位存储加法的蒙哥马利模乘器及其方法 |
CN101216754A (zh) * | 2007-12-27 | 2008-07-09 | 广州杰赛科技股份有限公司 | 模乘运算的处理方法、数据加解密处理的方法、装置 |
Non-Patent Citations (2)
Title |
---|
方湘艳等.模乘算法的快速移位实现方法.《武汉理工大学学报》.2009,第31卷(第23期),108-112. |
模乘算法的快速移位实现方法;方湘艳等;《武汉理工大学学报》;20091215;第31卷(第23期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN102508632A (zh) | 2012-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5982900A (en) | Circuit and system for modulo exponentiation arithmetic and arithmetic method of performing modulo exponentiation arithmetic | |
CA2741698C (en) | Method and apparatus for modulus reduction | |
CN103942031B (zh) | 椭圆域曲线运算方法 | |
US20070185948A1 (en) | Method for modular multiplication | |
US8532286B2 (en) | System and method for reducing the computation and storage requirements for a montgomery-style reduction | |
CN101542557A (zh) | 信息安全装置 | |
CN105022961A (zh) | 一种计算机数据的保护方法及装置 | |
US8781112B2 (en) | Signed montgomery arithmetic | |
JP3532860B2 (ja) | 剰余系表現を利用した演算装置及び方法及びプログラム | |
CN102508632B (zh) | 一种在嵌入式系统中实现乘法运算的方法和装置 | |
CN110704109A (zh) | 一种椭圆曲线密码协处理器 | |
CN104660399A (zh) | 一种rsa模幂运算方法和装置 | |
CN101243388A (zh) | 用于在加密计算中执行求逆运算的电路结构和方法 | |
US8626811B2 (en) | Method and apparatus for providing flexible bit-length moduli on a block Montgomery machine | |
CN105027074A (zh) | 质数产生 | |
CN108008934B (zh) | 一种基于查找表的复合有限域求逆装置 | |
CN103092688A (zh) | 一种在嵌入式系统中生成坐标点的方法 | |
US7574469B2 (en) | Method for generating the multiplicative inverse in a finite field GF(p) | |
CN102591618B (zh) | 一种在嵌入式系统中生成大素数的方法 | |
CN104579651A (zh) | 椭圆曲线密码点乘运算的方法和装置 | |
CN114238205A (zh) | 一种抗功耗攻击的高性能ecc协处理器系统 | |
Smyth et al. | An adaptable and scalable asymmetric cryptographic processor | |
CA2738606C (en) | Method and apparatus for providing flexible bit-length moduli on a block montgomery machine | |
CN105373366A (zh) | 一种生成大素数的方法及装置 | |
CN111917548A (zh) | 基于gpu与cpu异构结构的椭圆曲线数字签名方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230712 Address after: Room 1505, Building B, Huizhi Building, No. 9 Xueqing Road, Haidian District, Beijing, 100085 Patentee after: BEIJING HONGSI ELECTRONIC TECHNOLOGY Co.,Ltd. Address before: 100085 17th floor, block B, Huizhi building, No.9 Xueqing Road, Haidian District, Beijing Patentee before: Feitian Technologies Co.,Ltd. |