
你要一年前问我就能顺利一点地帮你解答了~当年汇编学的还行,现在忘记的差不多了。。不过我可以简单分析一下
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语言再生成机器码没有原来汇编的效率高
用编译器自动把汇编语言翻译成C语言还做不到。而C语言反汇编成汇编语言就很自然了。(例如在c语言运行调试时就可以看到相应的汇编语句了。)如果你要用其中的一段汇编代码,可以嵌入到C语言中。
基本上,就是重新编写C程序。
其实,编写C程序,控制硬件,是C的短处。
要是以运算为主的程序,C就显得优越了。
现在既要研究变量的定义,又要考虑硬件的接口,这就太难为C语言了。
就这个题目,用C编写出来,也不见得会简短多少。
#include<reg52h>
#define u8 unsigned char
#define u16 unsigned int
#define BufSize 0x10
u8 buf[BufSize];
u8 js=0;
void main(){
SCON=0x80;
PCON=0x80;
EA=1;
ES=1;
ACC=buf[0];
TB8=P;
SBUF=ACC;
while(1);
}
void TRANI()interrupt 4
{
TI=0;
js++;
if(js==BufSize){
ES=0;
}
else{
ACC=buf[js];
TB8=P;
SBUF=ACC;
}
}
顺便优化汇编代码
BUF EQU 0X50ORG 0000H
JMP MAIN
ORG 0023H
JMP TRANI
MAIN:
MOV SCON,#0X80;
MOV PCON,#0X80
SETB EA
SETB ES
MOV R0,#BUF
MOV A,@R0
MOV C,P
MOV TB8,C
MOV SBUF,A
JMP $
TRANI:
PUSH PSW
PUSH ACC
INC R0
CJNE R0,#BUF+0x10,NEXT
JMP TEND
NEXT: MOV A,@R0
MOV C,P
MOV TB8,C
MOV SBUF,A
TEND:
POP ACC
POP PSW
RETI
以上就是关于汇编转换c语言:将下面的一段代码转换成C语言全部的内容,包括:汇编转换c语言:将下面的一段代码转换成C语言、汇编语言可以直接转化为C语言吗有没有工具、将汇编语言程序翻译成c语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)