大家好,今天小编关注到一个比较有意思的话题,就是关于机器语言和c的问题,于是小编就整理了3个相关介绍机器语言和c的解答,让我们一起看看吧。
C语言、汇编语言、机器指令、CPU之间是怎么联系起来的?
CPU的全称是中央处理单元,是计算机进行运算的核心,根据使用的技术不同,CPU又分为X86,X64,ARM、DSP、单片机等不同的体系结构。在每种CPU上都有一套特定的指令集,这就是人们常说的机器指令,直接使用机器指令编写的程序就是机器语言程序。
理论上来说,是可以通过机器语言直接编写任何程序的(早期都是直接使用机器语言编程,那时程序相对比较简单),并且编写的程序可以直接运行,但是使用机器语言编程对程序员的要求极高,代码无法移植且不便于人直接阅读,于是人们发明了一组符号,用来表示这些机器指令,这就是汇编语言。汇编语言编写的程序计算机无法直接运行,需要一个叫做汇编器的程序转换为机器语言才可以在特定机器上运行。
而C语言是比汇编语言更高级的语言,使用C语言编写的程序也是无法在计算机上直接运行的,它需要编译器将C语言代码转换为机器语言,这个过程又分为几个子步骤,见下图。
为了使题主的问题更加完善,在这里补充两个概念,链接器与反汇编。
在大型程序中,往往会将任务分解为许多不同的子任务,每个子任务对应一个源文件,在C语言中就是多个C文件,编译器将每个C文件编译成一个目标文件(一般在Windows中是obj文件,Linux中是
.o
通常,在查看一个二进制文件时(目标文件或者可行性文件),不会直接显示机器指令,而是以汇编语言显示,这是因为此过程中有一个反汇编程序,将机器指令转换为汇编语言,它的功能刚好与汇编过程相反。
你希望根据需要,有时对输入数据做加法,有时对输入做乘法,该怎样做呢?最早的计算机,是靠手工连线的,与其说是计算机,不如说是巨型面包板。直到冯洛伊曼的edvac计划把存储器引入计算机。
***设加法器和乘法器都具有使能端,两个使能端为01,就是加法器工作,是10,就是乘法器工作。
然后为了让电路根据要求的顺序做加法和乘法,你把一系列01、10存储起来,当你要做加法,加法,乘法,加法时,存储的就是01011001。你增加了一个时序电路,每次读出两个位,把高低电平加在两个使能端上,替代你的手工接线。01和10这两个数码能控制电路的行为,起名叫机器码。
然而这样二进制的东西并不好记忆。于是你给01起了个名字,叫add,10起名叫mul。你的这组运算就记为add,add,mul,add。
add,mul这种助记符,就叫代码,具体说是汇编代码;你会找一个悲催的助手,帮你把代码替换成01,10这种机械码。当然总有一些助手认为这个活动太没有人生价值,于是不甘心当花瓶的女助手葛丽丝·霍普(Grace Murray Hopper)设计了将代码翻译成机器码的代码,这个活儿以后就由机器来做,编译器出现了。
因此所谓cpu认识代码,是一种拟人化的修辞,偏文艺了。cpu只是一种根据高低电平输入,产生特定的高低电平输出的机器。代码不过是助记符。
后来你觉得add,add,add,add,add这类写法太烦,于是发明了五连加,7连乘之类的写法——高级语言代码诞生了。葛丽丝·霍普搞了cobol,约翰·巴科斯(John Warner Backus)搞了FORTRAN等等。
但是相对来说第一批的高级语言写起来比较烦,比如FORTRAN语言,子程序用function开头,用end结束。相信用过python的人都会觉得FORTRAN太学究气息了。
所以后来丹尼斯·[_a***_](Dennis Ritchie )在开发unix系统的同时,顺便设计了语法简单的c语言。main()可比function main()end简便多了。
CPU中包含无数微型cmos开关单元,由无数0或1的电信号控制,输出0和1的信号,这就是机器语言。c语言转换成汇编语言,再转换成机器指令控制开关,开关输出的机器语言经逻辑门运算后控制各声光设备,输出结果。
CPU的核心是运算器。
数字电路教材中,讲过加法器,数据选择器,译码器,D触发器,移位寄存器。这些就是运算器的基本构成。
cpu只认识机器码,指令和数据都用机器码序列存储。pc指针指向的当前代码就是下一步要执行的指令。
2 机器指令不好记,改用助记符如add类似的符号,好理解多了,这就出现汇编语言和汇编器。
3 还可以更接近数学描述,出现了中级语言b和c语言,有了编译器,有了面向过程的结构化程序设计方法。
4 处理字符和人机界面需要,进化出了一大批高级语言,有了面向对象方法。
5 人工智能的进步,有了初步面向问题方法,自然语言编程目前还很幼稚。
现在是4G,第四代语言时代。
谢邀。
简单说说这几者的关联吧。
通常,C语言程序可被C编译器翻译成汇编语言编写的汇编程序,汇编程序被汇编器翻译成可执行代码,而可执行代码主要包括机器指令及其使用的数据。
举例子吧:
C语言代码:
可被C编译器翻译成汇编代码(以x86 CPU为例):
可以看出,第一行C代码被翻译成两行汇编代码,第二行C代码被翻译成一行汇编代码。C代码和汇编代码没有一一对应关系。
C语言作为计算机编程语言,和我们常说的汉语,英语等人类语言有什么区别吗?
谢邀。
程序员编程时,C语言的确可以看做一门“外语”——一门我们人类与计算机交流的语言,编程就是将人类的意图通过这门“外语”翻译给计算机,计算机理解我们的意图后,就知道该做什么了。
不过,编程语言这门“外语”与我们人类之间交流的语言(汉语,英语等)还是有一些不同的,这里将尝试说说我认为的二者的区别。
在开始看 C 语言代码之前,我们先来说说“自然语言”和“形式语言”。“自然语言”就是我们人类说的语言,比如汉语,英语,日语,法语等等,自然语言并不算是人为设计的,更多的是在人类进化过程中逐步形成的。
“形式语言”则是人们为了一些特定的应用人为设计的,一般包括符号和结构的设计,比如数学算式的数字和运算符号,化学家的化学式等等。
当我们阅读一条语句时,不论它是“自然语言”还是“形式语言”,不仅要理解符号的意义,也要读懂结构的含义。例如“我想打你”这句话,不仅要知道每个字的意思,还要知道这句话的结构,“我”和“你”的位置不同,表达的意思是截然相反的。
如今,自然语言也有语言学家研究,并且加了一些加强规则,比如主谓宾的语法等。但是自然语言的规则严格性,远远没有形式语言那么苛刻。
相对于“自然语言”,“形式语言”对规则要严格的多,我们说病句,例如“我跑得快比你”和“我比你跑得快”这两句话,一般人也能懂。但是形式语言就不可以了,无论是符号错误,还是结构错误,都不能正确表示原本期望表达的含义。
单纯的从语言层面来算的话,其实也没啥区别,只是汉语和英语是需要翻译给人的,C语言是翻译给计算机的。
比如C语言的翻译流程,写代码,交给编译器,编译器翻译成汇编语言,汇编语言在翻译成二进制,这样计算机就懂了可以执行了。
汉语和英语,说话交给耳朵或者眼睛,然后在由大脑接收后翻译成人类可以理解的电信号。
C语言等编程语言
1 单词很少,也就几十个。
2 词义明确,没有一词多义现象,很容易理解。
3 没有时态语态变化,容易掌握。
4 没有词法语法修辞,谈不上是语言吧,就是个符号系统。
请不要把编程语言看做什么语言了,就是简单的符号!
plc与c语言哪个更难?
大家的观点其实一致的,C 更难。
PLC是一个控制器,不是编程语言。使用IDE按指令编写完毕,编译成字节码写入控制器执行。
C语言程序要执行,经过同样的过程,编译,并生成系统可执行文件,交由PC执行。
PLC实现了基本的常量,变量,运算,条件,跳转,循环等功能。这也是一般编程语言的基本配置。但是,PLC直接操作硬件,直接与CPU执行周期打交道,更为底层。
C,是把程序员从汇编中解救出来而产生的。语言更为高级,对编程者友好。
PLC只能用于特定控制器,百K的字节进行编码,存储数据极为有限。所以说较为小巧。复杂的系统交互,繁杂的任务调度,等等还都不够深入。
C就完全不一样,C是操作系统级的。Unix使用C编写了大多系统程序,是未计算机级别的应用软件而生。
使用C编写编译PLC程序,仅仅是小小的冰山一角。特定的库,特定的编译器。
以上。
当然是c语言难,plc一般是梯形图或st方式编程,接近实物图,基本用不到语法知识,即使基础很差的人,也可以很快上手,plc高级应用除外。c语言则需要一定的基础才能掌握
当然C语言了,难谈不上。入门都简单。C入门很简单,但是想玩的出神入化。。。。难得很!
PLC的实质就是单片机的逻辑化。可视化,让它更简单。电工级的操作就可以了。
单片机是可以制作PLC的。而单片机基本上都是C语言。
到此,以上就是小编对于机器语言和c的问题就介绍到这了,希望介绍关于机器语言和c的3点解答对大家有用。