汇编语言可以直接转化为C语言吗有没有工具

汇编语言可以直接转化为C语言吗有没有工具,第1张

汇编转化成C语言是非常困难的 因为有些指令只在汇编里面有C语言是不支持的

例如对寄存器 *** 作之类的

目前还没有汇编转C语言的工具

大多数只能手动转但是转过的C语言再生成机器码没有原来汇编的效率高

用编译器自动把汇编语言翻译成C语言还做不到。而C语言反汇编成汇编语言就很自然了。(例如在c语言运行调试时就可以看到相应的汇编语句了。)如果你要用其中的一段汇编代码,可以嵌入到C语言中。

程序有很多问题,做了部分修改

#include<reg51h>

#define uchar unsigned char

sbit p10=P1^0;

sbit p30=P3^0;

sbit p31=P3^1;

sbit p12=P1^2;

void delay()

{

uchar i,j;

for(i=0;i<170;i++)

for(i=0;i<187;i++);

}

void alarm()

{

uchar times;

p12=1;

p30=0;

p31=0;

times=0x14;

TMOD=0x01;

TH0=0x3c;

TL0=0xb0;

TR=1;

while(times)

{

while(TF0==0);

TF0=0;

TH0=0x3c;

TL0=0xb0;

times--;

}

p30=1;

p31=0;

p12=0;

}

void pint0() interrupt 0

{

EX0=0;

if(p32==0)

{

delay();

if(p32==0)

{

p30=1;

p31=0;

p12=0;

}

}

EX0=1;

}

main()

{

IE=0x81;

IT0=1;

SP=0x30;

p30=1;

p31=1;

P1=0xff;

P2=0x00;

p12=0;

while(1)

{

if(p10==0)

{

delay();

if(p10==0)alarm();

}

}

}

基本上,就是重新编写C程序。

其实,编写C程序,控制硬件,是C的短处。

要是以运算为主的程序,C就显得优越了。

现在既要研究变量的定义,又要考虑硬件的接口,这就太难为C语言了。

就这个题目,用C编写出来,也不见得会简短多少。

你要一年前问我就能顺利一点地帮你解答了~当年汇编学的还行,现在忘记的差不多了。。不过我可以简单分析一下

MOV

R0,

#00H就是吧0放到R0这个寄存器,#0FFH这个是16进制的数,对应2进制11111111,,JZ是根据ZF决定是否跳转,ZF是标志寄存器中的一位,若ZF=1,则跳转,否则,不跳,ZF是看运算结果是不是0的,是0就为1,不是就为0。

那个P1是不是写错了?感觉应该是R1吧。。。

XRL

A

,

#0FFH,寄存器A中的内容和后面那个#0FFH执行逻辑异或 *** 作。结果存放在A中。

DJNZ是用来控制循环次数的,DJNZ

R3,SS,意思就是执行这一句,R3里面的数值自动减一,看是不是0,不是0就跳到SS的标识符语句后,是0就顺序执行。

DIV

AB应该是DIV

A,B吧,我感觉,就是用A里面的数除以B里面的数,结果放进A寄存器。

SJMP是相对转移指令,没有条件。

ACALL就是调用子程序,好像是多少字节距离内的可以调用,我忘了,不过这里不影响,就是调用MOV

R1,

#249这个。

NOP好像是用来清空标志位的。

汇编逻辑要求有点高,子程序调用这块要设计栈的栈底和栈顶指针的变化,我不太记得了,有点混乱。。。程序差不多就是表达个这个意思,结合这些然后转换成c的函数,看自己喜欢怎么写咯。

不好意思不能回答的很确切,我就记得那么多了~你如果在学那应该很容易解决,没有学的话可以看点资料,其实我觉得汇编很容易理解,比较底层么,直来直去的,就是逻辑有点麻烦~

有可能有些说的不确切,还望谅解~

其实通常可以这么处理

>

以上就是关于汇编语言可以直接转化为C语言吗有没有工具全部的内容,包括:汇编语言可以直接转化为C语言吗有没有工具、将汇编语言程序翻译成c语言、汇编语言与C语言转换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9789529.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存