程序

由一系列指令(Instruction)组成,指令是指示计算机做某种运算的命令,通常包括以下几类:

  • 输入:从键盘、文件或者其它设备获取数据。
  • 输出:把数据显示到屏幕,或者存入一个文件,或者发送到其它设备。
  • 基本运算:执行最基本的数学运算(加减乘除)和数据存取。
  • 测试和分支:测试某个条件,然后根据不同的测试结果执行不同的后续指令。
  • 循环:重复执行一系列操作。

编写程序可以说就是这样一个过程:把复杂的任务分解成子任务,把子任务再分解成更简单的任务,层层分解,直到最后简单得可以用以上指令来完成。

编程语言(Programming Language)

编程语言 表示形式
C语言 a=b+1;
汇编语言 mov 0x804a01c,%eax
add $0x1,%eax
mov %eax,0x804a018
机器语言 a1 1c a0 04 08
83 c0 01
a3 18 a0 04 08
  • 低级语言:直接用计算机指令编写程序
    • 机器语言
    • 汇编语言(Assembly Language)
    • 汇编语言和机器语言的指令是一一对应的,通过汇编器(Assembler)去查表把助记符替换成数字,也就把汇编语言翻译成了机器语言。
  • 高级语言:用语句(Statement)编写程序,语句是计算机指令的抽象表示。
    • C、C++、Java、Python等;
    • 高级语言的语句和低级语言的指令之间不是简单的一一对应关系;高级语言转换为低级语言由编译器(Compiler)来完成。
    • 高级语言的优缺点
      • 缺点:编译需要花时间
      • 优点:
        • 编程更容易,开发更友好
        • 代码更紧凑,可读性更强
        • 出错容易改正
        • 是可移植(Portable)的或者称为平台无关的(Platform Independent)
    • 平台
      • 计算机体系结构(Architecture)
      • 操作系统(Operating System)
      • 开发平台(编译器、链接器等)等
    • 不同的计算机体系结构有不同的指令集(Instruction Set),可以识别的机器指令格式是不同的,直接用某种体系结构的汇编或机器指令写出来的程序只能在这种体系结构的计算机上运行,然而各种体系结构的计算机都有各自的C编译器,可以把C程序编译成各种不同体系结构的机器指令,这意味着用C语言写的程序只需稍加修改甚至不用修改就可以在各种不同的计算机上编译运行。
    • 绝大部分程序是用高级语言编写的,只有和硬件关系密切的少数程序(例如驱动程序)才会用到低级语言。
  • 编译过程
    • 首先你用文本编辑器写一个C程序,然后保存成一个文件,例如program.c(通常C程序的文件名后缀是.c),这称为源代码(Source Code)或源文件,
    • 然后运行编译器对它进行编译,编译的过程并不执行程序,而是把源代码全部翻译成机器指令,再加上一些描述信息,生成一个新的文件,例如a.out,这称为可执行文件,可执行文件可以被操作系统加载运行,计算机执行该文件中由编译器生成的指令,如下图所示:
      image.png
  • 有些高级语言以解释(Interpret)的方式执行,每一行当作一条命令解释执行,而不需要先生成包含机器指令的可执行文件再执行。
    image.png