怎样能将汇编语言转换成c语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样能将汇编语言转换成c语言相关的知识,希望对你有一定的参考价值。

1、打开IAR FOR STM8工程。

2、编一段C语言的延时程序,作为例子。

3、如何在目前实例上,添加我们的汇编。

4、编译一下是否可以编译通过,编译提示OK。

5、进入仿真界面,是否可以运行。把断点设在汇编的程序上,运行后,可以在断点处停止,说明仿真也是正常的。

参考技术A

理论上来说C语言改成汇编是完全可以的,当然实际上还是有一定难度。

1、完全手工根据C语言的流程和目的,改编成汇编语言,这样做工作量很大

2、利用仿真软件,在仿真环境下,是有相应的汇编代码的,这样做工作量相对较小,但可读性较差。

参考技术B 其实将汇编转换成C语言也不是不可以的,小的程序是没有问题的,大的程序或许不能转换,我以前在学习单片机时,我先学的汇编语言,后来发现用C编写会更适合大项目的开发,于是我就学习C语言,那时我就试着将自己以前编写的汇编程序编写成C语言程序,我是自己通过思路来转换的,这样的转换软件似乎没有吧,这个我不清楚!我的体会就是,如果C语言的逻辑性特别强的程序转换成汇编难度会很大的,这是我的亲身体会。汇编转换成C语言还是可以的,通过软件可能没有吧,通过自己的头脑来转换吧!关键是得付出!祝你成功! 参考技术C 目前的反编译软件,只存在将机器指令码反汇编成汇编代码,不存在将汇编代码反编译成C语言的,因为汇编代码是低级语言,最接近于机器码(具体可查看不同硬件平台的技术资料),每条汇编指令都对应一个固定的机器码,这样进行反汇编是可行的,而C语言属于高级语言,编译器没有能力将汇编语言翻译成C或更高级的语言。 参考技术D 如果 只是简单的几行,可以把编译后的exe文件,用系统自带的debug(windows键+R打开 运行窗口 输入debug 空格 exe的路径)打开debug后,输入U可以看到几行汇编代码。
如果是源代码 在vs编译器中调试运行,菜单上的:调试--窗口--反汇编 可以查看,如果是其他编译器 仔细找找也带反汇编的
要资料的话 [天书夜读-从汇编语言到Windows内核编程].谭文.邵坚磊. 这本书的基础部分里 有c语言与汇编的转换

C语言中 怎样把一个int转换成char

大家好 我是编程新手,有如上问题,
譬如说 int a=8; 我要怎样 char b 把这个a转换成char。我懂如果a是固定的,就看ascii table来把b写死也是,但是我的a是个变量, 怎样表示char b呢?

谢谢!

内容为数字的char,包含
0,1,2,3,4,5,6,7,8,9
共计10个字符。
这十个字符在存为字符型时,其存储值为对应的ascii码,而这些ascii码是连续的,且按照其本身数字的大小来排列。
这样就可以将字符值,减去起始ascii码值实现转为对应值的效果。

int a; //转换的目标变量。
char c = \'7\'; //要转换的字符。
c = a - \'0\';
这样得到的就是对应的值了,即c = 7。
如果在文件中需要多次该操作,则可以定义一个带参宏,如下:
#define chartonumber(x) (x-\'0\')
这样只需要调用
c = chartonumber(a);
即可实现效果。
参考技术A 有个函数叫itoa,用法是这样的:
itoa(数字,目标字符串,进制),
如char str[100];
int num = 123;
itoa(num, str, 10);追问

谢谢回答 那这个函数需要加header吗?还是讲可以直接拿来用?

追答

要加头文件的,是#include
不过有一点需要注意:
itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使用。但是,大多数的编译器(如Windows上的)通常在头文件中包含这个函数。
不过你也不用担心,只要你写的代码能通过编译并运行就行,只要知道有这件事就行了。

追问

可我用的程序不是visual studio 我的是用来把程序烧进单片机的。我没有这个header 我跑程序的时候 有错误。还有别的办法可以转换吗?

追答

据我所知,Keil 里面是有stdlib.h的吧。。你检查一些有没有书写错误。

不然我们自定义这个函数好了。。

#include<iostream>
#include<windows.h>
#include<string>
#include<cstdlib>
using namespace std;

void change(int num, char *str)

    int p = 0;
    int tmp = num;
    while(tmp)
    
        p++;
        tmp /= 10;
    
    if(num > 0)p--;
    tmp = num > 0 ? num : -num;
    while(tmp)
    
        str[p] = (tmp%10) + '0';
        p--;
        tmp /= 10;
    
    if(num < 0)str[0] = '-';


int main()

    char str[100];
    change(1234, str);
    change(-12345, str);
    printf("%s\\n", str);
    getchar();
    return 0;

写的可能比较粗糙,你可以看着改进改进。。

追问

谢谢你!我用的也不是keil 我用的是Flyport IDE 他的header format跟keil有区别,你的code 我这放进去试一下 如果不行 我尝试别的方法 不转换了,直接从别的地方串口读。but thank you anyway!! :)

追答

单片机硬件这些我不太懂,不过希望我的代码能起作用吧 :)

本回答被提问者采纳

以上是关于怎样能将汇编语言转换成c语言的主要内容,如果未能解决你的问题,请参考以下文章

C语言中 怎样把日期转换成字符串

keil怎样把C语言转换成单片机汇编语言

c语言,用循环的方法将字符串“123”转化成数字123,应该怎样写?

C语言中怎样调用函数将十进制转换成二进制?

在C语言中怎样编写代码实现把浮点数转换成字符串

C语言 数组类型转换,怎样将一个float类型的数组转换成字符(串)数组?