将C语言代码转换成汇编语言,求帮忙,建议用反汇编软件的就不要来了,我试过,那个代码太多,不实用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将C语言代码转换成汇编语言,求帮忙,建议用反汇编软件的就不要来了,我试过,那个代码太多,不实用相关的知识,希望对你有一定的参考价值。
c语言代码如下,尽可能转换成简短些的。要求就是随机出四位不同的数字,在屏幕上输入四位数,没全对就输出nAmB A代表数字对,B代表数字和位置都对。最多可以试10次,超过10次就失败了。尽可能与下面的C语言代码所能实现的功能保持一样。用32位的汇编语言。谢谢了。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
void elapsed_time()
double shijian;
shijian=(double)clock()/CLOCKS_PER_SEC;
printf("你所使用的时间为:%f 秒",shijian);
int Check(int *size)
int i=0,j=0;
for(i=0;i<4;i++)
for(j=0;j<i;j++)
if(size[i]==size[j]||size[i]==0)
return 1;
return 0;
int Compare_record(int *size)
int player,times=1,k=0,total=0;
int p_count[4],i=0,j=0;
while(times!=11)
int position=0,count=0;
printf("请输入数据.当前第%d次\n",times);
scanf("%d",&player);
while(player>9999||player<1000)
printf("输入错误!请输入一个四位数!\n");
continue;
for(i=0;i<4;i++)
k=player%10;
player=player/10;
p_count[3-i]=k;
for(i=0;i<4;i++)
if(p_count[i]==size[i])
position++;
count++;
for(j=0;j<4;j++)
if(p_count[j]==size[i]&&(i!=j))
count++;
if(position==4)
total=10000/(times+clock()/CLOCKS_PER_SEC);
printf("恭喜你猜对了\n");
printf("累计尝试次数为:%d\n",times);
elapsed_time();
printf("总分:%d\n",total);
return 1;
printf("你目前成绩为:%dA%dB\n",count,position);
times++;
printf("很遗憾,你失败了,请再接再厉吧!\n");
return 0;
int main()
int i=0,j=0,k=0,w=0;
int comp,size[4];
srand((unsigned int)time(NULL));
while(i!=4)
A:comp=rand()%(9-1+1)+1;
*(size+i)=comp;
for(k=0;k<i;k++)
if(*(size+i)==*(size+k)||*(size+i)==0)
goto A;
w=w*10+comp;
i++;
Compare_record(size);
(1)编译的过程和反编译的过程是相反的。
编译的过程一般是高级语言(如C语言)——》中间语言(只出现在编译过程中)——》汇编语言——》可执行的二进制代码
反编译就是从可执行的二进制代码开始,反着来。二进制代码反编译后一般也就是到汇编而已,通常情况下很难进一步往回反。
(2)分析一下几种语言的情况
①VC的程序
VC的程序反编译到汇编代码没有问题
②Java的程序
对于.class文件可以反编译到.java,也没有问题
③.net的程序
.net中的dll文件可以反编译到VB.net或者C#,也没有问题
反编译中用到的具体软件没有给出,可以比较容易地从网上搜索到。 参考技术B 邮箱、、、、、、 贴出来麻烦 直接给文本你、、、、、追问
tuzixihuandeluobo@163.com
本回答被提问者采纳keil怎样把C语言转换成单片机汇编语言
有C语言程序加载在KEIL中 怎样可以获得单片机汇编语言
1、打开Keil,新建一个51工程,同时新建一个main.c文件,并加入到工程源代码当中。
2、再点击新建文件按钮,新建一个汇编语言源文件:test.asm,并将它保存到指定目录。
3、在test.asm当中输入下面的代码。
4、代码编写完成后,需要将test.asm加入到工程当中,即鼠标右键点击对应工程的源程序文件夹,选择“Add Files to Group……”,软件会弹出“Add Files to Group……“对话框。
5、Keil默认的源文件是c,输入*.asm查找所有汇编语言源文件,确定后点击“Add”按钮,然后会显示该目录所有的asm文件,选择该文件再次点击“Add”即可完成添加。
6、添加完test.asm后,回到main.c,对test_fun进行声明调用,然后编译即可,正常情况是不会出现Error也不会出现Warning。
7、如果在汇编源程序的函数前没有添加RSEG语句则在编译时会出现下面的错误和警告。
参考技术A首先在keil里,设置选项时,在列表选项中的汇编代码一项打勾。见下图
然后编译,编译后,在工程的同一个文件夹下有一个.LST文件,打开就看到了汇编代码,不过,需要自己进行整理,否则,是不能直接作为汇编程序的。
下面是一个例子:这是一个主程序的汇编代码,格式就是这样的。
; FUNCTION main (BEGIN)
; SOURCE LINE # 16
;---- Variable 'k' assigned to Register 'R4' ----
; SOURCE LINE # 17
; SOURCE LINE # 19
0000 D2B2 SETB light
0002 ?C0007:
; SOURCE LINE # 20
; SOURCE LINE # 21
; SOURCE LINE # 23
0002 7F05 MOV R7,#05H
0004 120000 R LCALL _delayms
; SOURCE LINE # 25
0007 300008 R JNB blink,?C0009
; SOURCE LINE # 26
; SOURCE LINE # 27
000A 0C INC R4
; SOURCE LINE # 28
000B BC2804 CJNE R4,#028H,?C0009
; SOURCE LINE # 29
; SOURCE LINE # 30
000E B2B2 CPL light
; SOURCE LINE # 31
0010 E4 CLR A
0011 FC MOV R4,A
; SOURCE LINE # 32
; SOURCE LINE # 33
0012 ?C0009:
; SOURCE LINE # 34
0012 20B7ED JB k0,?C0007
; SOURCE LINE # 35
C51 COMPILER V7.00 LIGHT1 09/14/2015 12:54:15 PAGE 3
; SOURCE LINE # 36
0015 B200 R CPL blink
; SOURCE LINE # 37
0017 200004 R JB blink,?C0012
001A D2B2 SETB light
001C 8002 SJMP ?C0014
001E ?C0012:
; SOURCE LINE # 38
001E E4 CLR A
001F FC MOV R4,A
0020 ?C0014:
; SOURCE LINE # 39
0020 20B7DF JB k0,?C0007
0023 80FB SJMP ?C0014
; FUNCTION main (END)
参考技术B 右击C文件,进入“options for files '**.C' ”勾选这两项,再编译就会出现一个"*.src"的文件,这就是C语言的汇编文件了。自己操作一下就会的,加油,还有,当有汇编和C语言混合编程时也要选这两项。 参考技术C 只要编译通过,在调试仿真里面,程序列表就是C与汇编混合显示。以上是关于将C语言代码转换成汇编语言,求帮忙,建议用反汇编软件的就不要来了,我试过,那个代码太多,不实用的主要内容,如果未能解决你的问题,请参考以下文章