【发布时间】:2013-09-23 00:48:22
【问题描述】:
尝试在汇编中执行以下操作:
#include <stdio.h>
main(){
int a,b,c=0,d=0;
for(a = -3; a >= 3; a++){
b = a*a*a*a*a*a*a - a*a*a*a*4 - a*a*a + a*a*7 + 30*a;
if(b>=c){
c=b;
}
if(b<=d){
d=b;
}
}
printf("The max value is" + c + "\n");
printf("The min value is" + d + "\n");
}
我在汇编中编写的代码不多,并且我希望在查看汇编语言时能够理解我的代码,所以简单地将其转换为使用 gcc 的汇编是不可能的。
我的目标是在编写此代码时尽可能少地使用nop。所以我想我的问题是:
- 在没有大规模组装的情况下,最好的方法是什么? 重新进入登记簿的数量?是这样吗 可能吗?
- 当我在汇编中循环时,我是否想要已经设置
a的值?或者可以 我在这里编程有点像这样的for循环? (我可以避免while循环以节省空间吗)
【问题讨论】:
-
@Christian:你是对的,但请阅读散文。问题是询问如何在汇编中完成等价的事情,使用 C 作为他们想要发生的事情的模型。
-
@Christian:即使是家庭作业,他们也在问一个有效的问题,而不是要求为他们完成工作。
-
两个建议:1)关于 GCC/x86 程序集的优秀链接:Programming from the Ground Up, Jonathan Bartlett,2)“gcc -S”你的 C sn-ps 并分析结果。 “使用 gcc 将其转换为程序集”强调 NOT “有点问题”。这是推荐。恕我直言...
-
@Ryan,我发现这个 link 很有趣,你可能想看看。
-
for (a = -3; a >= 3; a++)-- 你认为这个循环多久执行一次?