一、高级语言和低级语言

最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译,从纸带打孔输入即可执行得到结果。后来为了方便记忆,就将用0、1序列表示的机器指令都用符号助记,这些与机器指令一一对应的助记符就成了汇编指令,从而诞生了汇编语言。无论是机器指令还是汇编指令都是面向机器的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。但汇编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指令的方法,那就是交叉汇编技术。

  高级语言是从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高,需要经过编译成特定机器上的目标代码才能执行,一条高级语言的语句往往需要若干条机器指令来完成。高级语言独立于机器的特性是靠编译器为不同机器生成不同的目标代码(或机器指令)来实现的。那具体的说,要将高级语言编译到什么程度呢,这又跟编译的技术有关了,既可以编译成直接可执行的目标代码,也可以编译成一种中间表示,然后拿到不同的机器和系统上去执行,这种情况通常又需要支撑环境,比如解释器或虚拟机的支持,Java程序编译成bytecode,再由不同平台上的虚拟机执行就是很好的例子。所以,说高级语言不依赖于机器,是指在不同的机器或平台上高级语言的程序本身不变,而通过编译器编译得到的目标代码去适应不同的机器。从这个意义上来说,通过交叉汇编,一些汇编程序也可以获得不同机器之间的可移植性,但这种途径获得的移植性远远不如高级语言来的方便和实用性大。

二、编译与解释

    编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。

  解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。

  编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
  而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。

三、程序要素

  • 名称

  名称是编程的重要组成部分,为模块、函数、变量等命名。这些名称都称为标识符。选择标识符的名字通常能描述被命名的东西。

  Python对标识符构成规则:每个标识符必须以字母或下划线开头,后跟字母、数字或者下划线的任意序列。标识符区分大小写,另外,一些Python本身一部分的标识符(“保留字”或“关键字”)不能作为普通标识符。其关键字如下:

import keyword
keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del','elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import','in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
  • 表达式

产生或计算新数据值的程序代码片段称为表达式。关于此部分后续详解。

四、输出语句

Python的内置函数print()是其输出语句,它具有两种形式:

  第一种形式:print(<expr>, <expr>, <expr>, ... ,<expr>)

    第一种形式包含函数命print,后面带上带括号的表达式序列,用逗号分隔。<>是可填充的“槽”,expr表示一个表达式。

  第二种形式:print()

    第二种形式它不打印任何表达式。

print(1+2)
print(1, 2, 1 + 2)
print()
print("1 + 2 = ", 1 + 2)

结果为:

 

Python调用汇编代码_Python调用汇编代码

  值得注意的是,连续的print语句通常显示在屏幕的不同行上,空print()生成空行输出,在背后真正发生的是,在打印所有提供的表达式之后,print函数自动附加某种结束文本。默认情况下,结束文本是表示行结束的特殊标记字符("\n")。可以包含一个附加参数显示地覆盖这个默认值。如下:

1 print(1 + 2, end=" ")
2 print(1, 2, 1 + 2, end=" ")
3 print()
4 print("1 + 2 = ", 1 + 2, end=" ")

 结果为:

Python调用汇编代码_Python调用汇编代码_02

五、赋值语句

  • 简单赋值

  基本赋值语句具有以下形式:

    <variable> = <expr>

variable表示一个标识符,expr表示一个表达式。赋值意义:右侧的表达式被求值,然后产生的值与左侧命名的变量相关联。变量可以多次赋值,它总是保留最新的值。

  • 赋值输入

  对于文本输入语句形式如下:

    <variable> = input(<prompt>)

<prompt>表示一个字符串表达式,用于提示用户输入。

 

1 name = input("Enter your name:")
2 print(name)

 

  结果为:

Python调用汇编代码_Python调用汇编代码_03

  若输入数字,其形式如下:

    <variable> = eval(input(<prompt>))

1 ans = eval(input("Enter an expression:"))
2 print(ans)

结果为:

Python调用汇编代码_标识符_04

  函数eval()功能很强大,当对用户输入求值时,本质上是允许用户输入一部分程序。但也有潜在的危险,坏人也可利用这种能力输入恶意指令,形成“代码注入”攻击,后续中会给出安全的替代方法。

  • 同时赋值

同时赋值是允许同时计算多个值。形式如下:

    <var1>, <var2>, ... ,<varn> = <expr1>, <expr2>, ... ,<exprn>

 

1 sum, diff = x + y, x - y

 

  sum、diff分别是x、y的和、差。

若交换两个值,可以写成:

x, y = y, x