编程语言
文章福利:私藏已久的python书籍分享一波,附阅读顺序
信息的有效传递至少需要传递者、接收者、共识信息等才能构成一个闭环,举个栗子(如下图):
信息在上图中其实就是 ‘中文’,共识的意思就是都能听的懂,下图是一个无效的信息传递:
人们想要和计算机打交道并且让计算机帮助我们去做一些事情时,作为主动传达信息的人们则需要‘说’一些计算机能听懂的‘语言’(0010100110)也就是常说的编程语言。
计算机早期的时候人们的目的只有一个,让计算机能听懂就行,于是就有了早期的编程语言-机器语言(Machine Language)
机器语言有个特点就是由0和1组序列组成的指令码,如下示例:
# 指令示例
0000 代表 LOAD
0001 代表 SET# 内存示例
000000000000 代表 地址为0的内存区域
000000000001 代表 地址为1的内存区域
000000001000 代表 地址为16的内存区域# 暂存器示例
0000 代表 暂存器A
0001 代表 暂存器B# 将上述集成在一起示例
-----------------------------------------------------
指令 暂存器 内存地址 含义
-----------------------------------------------------
0000,0000,000000000001 LOAD,A,1(加载内存地址为1的暂存器A)
好了,计算机这回算是听的懂人们说的了,但是程序员们可要忙坏了
许多繁杂琐碎的细节牵制着程序员,即使智力超群的程序员也常常会顾此失彼,屡出差错,因而所编出的程序可靠性差,且开发周期长。因此机器语言也被称为 低级语言(相对)
人们的思想一直在演变与进步,为了更加友好的写出计算机能听得懂的语言,于是就有了第二代编程语言--汇编语言(Assembly Language),其特点是用一些容易理解和记忆的字母,单词来代替一个特定的指令
# 简单示例
START 表示 程序的入口
END START 表示 程序结束
DATA SEGMENT 表示 定义数据段,可以把数据放入这个段内
DATA ENDS 表示 数据段结束
下面是用汇编语言实现的输出 ‘Hello World!’ 先来感受一下(左右滑动有注释)
DATA SEGMENT ;定义数据段
PRINT DB "Hello World!", 0AH, 0DH, '$' ;定义一个字符串,以'$'结束
DATA ENDS ;定义数据段结束
STACK SEGMENT STACK ;定义堆栈段 DW 20 DUP(0) ;为堆栈段分配空间
STACK ENDS ;定义堆栈段结束
CODE SEGMENT ;定义代码段
ASSUME CS:CODE, DS:DATA, SS:STACK ;告诉编译器将段寄存器与符号对应起来
START: ;程序入口MOV AX, DATA MOV DS, AX ;将段地址DATA送入DS中MOV DX, OFFSET PRINT ;将字符串地址送人DX中MOV AH, 09HINT 21H ;调用INT 21H的9号中断MOV AH, 4CH ;返回DOS系统INT 21H
CODE ENDS ;定义代码段结束
END START ;程序结束
目测一下,汇编语言比起机器语言仅仅只是在编写量和程序员维护起来方便了那么一丢丢,其编写层面上还是要懂得CPU运行、内存空间加载的原理,还是直接操作硬件来传达信息,并没有什么实质上的改变。
因此汇编语言和机器语言一样都被称为 低级语言。
优点对比总结:
机器语言:编写的程序指令(1100101001)可以被计算机无障碍理解并直接运行,没有中间商赚差价,效率贼高。
汇编语言:使用易懂的英文编写,执行效率比机器语言稍低(仍然是直接操作硬件)
缺点对比总结:
机器语言:仍然是直接操作硬件,因此开发复杂效率低跨平台性差
汇编语言:同上
万物星辰都在不断演变,如今我们谈论到的低级语言是站在现在环境的角度去评价的,然而在语言的诞生时代,是非常有意义的,现在今后也一样。
更多精彩内容请关注 公众号:数据与编程之美
编程语言
文章福利:私藏已久的python书籍分享一波,附阅读顺序
信息的有效传递至少需要传递者、接收者、共识信息等才能构成一个闭环,举个栗子(如下图):
信息在上图中其实就是 ‘中文’,共识的意思就是都能听的懂,下图是一个无效的信息传递:
人们想要和计算机打交道并且让计算机帮助我们去做一些事情时,作为主动传达信息的人们则需要‘说’一些计算机能听懂的‘语言’(0010100110)也就是常说的编程语言。
计算机早期的时候人们的目的只有一个,让计算机能听懂就行,于是就有了早期的编程语言-机器语言(Machine Language)
机器语言有个特点就是由0和1组序列组成的指令码,如下示例:
# 指令示例
0000 代表 LOAD
0001 代表 SET# 内存示例
000000000000 代表 地址为0的内存区域
000000000001 代表 地址为1的内存区域
000000001000 代表 地址为16的内存区域# 暂存器示例
0000 代表 暂存器A
0001 代表 暂存器B# 将上述集成在一起示例
-----------------------------------------------------
指令 暂存器 内存地址 含义
-----------------------------------------------------
0000,0000,000000000001 LOAD,A,1(加载内存地址为1的暂存器A)
好了,计算机这回算是听的懂人们说的了,但是程序员们可要忙坏了
许多繁杂琐碎的细节牵制着程序员,即使智力超群的程序员也常常会顾此失彼,屡出差错,因而所编出的程序可靠性差,且开发周期长。因此机器语言也被称为 低级语言(相对)
人们的思想一直在演变与进步,为了更加友好的写出计算机能听得懂的语言,于是就有了第二代编程语言--汇编语言(Assembly Language),其特点是用一些容易理解和记忆的字母,单词来代替一个特定的指令
# 简单示例
START 表示 程序的入口
END START 表示 程序结束
DATA SEGMENT 表示 定义数据段,可以把数据放入这个段内
DATA ENDS 表示 数据段结束
下面是用汇编语言实现的输出 ‘Hello World!’ 先来感受一下(左右滑动有注释)
DATA SEGMENT ;定义数据段
PRINT DB "Hello World!", 0AH, 0DH, '$' ;定义一个字符串,以'$'结束
DATA ENDS ;定义数据段结束
STACK SEGMENT STACK ;定义堆栈段 DW 20 DUP(0) ;为堆栈段分配空间
STACK ENDS ;定义堆栈段结束
CODE SEGMENT ;定义代码段
ASSUME CS:CODE, DS:DATA, SS:STACK ;告诉编译器将段寄存器与符号对应起来
START: ;程序入口MOV AX, DATA MOV DS, AX ;将段地址DATA送入DS中MOV DX, OFFSET PRINT ;将字符串地址送人DX中MOV AH, 09HINT 21H ;调用INT 21H的9号中断MOV AH, 4CH ;返回DOS系统INT 21H
CODE ENDS ;定义代码段结束
END START ;程序结束
目测一下,汇编语言比起机器语言仅仅只是在编写量和程序员维护起来方便了那么一丢丢,其编写层面上还是要懂得CPU运行、内存空间加载的原理,还是直接操作硬件来传达信息,并没有什么实质上的改变。
因此汇编语言和机器语言一样都被称为 低级语言。
优点对比总结:
机器语言:编写的程序指令(1100101001)可以被计算机无障碍理解并直接运行,没有中间商赚差价,效率贼高。
汇编语言:使用易懂的英文编写,执行效率比机器语言稍低(仍然是直接操作硬件)
缺点对比总结:
机器语言:仍然是直接操作硬件,因此开发复杂效率低跨平台性差
汇编语言:同上
万物星辰都在不断演变,如今我们谈论到的低级语言是站在现在环境的角度去评价的,然而在语言的诞生时代,是非常有意义的,现在今后也一样。
更多精彩内容请关注 公众号:数据与编程之美