
汇编转化成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语言转换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)