汇编转换c语言:将下面的一段代码转换成C语言

汇编转换c语言:将下面的一段代码转换成C语言,第1张

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

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 0X50

ORG 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语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存