⑴ 从汇编语言到机器语言需要编译器吗
由汇编语言源程序生成机器语言程序,必须使用编译软件(或称编译器),
例如 Keil ,就是可在Windows平台运行的编译软件。
⑵ 高级编程语言也要编译成汇编语言,不同的cpu汇编语言不一样,那会编译成那种汇编语言呢
高级语言一般最终不是编译成汇编语言而是机器语言,而像C#这类语言编译后为公共语言,不是机器码,运行时公共语言代码由NET框架负责进一步即时翻译即时执行为机器指令。只有C++这类语言编译后为CPU可以直接执行的机器码。
附图是VS2019中C++语言的一段调试时的反汇编窗口,其中白字是C++源代码,下面是对应的汇编码,汇编行左列为内存地址,中间是对应的机器指令和数据(内存中的实际值),右侧是对应的汇编码。
比如,定义整数变量a并赋值1的语句,被编译器编译成C7 45 F8 01 00 00 00 这样几个字节,其中C7为汇编码中的MOV指令,可以操作16位寄存器和内存以及立即数,45 F8 是当前命名空间中变量地址,即变量a的地址(F845),而01 00 00 00 为32位宽度的数值1(内存排列顺序是前低后高)。也就是说机器语言的指令格式为:指令代码,地址,数据,当然根据不同指令,有时候地址和数据是不需要的。而右侧 MOV dword ptr[a],1 是指令助记符,也就是汇编指令,而用汇编指令编写的程序也是需要编译成机器指令的。
指令C7对应的汇编码及含义
⑶ 汇编语言是一种符号化的机器语言对吗
对。
汇编语言面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的,保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等,目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
(3)汇编语言还用编译为机器语言吗扩展阅读:
注意事项:
汇编语言(assembly language)包含用短助记符如 ADD、MOV、SUB 和 CALL 书写的语句。汇编语言与机器语言是一对一(one-to-one)的关系:每一条汇编语言指令对应一条机器语言指令。
高级语言如 Python、C++ 和 Java 与汇编语言和机器语言的关系是一对多(one-to-many)。比如,C++ 的一条语句就会扩展为多条汇编指令或机器指令。
⑷ 汇编语言是不是最容易被计算机翻译成机器语言
汇编语言和机器语言的指令是一一对应的(就像英文字母的大写字母和对应的小写字母一样),根本就没有翻译的过程,这个过程叫做汇编,所以叫汇编语言,当然你要把这个过程叫做翻译也是可以的。既然是一一对应的映射关系,那自然是最快的了
因为不同的硬件体系其机器语言指令集不同,所以汇编语言自然也不同,也就没有可移植性。
机器语言和汇编语言的代码逻辑是一模一样的,汇编指令仅仅是个助记符而已,就是个别名
比如 MOV AX,BX 对应的8086机器码就是8BC3,在任何8086平台上都是这样的。
这和高级语言不同,高级语言的代码用不同的编译器编译出来的机器码可能不同,甚至用同一的编译器在不同环境下编译出来的机器码也可能不同
比如除以2 ,编译器可能处理成除法指令,也可能处理成右移一位的方式
⑸ 汇编语言是一种机器语言吗怎么有的说不是有的说是啊
汇编不是机器语言。
汇编语言(Assembly Language)是面向机器的程序设计语言.汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言”作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM, TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
在汇编语言中,用助记符(Mnemonic)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。
汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。
汇编语言的特点:
1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
2.保持了机器语言的优点,具有直接和简捷的特点。
3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
5.经常与高级语言配合使用,应用十分广泛。
汇编语言的应用:
1.70%以上的系统软件是用汇编语言编写的。
2.某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。
3.某些高级绘图程序、视频游戏程序是用汇编语言编写的。
汇编语言是我们理解整个计算机系统的最佳起点和最有效途径
人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。
所有可编程计算机都向人们提供机器指令,通过机器指令人们能够使用机器的逻辑功能。
所有程序,不论用何种语言编制,都必须转成机器指令,运用机器的逻辑功能,其功能才能得以实现。
机器的逻辑功能,软件系统功能构筑其上,硬件系统功能运行于下。
汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。
学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机系统的最佳起点和最有效途径。
⑹ 有关高级语言和汇编语言的一些问题
问题太长了
关于移植问题,之所以汇编语言移植性,而高级语言移植性好,是因为汇编语言转成的机器码跟具体CPU指令集相关,而CPU不只是有intel,还有一些其他架构CPU,这些CPU架构不同指令集也不一样,所以并不通用。
之所以高级语言移植性好,比如C/C+-,是因为在语言包装层面上已经实现了通用!同一个print函数,在不同操作系统上,分别使用本地系统API函数来实现print函数,所以在语言层面上自然就实现了通用。而你编写的程序使用的是C语言的print函数,而不是本地系统的API,这里的lrint是可移植在哪都好用。
高级语言,也可以通过编译参数转成汇编语言代码,为了查看对比调试等,这只是一个附带的中间过程如果有需要的话。当然编译结果就是最终的二进制可执行文件。而且,在什么平台就会编译成本地平台的指令,这里指令指的是不同的CPU。在什么平台就会生成什么平台可执行格式,这里的平台指的是windows Linux mac等操作系统。
系统API,只是在本地好用,windows的不能用在Linux上,同理。
中断概念没什么区别,可能对于处理方式会有不同罢了。
⑺ 机器语言是汇编语言转过来的吗。就像高级语言通过编译器转到汇编语言,似得。请详解。
机器语言 可以是人工编制,最好人们就用机器语言编程的,十分十分的辛苦和容易出错。
机器语言当然不是汇编语言“转”过来的,汇编语言经过编译会最终生成机器语言。高级语言编译后也不是生成汇编语言,而是生成机器语言,CPU只认机器语言。
⑻ 汇编语言原程序用编译程序将其翻译为机器语言程序对不对
严格地讲,不对。
编译程序,是对高级语言程序进行翻译的程序。它具有语法分析重构的过程。
汇编语言源程序的翻译,只是简单的查表式翻译,不需要按语法进行分析和重构。
将汇编语言的源程序翻译成机器语言的翻译程序,不能称之为“编译程序”,而是叫做“汇编程序”。
`
⑼ 高级语言是直接编译成机器码的吗还是先编译成汇编语言再由汇编语言编译成机器吗
机器语言就是直接的二进制代码,是硬件能直接执行的最低级代码
汇编语言是仅次于机器语言的低级语言,也能由硬件直接执行,只是代码为了方便阅读和记忆而使用符号化的语言
高级语言基本上不跟硬件打交道的,需要有编译器编译后机器才能执行
(个人理解)