当前位置: 首页 > wzjs >正文

服务器如何搭建php网站php个人网站怎么做

服务器如何搭建php网站,php个人网站怎么做,长沙网站搭建seo,做情趣网站需要什么资质https://www.bpsend.net/thread-458-1-1.html 理解并掌握数学模型,这样换个编译器优化,数学模型是不变的同一模型,描述的代码序列可能会有变化 无符号数除法,且除数非2的整数次幂 的正数 令 M 2^n / C A / C > A 1 / C > A 2^n /C 1 / 2^n > A 2^n /C >> n …

https://www.bpsend.net/thread-458-1-1.html

  1. 理解并掌握数学模型,这样换个编译器优化,数学模型是不变的
  2. 同一模型,描述的代码序列可能会有变化

无符号数除法,且除数非2的整数次幂 的正数

令 M = 2^n / C

A / C => A 1 / C => A 2^n /C 1 / 2^n => A 2^n /C >> n => AM >> n

M = 2^n / C

C = 2^n / M

C是常量 n的值由编译器给那么还是常量

当M值越大,即 n值越大 数值越精确

因为我们是 32位除法,n值起步32 ,随着C的值越大,n的值越大

计算机会自动生成 满足条件的最小 M 值

因此可用定式 表达

mov eax, M ; MagicNumber

mul A ; AM

shr edx , n ; >>n

*int main(unsigned int argc, char argv[])**

{

printf("%d\r\n",****argc / 3** );**

return 0;

}

对应的反汇编代码

mov eax, 0AAAAAAABh ;M值 2863311531

*mul [esp+argc] ; A M**

shr edx, 1 ; n = 32+1 = 33 ,乘积 结果表达式为 edx(高32位) eax(低32位) ,右移32位

; 就到了edx, edx又右移了1位 就是 33,即 直接右移edx,默认已经右移了32位

push edx

push offset aD

call sub_401020

add esp, 8

xor eax, eax

retn

验证:

移位是下整,还原就需要上整

2^33 / 2863311531 = 8589934592/2863311531 = 3 即 C (被除数是3)

img

*int main(unsigned int argc, char argv[])**

{

printf("%d\r\n",****argc / 7** );**

return 0;

}

对应的反汇编代码

mov ecx, [esp+argc]

mov eax, 24924925h ;M有进位, 所以真正值为: 124924925h 4908534053

mul ecx

sub ecx, edx

shr ecx, 1 ;右移了 1 位

add ecx, edx

shr ecx, 2 ;右移了 2 位

*验证: 当遇到 - 移 + 移 代表 M 产生了进位 高位为1 右移32位 + 3位 总共移了 35 位**

2^35 / 4908534053 = 34359738368 / 4908534053 = 7

上面优化的原因就是图片倒过来转化,从终点推导到起点

是为了解决 M值是 大数问题 把 2^35 拆分成 2^32 2 2^2

练习: 还原代码

.text:00401001 mov esi, [esp+4+argc]** .text:00401005 mov eax, 0CCCCCCCDh 3435973837 .text:0040100A mul esi .text:0040100C shr edx, 2 2^34 17179869184 .text:0040100F push edx .text:00401010 push offset aD ; "%d\r\n" **.text:00401015 call printf

17179869184 / 3435973837 = 5

还原代码为 : argc/5

.text:0040101A mov eax, 20000003h 536870915** .text:0040101F mul esi .text:00401021 shr edx, 1Dh 2^61 .text:00401024 push edx .text:00401025 push offset aD ; "%d\r\n" .text:0040102A call printf .text:0040102F add esp, 10h**

argc / -23

2^61 / 536870915 = 4294967273(FFFF FFE9) = -0x17 = -23

无符号数 / 有符号数 结果是无符号数

*无符号数 有符号数 结果是有符号数**

有符号数除法,且除数非2的整数次幂 的正数

有符号就要面对 负数向上取值 ,正数向下取整问题

当 x 不为整数时 x 下整 +1 = x 上整

M = 2^n/C 因为 C 不是的整数次幂 ,因此 M 也不可能是,而且M是个小数

int main(unsigned int argc, char* argv[]){printf("%d\r\n",argc / 5);return 0;}对应的反汇编代码mov     ecx, [esp+argc]mov     eax, 66666667h    ; 1717986919imul     ecx                           ;  imul     代表有符号运算sar        edx, 1                     ; 2^33       8589934592;下面代码是想实现无分支实现 下整转上整  还原代码时不需要还原mov     eax, edxshr        eax, 1Fhadd      edx, eax下整转上整还可以用下面序列mov     eax,edxcdqsub     eax,edx验证:       8589934592  /   1717986919 = 5int main(unsigned int argc, char* argv[]){printf("%d\r\n",argc / 3);return 0;}对应的反汇编代码mov     ecx, [esp+argc]mov     eax, 55555556h       ;1431655766imul    ecx;无分支实现 下整转上整 mov     eax, edxshr     eax, 1Fhadd     edx, eax上面没有    sar        edx ,n    ,代表右移了  32位 所以:2^32  /  1431655766  =  3int main(int argc, char* argv[]){printf("%d\r\n",argc / 7 );return 0;}对应的反汇编代码mov           ecx, [esp+argc]mov           eax, 92492493h       ;2454267027imul           ecx                             ;这里把M变成了有符号负数add            edx, ecx                    ;调整结果sar              edx, 2;无分支实现 下整转上整 mov           eax, edxshr             eax, 1Fhadd            edx, eax结论:  当 M 值 为有符号负数时 ,需要对结果进行调整  有增加一条 调整指令调整方式为:      add       edx , 乘数指令操作数练习:.text:00401001           mov esi, [esp+4+argc].text:00401005           mov eax, 38E38E39h            954437177.text:0040100A           mul esi                                     ;无符号数.text:0040100C           shr edx, 1                                 2^33        8589934592858934592  /   954437177  = 9             .text:00401019           mov eax, 86186187h            ; 186186187h     6544712071.text:0040101E           mul esi                                     ;无符号数.text:00401020           mov eax, esi.text:00401022           sub eax, edx                       .text:00401024           shr eax, 1.text:00401026           add eax, edx.text:00401028           shr eax, 4                                 2^(32+1+4)   = 2^37          137438953472            出现了  *  -  移  +  移指令   M产生了进位2 ^37   /    6544712071  =  21            .text:00401036           mov eax, 2AAAAAABh          715827883.text:0040103B           imul esi                    ;有符号.text:0040103D           sar edx, 1                 2^33            8589934592.text:0040103F           mov ecx, edx          ;无分之实现下整转上整.text:00401041           shr ecx, 1Fh                               .text:00401044           add edx, ecx2^33 / 715827883 =  8589934592 /  715827883  =  12.text:00401051           mov eax, 0EA0EA0EBh          3926827243.text:00401056           imul esi                                   ;有符号.text:00401058           add edx, esi                           ;M时有符号负数 调整指令.text:0040105A           sar edx, 5                                2^37      137438953472.text:0040105D           mov eax, edx                        ;无分之实现下整转上整.text:0040105F           shr eax, 1Fh.text:00401062           add edx, eax137438953472  /    3926827243  = 35

有符号除法定式

mov eax, M

imul r32/m32

sar edx , n

mov r32 , edx

shr r32, 31

add edx, r32

* 实现 用一个有符号数 A 无符号数 8086h ,要求结果为 有符号数 **

mov   ax, 8086himul  A           add   dx,A        使用  imul 是因为 8086h是常量,而 A 是变量,使用muld的话结果不可控使用  imul  A  即 把 A * 8086h 的时候 实际运算的值的真值是(8086h 被视为有符号负数,最高位为1,他是取反+1后的值);add   dx,A    是因为要的结果是 8086hA ,但他运算的结果 为  8086hA  -  10000hA ,因此要加上                   10000hA

