鱼C论坛

 找回密码
 立即注册
查看: 2001|回复: 10

关于汇编的加减程序

[复制链接]
发表于 2014-3-27 22:44:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教下大神   为什么程序结束后是显示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 [a],EAX
}
printf("%d",a);
return 0;}

点评

应该不是ECX的关系,请转自6楼  发表于 2014-3-28 20:31
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-28 19:23:24 | 显示全部楼层
第一次 1+1=2
第二次 2+2=4
第三次 4+4=8
。。。。。
第N次  2的N次方
溢出是肯定的了(2的32次方就已经溢出了)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 19:25:48 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-28 19:52:42 | 显示全部楼层
本帖最后由 oggplay 于 2014-3-28 19:58 编辑
wiliam 发表于 2014-3-28 19:25
那请问下 如果要算1024次方该如何去改??  大神???

  1. //结果保存到文件里1.txt。
  2. //m表示底数 t输入几次方
  3. #include <stdio.h>

  4. #define M 10000



  5. int  main()

  6. {

  7. unsigned a[M];  

  8. unsigned long k;  

  9. int i,j,m,t,n=1,r;

  10. FILE *fp;

  11. a[0]=1;

  12. printf("\n输入m and t(空格隔开: m^t = ?):");

  13. scanf("%d %d",&m,&t);



  14. for(j=0; j<t; j++)

  15. {

  16.        r=0;

  17.        for(i=0; i<n; i++)

  18.        {

  19.          k=a[i]*m+r;

  20.          a[i]=k%10000;

  21.          r=k/10000;

  22.        }



  23.    while(r>0)

  24.        {

  25.          a[n++]=r%10000;

  26.          r/=10000;

  27.        }

  28. }

  29. fp=fopen("1.txt","w");

  30. printf("\n %d^%d =",m,t);

  31.   

  32. for(i=n-1; i>=0; i--)

  33. { if(a[i]<1000&&a[i]>=100&&i!=n-1) fprintf(fp,"%c",'0');   

  34. else if(a[i]<100&&a[i]>=10&&i!=n-1) fprintf(fp,"%s","00");

  35. else if(a[i]<10&&i!=n-1) fprintf(fp,"%s","000");

  36.        fprintf(fp,"%d",a[i]);

  37. }

  38. close(fp);
  39. printf("\n");
  40. return 0;

  41. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-28 20:20:43 | 显示全部楼层
多谢楼主分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-28 20:29:44 | 显示全部楼层
不是算法问题。
MOV [a],EAX 这是关键 [a] 表示用a中的内容做寻址的地址
如果a是1,那么EAX就被存到1号地址单元了
MOV a,eax 这样就可以了
如果楼主实在需要用“[]” 的话可以这样改:
lea edx,a  ;取变量A指针
mov [edx],a
或者用一个指针保存a的地址:
int *p = &a;
__asm{mov [p],eax}  //P里面已经保存了P的地址,所以这样就可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-28 20:32:26 | 显示全部楼层
还有一个整数最大可以存到 2的32次方,ECX应该小于或等于32
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 21:25:39 | 显示全部楼层
多谢 楼上的大神为我解答了    其实我只是想用那个程序来测下是汇编的run速度快还是c  run的速度快....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-6 15:35:07 | 显示全部楼层

能教教我怎么把结果全部显示在.txt中吗  ?     可以留下个联系方式吗??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-6 22:08:31 | 显示全部楼层
wiliam 发表于 2014-4-6 15:35
能教教我怎么把结果全部显示在.txt中吗  ?     可以留下个联系方式吗??

看4楼的程序啊,直接编译然后运行就可以了,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-7 11:32:58 | 显示全部楼层
oggplay 发表于 2014-4-6 22:08
看4楼的程序啊,直接编译然后运行就可以了,

我知道  但我看不懂你那个步骤的说    想指教下    我做了个 除法器想把他的结果和余数全部显示到.txt文件中 但我却不会......
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 20:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表