关于汇编的加减程序
请教下大神 为什么程序结束后是显示0 ?? 请大神好好给小弟我 讲解下我觉得好像跟cx 有关是 调一下cx的值就不是0了#include<stdio.h>
#include<windows.h>
int main()
{
int a=1;
_asm{
MOV EAX,a
MOV ECX,1024
s0:
ADD EAX,EAX
loop s0
MOV ,EAX
}
printf("%d",a);
return 0;}
第一次 1+1=2
第二次 2+2=4
第三次 4+4=8
。。。。。
第N次2的N次方
溢出是肯定的了(2的32次方就已经溢出了) oggplay 发表于 2014-3-28 19:23 static/image/common/back.gif
第一次 1+1=2
第二次 2+2=4
第三次 4+4=8
那请问下 如果要算1024次方该如何去改??大神??? 本帖最后由 oggplay 于 2014-3-28 19:58 编辑
wiliam 发表于 2014-3-28 19:25 static/image/common/back.gif
那请问下 如果要算1024次方该如何去改??大神???
//结果保存到文件里1.txt。
//m表示底数 t输入几次方
#include <stdio.h>
#define M 10000
intmain()
{
unsigned a;
unsigned long k;
int i,j,m,t,n=1,r;
FILE *fp;
a=1;
printf("\n输入m and t(空格隔开: m^t = ?):");
scanf("%d %d",&m,&t);
for(j=0; j<t; j++)
{
r=0;
for(i=0; i<n; i++)
{
k=a*m+r;
a=k%10000;
r=k/10000;
}
while(r>0)
{
a=r%10000;
r/=10000;
}
}
fp=fopen("1.txt","w");
printf("\n %d^%d =",m,t);
for(i=n-1; i>=0; i--)
{ if(a<1000&&a>=100&&i!=n-1) fprintf(fp,"%c",'0');
else if(a<100&&a>=10&&i!=n-1) fprintf(fp,"%s","00");
else if(a<10&&i!=n-1) fprintf(fp,"%s","000");
fprintf(fp,"%d",a);
}
close(fp);
printf("\n");
return 0;
}
多谢楼主分享 不是算法问题。
MOV ,EAX 这是关键 表示用a中的内容做寻址的地址
如果a是1,那么EAX就被存到1号地址单元了
MOV a,eax 这样就可以了
如果楼主实在需要用“[]” 的话可以这样改:
lea edx,a;取变量A指针
mov ,a
或者用一个指针保存a的地址:
int *p = &a;
__asm{mov ,eax}//P里面已经保存了P的地址,所以这样就可以 还有一个整数最大可以存到 2的32次方,ECX应该小于或等于32 多谢 楼上的大神为我解答了 其实我只是想用那个程序来测下是汇编的run速度快还是crun的速度快.... oggplay 发表于 2014-3-28 19:52 static/image/common/back.gif
能教教我怎么把结果全部显示在.txt中吗? 可以留下个联系方式吗?? wiliam 发表于 2014-4-6 15:35 static/image/common/back.gif
能教教我怎么把结果全部显示在.txt中吗? 可以留下个联系方式吗??
看4楼的程序啊,直接编译然后运行就可以了, oggplay 发表于 2014-4-6 22:08 static/image/common/back.gif
看4楼的程序啊,直接编译然后运行就可以了,
我知道但我看不懂你那个步骤的说 想指教下 我做了个 除法器想把他的结果和余数全部显示到.txt文件中 但我却不会......
页:
[1]