兴化400生活网
标题:
加密与解密(连载4)
[打印本页]
作者:
电脑白痴
时间:
2004-8-25 22:12
标题:
加密与解密(连载4)
第2章 基础知识 <br><br><br><br>第一节 软件保护 第二节 汇编语言 第三节 汇编跳转 第四节 浮点指令 第五节 分析技术 <br><br><br><br>第四节 浮点指令<br><br><br><br> 对下面的指令先做一些说明: <br><br>st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响 <br><br>src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数 <br><br>mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节) <br><br>x <- y 表示将y的值放入x,例st(0) <- st(0) - st(1)表示将st(0)-st(1)的值放入浮点寄存器st(0) <br><br><br><br>1. 数据传递和对常量的操作指令<br><br><br><br>指令格式<br> 指令含义<br> 执行的操作<br> <br><br>FLD src<br> 装入实数到st(0)<br> st(0) <- src (mem32/mem64/mem80) <br> <br><br>FILD src<br> 装入整数到st(0) <br> st(0) <- src (mem16/mem32/mem64)<br> <br><br>FBLD src <br> 装入BCD数到st(0)<br> st(0) <- src (mem80)<br> <br> <br> <br><br>FLDZ<br> 将0.0装入st(0)<br> st(0) <- 0.0 <br> <br><br>FLD1<br> 将1.0装入st(0)<br> st(0) <- 1.0 <br> <br><br>FLDPI<br> 将pi装入st(0)<br> st(0) <- ?(ie, pi)<br> <br><br>FLDL2T<br> 将log2(10)装入st(0)<br> st(0) <- log2(10)<br> <br><br>FLDL2E<br> 将log2(e)装入st(0)<br> st(0) <- log2(e)<br> <br><br>FLDLG2<br> 将log10(2)装入st(0)<br> st(0) <- log10(2)<br> <br><br>FLDLN2<br> 将loge(2)装入st(0)<br> st(0) <- loge(2)<br> <br> <br> <br><br>FST dest<br> 保存实数st(0)到dest<br> dest <- st(0) (mem32/mem64)<br> <br><br>FSTP dest<br> <br> dest <- st(0) (mem32/mem64/mem80);然后再执行一次出栈操作<br> <br><br>FIST dest<br> 将st(0)以整数保存到dest<br> dest <- st(0) (mem32/mem64) <br> <br><br>FISTP dest<br> <br> dest <- st(0) (mem16/mem32/mem64);然后再执行一次出栈操作<br> <br><br>FBST dest<br> 将st(0)以BCD保存到dest<br> dest <- st(0) (mem80) <br> <br><br>FBSTP dest <br> <br> dest<- st(0) (mem80);然后再执行一次出栈操作<br> <br><br><br><br>2.比较指令 <br><br><br><br>指令格式<br> 指令含义<br> 执行的操作<br> <br><br>FCOM<br> 实数比较<br> 将标志位设置为 st(0) - st(1) 的结果标志位<br> <br><br>FCOM op<br> 实数比较<br> 将标志位设置为 st(0) - op (mem32/mem64)的结果标志位 <br> <br> <br> <br><br>FICOM op<br> 和整数比较<br> 将Flags值设置为st(0)-op 的结果op (mem16/mem32)<br> <br><br>FICOMP op<br> 和整数比较<br> 将st(0)和op比较 op(mem16/mem32)后;再执行一次出栈操作<br> <br> <br> <br><br>FTST <br> 零检测 <br> 将st(0)和0.0比较<br> <br><br>FUCOM st(i) <br> <br> 比较st(0) 和st(i) [486]<br> <br><br>FUCOMP st(i) <br> <br> 比较st(0) 和st(i),并且执行一次出栈操作<br> <br><br>FUCOMPP st(i) <br> <br> 比较st(0) 和st(i),并且执行两次出栈操作<br> <br><br>FXAM <br> <br> Examine: Eyeball st(0) (set condition codes)<br> <br><br><br><br>3.运算指令 <br><br><br><br>指令格式<br> 指令含义<br> 执行的操作<br> <br><br>加法<br> <br><br>FADD<br> 加实数<br> st(0) <-st(0) + st(1)<br> <br><br>FADD src<br> <br> st(0) <-st(0) + src (mem32/mem64)<br> <br><br>FADD st(i),st<br> <br> st(i) <- st(i) + st(0)<br> <br><br>FADDP st(i),st <br> <br> st(i) <- st(i) + st(0);然后执行一次出栈操作<br> <br><br>FIADD src <br> 加上一个整数<br> st(0) <-st(0) + src (mem16/mem32)<br> <br><br>减法 <br> <br><br>FSUB<br> 减去一个实数<br> st(0) <- st(0) - st(1)<br> <br><br>FSUB src<br> <br> st(0) <-st(0) - src (reg/mem)<br> <br><br>FSUB st(i),st<br> <br> st(i) <-st(i) - st(0)<br> <br><br>FSUBP st(i),st<br> <br> st(i) <-st(i) - st(0),然后执行一次出栈操作<br> <br><br>FSUBR st(i),st<br> 用一个实数来减<br> st(0) <- st(i) - st(0)<br> <br><br>FSUBRP st(i),st<br> <br> st(0) <- st(i) - st(0),然后执行一次出栈操作<br> <br><br>FISUB src<br> 减去一个整数<br> st(0) <- st(0) - src (mem16/mem32)<br> <br><br>FISUBR src<br> 用一个整数来减<br> st(0) <- src - st(0) (mem16/mem32)<br> <br><br>乘法 <br> <br><br>FMUL<br> 乘上一个实数<br> st(0) <- st(0) * st(1)<br> <br><br>FMUL st(i)<br> <br> st(0) <- st(0) * st(i)<br> <br><br>FMUL st(i),st<br> <br> st(i) <- st(0) * st(i)<br> <br><br>FMULP st(i),st<br> <br> st(i) <- st(0) * st(i),然后执行一次出栈操作<br> <br><br>FIMUL src<br> 乘上一个整数<br> st(0) <- st(0) * src (mem16/mem32)<br> <br><br>除法 <br> <br><br>FDIV <br> 除以一个实数<br> st(0) <-st(0) /st(1)<br> <br><br>FDIV st(i)<br> <br> st(0) <- st(0) /t(i)<br> <br><br>FDIV st(i),st<br> <br> st(i) <-st(0) /st(i)<br> <br><br>FDIVP st(i),st<br> <br> st(i) <-st(0) /st(i),然后执行一次出栈操作 <br> <br><br>FIDIV src <br> 除以一个整数<br> st(0) <- st(0) /src (mem16/mem32)<br> <br><br>FDIVR st(i),st<br> 用实数除<br> st(0) <- st(i) /st(0)<br> <br><br>FDIVRP st(i),st<br> <br> FDIVRP st(i),st<br> <br><br>FIDIVR src <br> 用整数除<br> st(0) <- src /st(0) (mem16/mem32)<br> <br> <br> <br><br>FSQRT<br> 平方根<br> st(0) <- sqrt st(0)<br> <br> <br> <br><br>FSCALE<br> 2的st(0)次方<br> st(0) <- 2 ^ st(0)<br> <br><br>FXTRACT<br> Extract exponent:<br> st(0) <-exponent of st(0); and gets pushed <br><br><br><br>st(0) <-significand of st(0) <br> <br> <br> <br><br>FPREM <br> 取余数<br> st(0) <-st(0) MOD st(1)<br> <br><br>FPREM1<br> 取余数(IEEE),同FPREM,但是使用IEEE标准[486]<br> <br> <br> <br> <br> <br><br>FRNDINT <br> 取整(四舍五入)<br> st(0) <- INT( st(0) ); depends on RC flag<br> <br> <br> <br><br>FABS<br> 求绝对值<br> st(0) <- ABS( st(0) ); removes sign<br> <br><br>FCHS<br> 改变符号位(求负数)<br> st(0) <-st(0)<br> <br> <br> <br><br>F2XM1<br> 计算(2 ^ x)-1<br> st(0) <- (2 ^ st(0)) - 1<br> <br><br>FYL2X <br> 计算Y * log2(X)<br> st(0)为Y;st(1)为X;将st(0)和st(1)变为st(0) * log2( st(1) )的值<br> <br> <br> <br><br>FCOS<br> 余弦函数Cos<br> st(0) <- COS( st(0) )<br> <br><br>FPTAN<br> 正切函数tan<br> st(0) <- TAN( st(0) )<br> <br><br>FPATAN<br> 反正切函数arctan<br> st(0) <- ATAN( st(0) )<br> <br><br>FSIN<br> 正弦函数sin<br> st(0) <- SIN( st(0) )<br> <br><br>FSINCOS<br> sincos函数<br> st(0) <-SIN( st(0) ),并且压入st(1)<br><br><br><br>st(0) <- COS( st(0) )<br> <br> <br> <br> <br> <br><br>FYL2XP1 <br> 计算Y * log2(X+1)<br> st(0)为Y; st(1)为X; 将st(0)和st(1)变为st(0) * log2( st(1)+1 )的值 <br> <br><br>处理器控制指令<br> <br><br>FINIT<br> 初始化FPU<br> <br> <br><br>FSTSW AX<br> 保存状态字的值到AX<br> AX<- MSW<br> <br><br>FSTSW dest<br> 保存状态字的值到dest<br> dest<-MSW (mem16)<br> <br> <br> <br> <br> <br><br>FLDCW src<br> 从src装入FPU的控制字<br> FPU CW <-src (mem16)<br> <br><br>FSTCW dest<br> 将FPU的控制字保存到dest<br> dest<- FPU CW<br> <br> <br> <br> <br> <br><br>FCLEX <br> 清除异常<br> <br> <br> <br> <br> <br> <br><br>FSTENV dest<br> 保存环境到内存地址dest处 保存状态字、控制字、标志字和异常指针的值<br> <br><br>FLDENV src<br> 从内存地址src处装入保存的环境<br> <br> <br><br>FSAVE dest<br> 保存FPU的状态到dest处 94字节<br> <br> <br><br>FRSTOR src<br> 从src处装入由FSAVE保存的FPU状态<br> <br> <br> <br> <br> <br> <br><br>FINCSTP<br> 增加FPU的栈指针值<br> st(6) <-st(5); st(5) <-st(4),...,st(0) <-?<br> <br><br>FDECSTP<br> 减少FPU的栈指针值<br> st(0) <-st(1); st(1) <-st(2),...,st(7) <-? <br> <br> <br> <br> <br> <br><br>FFREE st(i)<br> 标志寄存器st(i)未被使用<br> <br> <br> <br> <br> <br> <br><br>FNOP <br> 空操作,等同CPU的nop<br> st(0) <-st(0)<br> <br><br>WAIT/FWAIT<br> 同步FPU与CPU:停止CPU的运行,直到FPU完成当前操作码<br> <br> <br> <br><br>FXCH<br> 交换指令,交换st(0)和st(1)的值<br> st(0) <-st(1) <br><br><br><br>st(1) <- st(0)<br><br>
欢迎光临 兴化400生活网 (http://wenhui.vc7.cc/)
Powered by Discuz! X2.5