汇编程序是什么语言编写的,汇编程序与汇编源程序的区别
- 软件开发
- 2023-08-13
- 97
大家好,如果您还对汇编程序是什么语言编写的不太了解,没有关系,今天就由本站为大家分享汇编程序是什么语言编写的的知识,包括汇编程序与汇编源程序的区别的问题都会给大家分析到...
大家好,如果您还对汇编程序是什么语言编写的不太了解,没有关系,今天就由本站为大家分享汇编程序是什么语言编写的的知识,包括汇编程序与汇编源程序的区别的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
汇编语言代码是计算机程序吗
汇编语言接近于机器语言,只是不直接使用机器代码,因为他们都是二进制数不容易记忆,为了方便,就将他们换成一些简短的单词,就是指令,通过指令可以调度存储器,累加器等等的硬件资源,这样可以快速运行程序,直指要害,但是不容易做总体上的理解,即在程序没有说明的时候,你要花一段时间去推敲是用来干什么的,还有就是比较罗嗦,这是低级语言的缺陷;
C语言就比较通俗易懂,可以很快了解程序的用途,容易修改和扩张,但不利于把握程序的实时性,即你不能精确掌握每条语句所花费的时间
汇编语言是一种什么语言好学吗
汇编语言是面向机器的语言,而不是机器语言。机器语言和汇编语言都是最低级的编程语言,面向机器,但最最低级的还是费解的机器语言:0和1。汇编语言的创造是因为在早期人们长期与计算机痛苦地交流之后随着对机器语言和自然语言、数学语言结合的强烈渴望,开始用一些例如ADD、MOV这样的单词表示一些操作,汇编语言可以直接操控硬件,是面向机器的低级语言,效率相当高,功能相当强,想学精通比较不易,C语言、C++、JAVA、C#、VB这些语言是面向过程和面向对象的高级语言,是汇编语言的小弟,效率更低,更好学,可移植性更好,不直接面向机器。
一般的大型软件(例如腾讯QQ和迅雷)使用C++等语言编写,很多热门应用和程序使用JAVA等语言制作,例如Windows和Linux这样的操作系统使用汇编语言和C语言结合编写。请那些回答什么机器语言啦、最低级的语言(你不知道还有个机器语言顶着呢么)的人自重!
C语言本身是用什么语言写的
既然你能提出这个级别的问题,说明你应该学过C。既然你能提出这个级别的问题,说明你没学过编译原理(或者全还给老师了[捂脸],容我不厚道一下下)。
你所谓的"C语言",准确来说,指的是能把C语言程序翻译成机器指令程序的"编译器"程序。
先用汇编写一个极小的原始编译器(AC),能编译最简单的C语法。然后用该原始编译器AC编译一个最简单的C编译器(CC1)。然后用CC1编译一个稍微复杂一点的C编译器(CC2)。最终,像滚雪球一样,C语言就把一个拥有完全编译功能的C编译器给编译出来了。
推荐资料:陈火旺老师的经典教材《编译原理》,开篇讲的就是这个问题。
socket编程能用汇编语言实现吗
是的,可以用汇编语言实现socket编程。
下面是一个用汇编语言实现的TCP服务器的例子(基于Linux):
```C
section.data
server_portdb"1234";服务器端口
listen_qdb5;listen队列长度
buffer_sizeequ1024;接收和发送缓冲区大小
section.text
global_start
_start:;创建套接字
moveax,1;syscall编号1-SYS_SOCKET
movebx,1;AF_INET
movecx,1;SOCK_STREAM
xoredx,edx;protocol=0
int0x80;调用系统调用
;将套接字绑定到指定端口
moveax,2;syscall编号2-SYS_BIND
movebx,[esp+8];socketfd
xorecx,ecx;本机地址
movcl,byte4;地址族AF_INET
pushecx;端口号存放在栈中
moveax,32;syscall编号32-SYS_GETPID
int0x80;获取当前进程ID
pusheax;IP地址(本机IP地址)
movecx,esp;把IP地址和端口号都保存到ecx寄存器中
addcl,4
movedx,byte16;地址长度
int0x80
;listen等待连接
moveax,4;syscall编号4-SYS_LISTEN
movebx,[esp+8];socketfd
movecx,listen_q;listen队列大小
int0x80;监听
accept_loop:
;接收连接请求
moveax,5;syscall编号5-SYS_ACCEPT
movebx,[esp+8];socketfd
xorecx,ecx;无连接
xoredx,edx;无连接
int0x80;接受请求
;读取客户端发送的数据
;假设客户端最多发送buffer_size大小的数据
moveax,3;syscall编号3-SYS_READ
movebx,eax;使用accept返回的文件描述符
leaecx,[esp+4+buffer_size];接收缓冲区
movedx,buffer_size;缓存区大小
int0x80
;发送回复数据给客户端
moveax,4;syscall编号4-SYS_WRITE
movebx,eax;使用accept返回的文件描述符
movecx,[esp+4];数据
movedx,eax;数据长度
int0x80
;关闭客户端套接字
moveax,6;syscall编号6-SYS_CLOSE
movebx,eax;使用accept返回的文件描述符
int0x80
;循环等待新的连接请求
jmpaccept_loop
```
以上是一个简单的TCP服务器,用到了Linux平台的系统调用。
需要注意的是,用汇编语言实现socket编程需要对网络协议、OS系统调用等有一定的了解,并且汇编语言编写的程序难以维护和管理,因此在实际开发中建议使用更高级的编程语言来实现。
C语言是用什么编出的
首先答案是c语言是用c语言编写。
语言自举性一个语言能否自己编写自己实现自己编译,这叫自编译,自举性。目前能实现自举性的语言没有几个,而自举性也就成了一个语言能否真实强大的标志。
一般来说图灵完备的语言,编译型语言,虚拟机语言可以实现自举。而解释型语言基本上很难。
现代很多语言都没实现自举,Java(jvm),Javascript,python,ruby,lua,php,perl……一堆。这些语言编译器、解释器都是c语言。
一个语言能自举是他们社区和开发一直梦寐以求的事情,也是他们情怀和追求所在。有一个语言为了实现自举成功,花了近20年,前年圣诞节才正式推出了第一个正式版本。它就是perl6,perl的下一代语言。perl6支持过程、OO、函数式三种程模式,支持虚拟机的语言(自己的虚拟机和jvm)。为了做好perl6,社区搞了一个功能启示录,把要实现的功能好点子都录进去。后来一个日本人参考这个启示录自己实现了一个语言,这就有了ruby语言,但是ruby没有自举。
c语言的自举过程和交叉编译我在以前的回答中,曾说过c语言的来历:
上世纪70年代,为了实现unix,教主Tomphson和Ritchie开发了B语言,但是b语言性能不行,编写也较繁琐,所以又在B语言的基础上开发出了现在的C语言。
第一个C语言编译器的原型是用B语言或者混合B和汇编语言编写的。采用部分实现功能,交叉编译方式实现。
先用B和汇编语言编写一个C语言的部分必须功能的编译器,再通过这个编译器,完成完整的C语言编译器。详细过程如下:
1、先编写一个只有C语言最基本功能编译器C0语言,用汇编语言编写出C0的编译器。
2、接着用C0实现比C0复杂,功能不完整的C语言子集C1语言,用C0编译出C1语言的编译器。
3、在C1-〉c2……如此循环直到Cn,Cn功能已经强大到可以实现C。
4、用Cn编译实现了第一个c语言编辑器,即C实现了自举。
文章到此结束,如果本次分享的汇编程序是什么语言编写的和汇编程序与汇编源程序的区别的问题解决了您的问题,那么我们由衷的感到高兴!
本文链接:http://www.xinin56.com/ruanjian/9546.html