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

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

汇编转化成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

基本上等价于下面这条语句:

return (((z - y) & 0x0001ffff) ((z - y) ^ x));

%edx中保存(z - y)的值,将这个值赋给%eax后,%eax进行左移和右移15位其实就是对高15位置零,即(z - y) & 0x0001ffff

xorl 8(%ebp),%edx等价于(z - y) ^ x

最后将两个结果相乘

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

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

原文地址: http://outofmemory.cn/zz/9710779.html

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

发表评论

登录后才能评论

评论列表(0条)

保存