C转换为汇编语言
发布时间:2020-12-16 09:49:08 所属栏目:百科 来源:网络整理
导读:这是我的任务. 我已经为这个程序集完成了我的代码,但有没有办法让转换速度更快? 提前感谢任何帮助; D. //Convert this nested for loop to assembly instructions for (a = 0; a y; a++) for (b = 0; b y; b++) for (c = 0; c y; c++) if ((a + 2 * b - 8 *
这是我的任务.
我已经为这个程序集完成了我的代码,但有没有办法让转换速度更快? 提前感谢任何帮助; D. //Convert this nested for loop to assembly instructions for (a = 0; a < y; a++) for (b = 0; b < y; b++) for (c = 0; c < y; c++) if ((a + 2 * b - 8 * c) == y) count++; convert _asm { mov ecx,0 mov ax,0 mov bx,0 mov cx,0 Back: push cx push bx push ax add bx,bx mov dx,8 mul dx add cx,bx sub cx,ax pop ax pop bx cmp cx,y jne increase inc count increase : pop cx inc ax cmp ax,y jl Back inc bx mov ax,0 cmp bx,y jl Back inc cx mov ax,0 mov bx,0 cmp cx,y jl Back } 解决方法
一些通用技巧:
>使循环计数器倒计数而不是向上计数.你用这种方式消除了比较. 哦,在inc cx之后你不需要那个mov ax,因为AX已经是0了. 特定于此算法:如果y为奇数,则跳过a为偶数的迭代,反之亦然.将近2倍的加速等待……(如果你想知道为什么,请用铅笔和纸做.)提示:你也不需要测试每次迭代.如果你足够聪明的话,你可以简单地逐步走2点. 或者更好的是,制作一个封闭的表格,让您直接计算答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |