⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mo-586.pl

📁 Openssl 0.9.8h 最新版OpenSSL
💻 PL
📖 第 1 页 / 共 2 页
字号:
	&mov	($_bpend,"eax");	&mov	("eax",&DWP(0,$inp));	&xor	("edx","edx");&set_label("mull",16);	&mov	($carry,"edx");	&mul	($word);				# ap[j]*bp[0]	&add	($carry,"eax");	&lea	($j,&DWP(1,$j));	&adc	("edx",0);	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[j+1]	&cmp	($j,$num);	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j]=	&jl	(&label("mull"));	&mov	($carry,"edx");	&mul	($word);				# ap[num-1]*bp[0]	 &mov	($word,$_n0);	&add	("eax",$carry);	 &mov	($inp,$_np);	&adc	("edx",0);	 &imul	($word,&DWP($frame,"esp"));		# n0*tp[0]	&mov	(&DWP($frame,"esp",$num,4),"eax");	# tp[num-1]=	&xor	($j,$j);	&mov	(&DWP($frame+4,"esp",$num,4),"edx");	# tp[num]=	&mov	(&DWP($frame+8,"esp",$num,4),$j);	# tp[num+1]=	&mov	("eax",&DWP(0,$inp));			# np[0]	&mul	($word);				# np[0]*m	&add	("eax",&DWP($frame,"esp"));		# +=tp[0]	&mov	("eax",&DWP(4,$inp));			# np[1]	&adc	("edx",0);	&inc	($j);	&jmp	(&label("2ndmadd"));&set_label("1stmadd",16);	&mov	($carry,"edx");	&mul	($word);				# ap[j]*bp[i]	&add	($carry,&DWP($frame,"esp",$j,4));	# +=tp[j]	&lea	($j,&DWP(1,$j));	&adc	("edx",0);	&add	($carry,"eax");	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[j+1]	&adc	("edx",0);	&cmp	($j,$num);	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j]=	&jl	(&label("1stmadd"));	&mov	($carry,"edx");	&mul	($word);				# ap[num-1]*bp[i]	&add	("eax",&DWP($frame,"esp",$num,4));	# +=tp[num-1]	 &mov	($word,$_n0);	&adc	("edx",0);	 &mov	($inp,$_np);	&add	($carry,"eax");	&adc	("edx",0);	 &imul	($word,&DWP($frame,"esp"));		# n0*tp[0]	&xor	($j,$j);	&add	("edx",&DWP($frame+4,"esp",$num,4));	# carry+=tp[num]	&mov	(&DWP($frame,"esp",$num,4),$carry);	# tp[num-1]=	&adc	($j,0);	 &mov	("eax",&DWP(0,$inp));			# np[0]	&mov	(&DWP($frame+4,"esp",$num,4),"edx");	# tp[num]=	&mov	(&DWP($frame+8,"esp",$num,4),$j);	# tp[num+1]=	&mul	($word);				# np[0]*m	&add	("eax",&DWP($frame,"esp"));		# +=tp[0]	&mov	("eax",&DWP(4,$inp));			# np[1]	&adc	("edx",0);	&mov	($j,1);&set_label("2ndmadd",16);	&mov	($carry,"edx");	&mul	($word);				# np[j]*m	&add	($carry,&DWP($frame,"esp",$j,4));	# +=tp[j]	&lea	($j,&DWP(1,$j));	&adc	("edx",0);	&add	($carry,"eax");	&mov	("eax",&DWP(0,$inp,$j,4));		# np[j+1]	&adc	("edx",0);	&cmp	($j,$num);	&mov	(&DWP($frame-8,"esp",$j,4),$carry);	# tp[j-1]=	&jl	(&label("2ndmadd"));	&mov	($carry,"edx");	&mul	($word);				# np[j]*m	&add	($carry,&DWP($frame,"esp",$num,4));	# +=tp[num-1]	&adc	("edx",0);	&add	($carry,"eax");	&adc	("edx",0);	&mov	(&DWP($frame-4,"esp",$num,4),$carry);	# tp[num-2]=	&xor	("eax","eax");	 &mov	($j,$_bp);				# &bp[i]	&add	("edx",&DWP($frame+4,"esp",$num,4));	# carry+=tp[num]	&adc	("eax",&DWP($frame+8,"esp",$num,4));	# +=tp[num+1]	 &lea	($j,&DWP(4,$j));	&mov	(&DWP($frame,"esp",$num,4),"edx");	# tp[num-1]=	 &cmp	($j,$_bpend);	&mov	(&DWP($frame+4,"esp",$num,4),"eax");	# tp[num]=	&je	(&label("common_tail"));	&mov	($word,&DWP(0,$j));			# bp[i+1]	&mov	($inp,$_ap);	&mov	($_bp,$j);				# &bp[++i]	&xor	($j,$j);	&xor	("edx","edx");	&mov	("eax",&DWP(0,$inp));	&jmp	(&label("1stmadd"));&set_label("bn_sqr_mont",16);$sbit=$num;	&mov	($_num,$num);	&mov	($_bp,$j);				# i=0	&mov	("eax",$word);				# ap[0]	&mul	($word);				# ap[0]*ap[0]	&mov	(&DWP($frame,"esp"),"eax");		# tp[0]=	&mov	($sbit,"edx");	&shr	("edx",1);	&and	($sbit,1);	&inc	($j);&set_label("sqr",16);	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[j]	&mov	($carry,"edx");	&mul	($word);				# ap[j]*ap[0]	&add	("eax",$carry);	&lea	($j,&DWP(1,$j));	&adc	("edx",0);	&lea	($carry,&DWP(0,$sbit,"eax",2));	&shr	("eax",31);	&cmp	($j,$_num);	&mov	($sbit,"eax");	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j]=	&jl	(&label("sqr"));	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[num-1]	&mov	($carry,"edx");	&mul	($word);				# ap[num-1]*ap[0]	&add	("eax",$carry);	 &mov	($word,$_n0);	&adc	("edx",0);	 &mov	($inp,$_np);	&lea	($carry,&DWP(0,$sbit,"eax",2));	 &imul	($word,&DWP($frame,"esp"));		# n0*tp[0]	&shr	("eax",31);	&mov	(&DWP($frame,"esp",$j,4),$carry);	# tp[num-1]=	&lea	($carry,&DWP(0,"eax","edx",2));	 &mov	("eax",&DWP(0,$inp));			# np[0]	&shr	("edx",31);	&mov	(&DWP($frame+4,"esp",$j,4),$carry);	# tp[num]=	&mov	(&DWP($frame+8,"esp",$j,4),"edx");	# tp[num+1]=	&mul	($word);				# np[0]*m	&add	("eax",&DWP($frame,"esp"));		# +=tp[0]	&mov	($num,$j);	&adc	("edx",0);	&mov	("eax",&DWP(4,$inp));			# np[1]	&mov	($j,1);&set_label("3rdmadd",16);	&mov	($carry,"edx");	&mul	($word);				# np[j]*m	&add	($carry,&DWP($frame,"esp",$j,4));	# +=tp[j]	&adc	("edx",0);	&add	($carry,"eax");	&mov	("eax",&DWP(4,$inp,$j,4));		# np[j+1]	&adc	("edx",0);	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j-1]=	&mov	($carry,"edx");	&mul	($word);				# np[j+1]*m	&add	($carry,&DWP($frame+4,"esp",$j,4));	# +=tp[j+1]	&lea	($j,&DWP(2,$j));	&adc	("edx",0);	&add	($carry,"eax");	&mov	("eax",&DWP(0,$inp,$j,4));		# np[j+2]	&adc	("edx",0);	&cmp	($j,$num);	&mov	(&DWP($frame-8,"esp",$j,4),$carry);	# tp[j]=	&jl	(&label("3rdmadd"));	&mov	($carry,"edx");	&mul	($word);				# np[j]*m	&add	($carry,&DWP($frame,"esp",$num,4));	# +=tp[num-1]	&adc	("edx",0);	&add	($carry,"eax");	&adc	("edx",0);	&mov	(&DWP($frame-4,"esp",$num,4),$carry);	# tp[num-2]=	&mov	($j,$_bp);				# i	&xor	("eax","eax");	&mov	($inp,$_ap);	&add	("edx",&DWP($frame+4,"esp",$num,4));	# carry+=tp[num]	&adc	("eax",&DWP($frame+8,"esp",$num,4));	# +=tp[num+1]	&mov	(&DWP($frame,"esp",$num,4),"edx");	# tp[num-1]=	&cmp	($j,$num);	&mov	(&DWP($frame+4,"esp",$num,4),"eax");	# tp[num]=	&je	(&label("common_tail"));	&mov	($word,&DWP(4,$inp,$j,4));		# ap[i]	&lea	($j,&DWP(1,$j));	&mov	("eax",$word);	&mov	($_bp,$j);				# ++i	&mul	($word);				# ap[i]*ap[i]	&add	("eax",&DWP($frame,"esp",$j,4));	# +=tp[i]	&adc	("edx",0);	&mov	(&DWP($frame,"esp",$j,4),"eax");	# tp[i]=	&xor	($carry,$carry);	&cmp	($j,$num);	&lea	($j,&DWP(1,$j));	&je	(&label("sqrlast"));	&mov	($sbit,"edx");				# zaps $num	&shr	("edx",1);	&and	($sbit,1);&set_label("sqradd",16);	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[j]	&mov	($carry,"edx");	&mul	($word);				# ap[j]*ap[i]	&add	("eax",$carry);	&lea	($carry,&DWP(0,"eax","eax"));	&adc	("edx",0);	&shr	("eax",31);	&add	($carry,&DWP($frame,"esp",$j,4));	# +=tp[j]	&lea	($j,&DWP(1,$j));	&adc	("eax",0);	&add	($carry,$sbit);	&adc	("eax",0);	&cmp	($j,$_num);	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j]=	&mov	($sbit,"eax");	&jle	(&label("sqradd"));	&mov	($carry,"edx");	&lea	("edx",&DWP(0,$sbit,"edx",2));	&shr	($carry,31);&set_label("sqrlast");	&mov	($word,$_n0);	&mov	($inp,$_np);	&imul	($word,&DWP($frame,"esp"));		# n0*tp[0]	&add	("edx",&DWP($frame,"esp",$j,4));	# +=tp[num]	&mov	("eax",&DWP(0,$inp));			# np[0]	&adc	($carry,0);	&mov	(&DWP($frame,"esp",$j,4),"edx");	# tp[num]=	&mov	(&DWP($frame+4,"esp",$j,4),$carry);	# tp[num+1]=	&mul	($word);				# np[0]*m	&add	("eax",&DWP($frame,"esp"));		# +=tp[0]	&lea	($num,&DWP(-1,$j));	&adc	("edx",0);	&mov	($j,1);	&mov	("eax",&DWP(4,$inp));			# np[1]	&jmp	(&label("3rdmadd"));}&set_label("common_tail",16);	&mov	($np,$_np);			# load modulus pointer	&mov	($rp,$_rp);			# load result pointer	&lea	($tp,&DWP($frame,"esp"));	# [$ap and $bp are zapped]	&mov	("eax",&DWP(0,$tp));		# tp[0]	&mov	($j,$num);			# j=num-1	&xor	($i,$i);			# i=0 and clear CF!&set_label("sub",16);	&sbb	("eax",&DWP(0,$np,$i,4));	&mov	(&DWP(0,$rp,$i,4),"eax");	# rp[i]=tp[i]-np[i]	&dec	($j);				# doesn't affect CF!	&mov	("eax",&DWP(4,$tp,$i,4));	# tp[i+1]	&lea	($i,&DWP(1,$i));		# i++	&jge	(&label("sub"));	&sbb	("eax",0);			# handle upmost overflow bit	&and	($tp,"eax");	&not	("eax");	&mov	($np,$rp);	&and	($np,"eax");	&or	($tp,$np);			# tp=carry?tp:rp&set_label("copy",16);				# copy or in-place refresh	&mov	("eax",&DWP(0,$tp,$num,4));	&mov	(&DWP(0,$rp,$num,4),"eax");	# rp[i]=tp[i]	&mov	(&DWP($frame,"esp",$num,4),$j);	# zap temporary vector	&dec	($num);	&jge	(&label("copy"));	&mov	("esp",$_sp);		# pull saved stack pointer	&mov	("eax",1);&set_label("just_leave");&function_end("bn_mul_mont");&asciz("Montgomery Multiplication for x86, CRYPTOGAMS by <appro\@openssl.org>");&asm_finish();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -