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

聚成网站建设wordpress前台投稿插件

聚成网站建设,wordpress前台投稿插件,个人网站备案 网站服务内容,企业网站优化定制面试题5#xff1a;函数调用的过程 C 中函数的调用包含参数入栈、函数跳转、保护现场、回复现场等过程#xff0c;重点过程如下#xff1a; #xff08;1#xff09;将函数的参数压入栈中#xff0c;从右至左压入。 #xff08;2#xff09;调用函数时#xff0c;将当…面试题5函数调用的过程 C 中函数的调用包含参数入栈、函数跳转、保护现场、回复现场等过程重点过程如下 1将函数的参数压入栈中从右至左压入。 2调用函数时将当前程序的执行位置即返回地址压入栈中。 3将函数的栈帧也称为活动记录压入栈中。栈帧包含了函数的局部变量、函数返回值、函数的上一级调用者的栈帧指针等信息。 4执行函数体内的语句包括局部变量的声明和初始化、函数体语句的执行等。 5函数执行完毕后将函数的返回值保存在寄存器中或者栈中。 6弹出函数的栈帧并将返回值传递给上一级函数。 7将返回地址弹出栈中程序跳转到该地址继续执行。 以如下代码为例 64 位程序 #include iostreamint add(int a, int b) {int sum a b;return sum; }int main() {int sum add(1, 2);return 0; }首先给 main() 函数的第一行 int sum add(1, 2); 打上断点调试运行程序。 程序暂停后查看当前汇编代码 VS2017 查看方法右击当前代码页选择转到反汇编 int main() { 00007FF67D8AA630 push rbp 00007FF67D8AA632 push rdi 00007FF67D8AA633 sub rsp,108h 00007FF67D8AA63A lea rbp,[rsp20h] 00007FF67D8AA63F mov rdi,rsp 00007FF67D8AA642 mov ecx,42h 00007FF67D8AA647 mov eax,0CCCCCCCCh 00007FF67D8AA64C rep stos dword ptr [rdi] 00007FF67D8AA64E lea rcx,[__81FC6F77_main2cpp (07FF67D9E41D7h)] 00007FF67D8AA655 call __CheckForDebuggerJustMyCode (07FF67D874108h) int sum add(1, 2); 00007FF67D8AA65A mov edx,2 00007FF67D8AA65F mov ecx,1 00007FF67D8AA664 call add (07FF67D87584Bh) 00007FF67D8AA669 mov dword ptr [sum],eax return 0; 00007FF67D8AA66C xor eax,eax }在汇编代码中程序暂停在第 14 行00007FF67D8AA65A mov edx,2。后面的两行是传入参数的过程其中edx是数据寄存器常用于存储一些大于 AX 寄存器的 16 位数和 32 位数的运算中的高位数。在函数调用中 edx 寄存器用于存储第一个参数值。ecx是计数寄存器常用于存储循环计数器和移位操作的计数器。在函数调用中 ecx 寄存器用于存储第二个参数值。通过这两行传入的值可以看出调用函数时参数入栈时从右往左。 汇编行00007FF67D8AA664 call add (07FF67D87584Bh)用于跳转到待调用的函数内但这里需要注意的是地址07FF67D87584Bh并不是待调用的函数的地址该代码会执行到下面这一行 00007FF67D87584B jmp add (07FF67D8AA5C0h) 这里的地址07FF67D8AA5C0h才是真正待调用函数的地址。下面即进入被调用函数内部 int add(int a, int b) { 00007FF67D8AA5C0 mov dword ptr [rsp10h],edx 00007FF67D8AA5C4 mov dword ptr [rsp8],ecx 00007FF67D8AA5C8 push rbp 00007FF67D8AA5C9 push rdi 00007FF67D8AA5CA sub rsp,108h 00007FF67D8AA5D1 lea rbp,[rsp20h] 00007FF67D8AA5D6 mov rdi,rsp 00007FF67D8AA5D9 mov ecx,42h 00007FF67D8AA5DE mov eax,0CCCCCCCCh 00007FF67D8AA5E3 rep stos dword ptr [rdi] 00007FF67D8AA5E5 mov ecx,dword ptr [rsp128h] 00007FF67D8AA5EC lea rcx,[__81FC6F77_main2cpp (07FF67D9E41D7h)] 00007FF67D8AA5F3 call __CheckForDebuggerJustMyCode (07FF67D874108h) int sum a b; 00007FF67D8AA5F8 mov eax,dword ptr [b] 00007FF67D8AA5FE mov ecx,dword ptr [a] 00007FF67D8AA604 add ecx,eax 00007FF67D8AA606 mov eax,ecx 00007FF67D8AA608 mov dword ptr [sum],eax return sum; 00007FF67D8AA60B mov eax,dword ptr [sum] }这段汇编代码的第 2 行到第 15 行之间是对该函数的栈初始化工作由编译器自动添加。其中 rsp 32 位程序中是 esp 、rbp 32 位程序中是 ebp 、rdi 32 位程序中是 edi 是常用的寄存器 rsp 为栈指针常用来指向栈顶。上面汇编代码中第 6 行00007FF67D8AA5CA sub rsp,108h的意思是将栈顶指针往上移动 108h Byte。这个区域为间隔空间将被调用的 add 函数与 main 函数的栈区域隔开一段距离同时还要预留出存储局部变量的内存区域。 rbp 为基址指针常用来指向栈底。 rdi 为目的变址寄存器。 上面汇编代码的第 17 行到第 21 行之间是进行两数相加的逻辑操作。 执行到第最后一行后打开寄存器查看器 VS2017 查看方法调试–窗口–寄存器可以查看到如下值 RAX  0000000000000003 RBX  0000000000000000 RCX  0000000000000003 RDX  0000000000000002 RSI  0000000000000000 RDI  0000005BD30FFA58 R8   0000020993014F70 R9   0000005BD30FF954 R10  0000000000000013 R11  00000209930242E0 R12  0000000000000000 R13  0000000000000000 R14  0000000000000000 R15  0000000000000000 RIP  00007FF67D8AA60B RSP  0000005BD30FF950 RBP  0000005BD30FF970 EFL  00000206 0x0000005BD30FF974  00000003 查看寄存器 RDI 的内存值 VS2017 查看方法调试–窗口–内存-内存1 0000005bd30ffb78 0000005bd30ffa90 00007ff67d8aa669 00007ff600000001 cccccccc00000002 cccccccccccccccc cccccccccccccccc cccccccccccccccc cccccccccccccccc cccccccccccccccc cccccccccccccccc其中第三个值 00007ff67d8aa669 是 main 函数中调用该函数后的下一行汇编代码。 至此整个调用过程结束。 面试题6怎样判断两个浮点数是否相等 由于浮点数存入时有可能因为四舍五入而造成精度损失所以两个浮点数直接用操作符进行比较很可能会得到不符合预期的结果。 浮点数的比较应该使用如下方式 对于浮点数而言比较合适的精度为0.000001 对于双精度浮点数而言比较合适的精度为0.0000000000000001 因此可以定义两个宏 #define ACCURACY_F 1e-6 #define ACCURACY_D 1e-16判断浮点数是否等于 0 float 类型if(fabs(f) ACCURACY_F ); double 类型if(fabs(d) ACCURACY_D); 判断两个浮点数是否相等 float 类型if(fabs(f1 - f2) ACCURACY_F); double 类型if(fabs(d1 - d2) ACCURACY_D);
http://www.zqtcl.cn/news/331858/