补码变形

a + ~a = ffff

a + ~a +1 = 10000h

~a+1 = 10000h - a

* A - ( 10000h - 8086h) **

*= A ( 8086h - 10000h )**

= 8086hA - 10000hA

在 dx,ax 中存一个只 32位的值

*ax10000h = ax.0000 = dx + ax ,ax**


文章转载自:

http://qsSnewJx.tfzjL.cn
http://Y0J9jLSv.tfzjL.cn
http://vx9s97Aa.tfzjL.cn
http://FxTtmuVf.tfzjL.cn
http://1FBCkhAb.tfzjL.cn
http://wrBrzLzB.tfzjL.cn
http://5niyMILh.tfzjL.cn
http://q7vmBjsq.tfzjL.cn
http://mfaVTCAo.tfzjL.cn
http://7uwyreLV.tfzjL.cn
http://MfRfjKOn.tfzjL.cn
http://AJIfw0qH.tfzjL.cn
http://Mruwoe1x.tfzjL.cn
http://cNLX5wbW.tfzjL.cn
http://ApV6Bmqg.tfzjL.cn
http://WSARmsfZ.tfzjL.cn
http://8tjsRvHz.tfzjL.cn
http://ZeJav2fR.tfzjL.cn
http://QPoPgBZl.tfzjL.cn
http://ANFyMn8G.tfzjL.cn
http://bKThIHMX.tfzjL.cn
http://TNmdGZtn.tfzjL.cn
http://BagclFT2.tfzjL.cn
http://nTC01qOC.tfzjL.cn
http://BkjrBMmN.tfzjL.cn
http://jXkJBqyV.tfzjL.cn
http://yrnwxQnb.tfzjL.cn
http://ZWArXu9U.tfzjL.cn
http://6aj9bdGS.tfzjL.cn
http://IofbtFoD.tfzjL.cn
http://www.dtcms.com/wzjs/694576.html

相关文章:

  • 对于做房产做网站的感悟有文化内涵又高雅的公司名字
  • 时尚字体设计网站吉林企业做网站
  • 凉州区住房城乡建设局网站连云港吧
  • 如何看网站有没有备案vultr安装wordpress
  • 淘客建站程序支付宝网站申请接口
  • 网站程序合同第三方网站开发的商家
  • 网网站建设的公司win2008搭建wordpress
  • 公司自己做网站推广wordpress分享插件国内
  • 家装网站自己做的广州网站开发外包哪家好
  • 网站建设+管理系统开发北京网站制作到诺然
  • wordpress地址跟站点动漫网页设计素材
  • 网站制作 推荐新鸿儒百度网盟推广费用投入
  • 湛江网站营销网站推广方案
  • 滁州市网站建设科技公司永州网页设计
  • 上海景泰建设股份有限公司网站智能自助建站系统源码
  • 公司网站建设如何做账广州小程序开发公司电话
  • 哈尔滨做网站的oeminc注册网站免费注册ins
  • 网站运营维护合同专业的网站建设服务商
  • 烟台专业做网站公司有哪些平面设计和室内设计的区别
  • 网站打开速度慢是什么原因建设摩托车官网旗舰店
  • wordpress 快速建站城乡建设学校网站
  • 国外商业网站网络营销技巧和营销方法
  • 通州郑州阳网站建设漳州电脑网站建设
  • 哪个网站可以接做美工的活儿山东系统建站怎么用
  • 免域名x网站网站制作商家入驻
  • 网站建设与管理适合女生学吗温州建站方案
  • 开发手机网站教程中国城乡住房和城乡建设部网站
  • 国外注册网站做百度seo网站导航条背景图片
  • 做动车哪个网站查内网建站教程
  • 网站设计公司 北京个人网站如何被百度收录