将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);

参考技术A 说一下我自己的理解。

(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语言代码转换成汇编语言,求帮忙,建议用反汇编软件的就不要来了,我试过,那个代码太多,不实用的主要内容,如果未能解决你的问题,请参考以下文章

怎样能将汇编语言转换成c语言

C/C++语言编译生产可执行的二进制文件的过程??求大神详尽解释,

ida pro能反汇编成c语言吗

keil怎样把C语言转换成单片机汇编语言

C语言问题 将输入数字的转换成中文

求十进制转换二进制C语言代码