相关文章:

  • 设计视频网站腾讯云服务器网站域名备案
  • 网站建设费算费用还是固定资产镇赉县做网站的
  • 山西 旅游 英文 网站建设wordpress 设置登陆界面
  • 电商网站系统建设考试深圳网站建设培训哪家好
  • 工作室 网站项目策划书八篇案例
  • ui做网站流程建设统计网站进不去
  • 沧州网站建设优化公司网站改版
  • 网站开发工程师好不好注册科技公司流程和费用
  • wordpress站点费用vs手表官网
  • 网站买卖需要注意什么景安怎么把网站做别名
  • 网站建设网站建怎么做一个门户网站
  • 站长工具域名备案查询安卓app开发教程视频免费
  • 赶集网网站建设分析河南郑州旅游网站设计
  • 怎么可以黑网站域名建设网站的网站是什么
  • 帝国网站数据库配置文件建筑人才网招聘网官网首页
  • c 做的网站怎么上传图片阿里巴巴网站建设的目的
  • 保定模板建站平台微网站怎么做的好
  • 肇庆网站建设方案维护做学校网站素材图片素材
  • 新潮远网站建设建什么类型个人网站
  • 泉州中小企业网站制作洛浦县网站建设
  • 做游戏视频网站用什么程序好wordpress 地址修改
  • 大连的网站建设阳西网站seo
  • 网站制作电话多少网站商品图片怎么做
  • 定制做网站平台网站什么情况要更新
  • 上海网站建设哪家国外有哪些网站可以做电商
  • 网络软文推广网站wordpress仿站抓取软件
  • 安徽圣力建设集团网站当当网站建设与易趣网站对比
  • 长沙网站设计制作DW做注册网站
  • 商城设计网站关键词的优化在哪做
  • 网站锚文本网络营销的解释