wiliam 发表于 2014-3-27 22:44:24

关于汇编的加减程序

请教下大神   为什么程序结束后是显示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;}

oggplay 发表于 2014-3-28 19:23:24

第一次 1+1=2
第二次 2+2=4
第三次 4+4=8
。。。。。
第N次2的N次方
溢出是肯定的了(2的32次方就已经溢出了)

wiliam 发表于 2014-3-28 19:25:48

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:52:42

本帖最后由 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;

}

du0928 发表于 2014-3-28 20:20:43

多谢楼主分享

无名侠 发表于 2014-3-28 20:29:44

不是算法问题。
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的地址,所以这样就可以

无名侠 发表于 2014-3-28 20:32:26

还有一个整数最大可以存到 2的32次方,ECX应该小于或等于32

wiliam 发表于 2014-3-28 21:25:39

多谢 楼上的大神为我解答了    其实我只是想用那个程序来测下是汇编的run速度快还是crun的速度快....

wiliam 发表于 2014-4-6 15:35:07

oggplay 发表于 2014-3-28 19:52 static/image/common/back.gif


能教教我怎么把结果全部显示在.txt中吗?   可以留下个联系方式吗??

oggplay 发表于 2014-4-6 22:08:31

wiliam 发表于 2014-4-6 15:35 static/image/common/back.gif
能教教我怎么把结果全部显示在.txt中吗?   可以留下个联系方式吗??

看4楼的程序啊,直接编译然后运行就可以了,

wiliam 发表于 2014-4-7 11:32:58

oggplay 发表于 2014-4-6 22:08 static/image/common/back.gif
看4楼的程序啊,直接编译然后运行就可以了,

我知道但我看不懂你那个步骤的说    想指教下    我做了个 除法器想把他的结果和余数全部显示到.txt文件中 但我却不会......
页: [1]
查看完整版本: 关于汇编的加减程序