随笔分类 - 程序是怎样跑起来的
计算机组成原理
摘要:前面说了这么多,至此我们终于把阅读汇编语言源代码的准备工作完成了。让我们再来回顾一下代码清单 10-2 的内容。首先,让我们从MyFunc 函数调用AddNum 函数的汇编语言部分开始,来对函数的调用机制进行说明。函数调用是栈发挥大作用的场合。把代码清单 10-2 中的C 语言源代码部分去除,然后再
阅读全文
摘要:程序运行时,会在内存上申请分配一个称为栈的数据空间。栈stack)有“干草堆积如山”的意思。就如该名称所表示的那样,数据在存储时是从内存的下层(大的地址编号 )逐渐往上层(小的地址编号)累积,读出时则是按照从上往下的顺利进行(图 10-3 )的。 栈是存储临时数据的区域,它的特点是通过 push 指
阅读全文
摘要:指令中最常使用的是对寄存器和内存进行数据存储的 mov 指令mov 指令的两个操作数,分别用来指定数据的存储地和读出源。操作数中可以指定寄存器、常数、标签(附加在地址前 ),以及用方括号([])围起来的这些内容。如果指定了没有用方括号围起来的内容就表示对该值进行处理:如果指定了用方括号围起来的内容,
阅读全文
摘要:在汇编语言中,1行表示对 CPU 的一个指令。汇编语言指令的语法结构是操作码 +操作数(也存在只有操作码没有操作数的指令)。 操作码表示的是指令动作,操作数表示的是指令对象。操作码和操作数罗列在一起的语法,就是一个英文的指令文本。操作码是动词操作数相当于宾语。例如,用汇编语言来分析“Give me
阅读全文
摘要:汇编语言的源代码,是由转换成本地代码的指令(后面讲述的操作码)和针对汇编器的伪指令构成的。伪指令负责把程序的构造及汇编的方法指示给汇编器(转换程序)。不过伪指令本身是无法汇编转换成本地代码的。这里我们把代码清单10-2中用到的伪指令部分摘出,如代码清单10-3所示。 由伪指令 segment和end
阅读全文
摘要:除了将本地代码进行反汇编这一方法外,通过其他方式也可以获取汇编语言的源代码。大部分C语言编译器,都可以把利用C语言编写的源代码转换成汇编语言的源代码,而不是本地代码。利用该功能,就可以对C语言的源代码和汇编语言的源代码进行比较研究。笔者在学生时代的报告中,使用的便是该功能。Borland C++中,
阅读全文
摘要:在加法运算的本地代码中加上add(addition的缩写)、在比较运算的本地代码中加上cmp(compare的缩写)等。这些缩写称为助记符,使用助记符的编程语言称为汇编语言。这样,通过查看汇编语言编写的源代码,就可以了解程序的本质了。因为这和查看本地代码的源代码,是同一级别的。 不过,即使是用汇编语
阅读全文
摘要:通过使用操作系统提供的系统调用,程序员就没必要编写直接控制硬件的程序了。而且,通过使用高级编程语言,有时甚至也无需考虑系统调用的存在。这是因为操作系统和高级编程语言能够使硬件抽象化。这是个非常了不起的处理。下面就让我们来看一下硬件抽象化的具体实例。代码清单 9-2 是用C 语言编写的往文件中写人字符
阅读全文
摘要:制作应用的程序员们意识到一点:那就是你们制作的不是硬件,而是利用操作系统功能的应用。 下面就来看一下操作系统是如何给开发人员带来便利的。代码清单9-1 表示的是,在 Windows 操作系统下,用C语言制作一个具有表示当前时间功能的应用。time 是用来取得当前日期和时间的函数printf0) 是用
阅读全文
摘要:操作系统的原型:仅具有加载和运行功能的监控程序。 通过事先启动监控程序,程序员就可以根据需要的各种程序加载到内存中运行。如下图: 在利用监控程序编写程序的过程中,发现很多程序都要共通的部分。因此,基本的输入输出部分的程序就被追加到了监控程序中。初期的操作系统就这样诞生了(图 9-2 )。 之后,随着
阅读全文
摘要:Q:编译器和解释器有什么不同?A:编译器是在运行前对所有源代码进行解释处理的。而解释器则是在运行时对源代码的内容一行一行地进行解释处理的。 Q:“分割编译”指的是什么?A:将整个程序分为多个源代码来编写,然后分别进行编译,最后链接成一个EXE文件。这样每个源代码都相对变短,便于程序管理。 Q:“Bu
阅读全文
摘要:EXE文件的内容分为再配置信息、变量组和函数组,这一点想必大家都清楚了吧。不过,当程序加载到内存后,除此之外还会额外生成两个组,那就是栈和堆。栈是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据及对象的内存领域(图8-10)。 EXE文
阅读全文
摘要:在程序运行时,虚拟的内存地址会转换成实际的内存地址。链接器会在EXE文件的开头,追加转换内存地址所需的必要信息。这个信息称为再配置信息。 EXE文件的再配置信息,就成为了变量和函数的相对地址。相对地址表示的是相对于基点地址的偏移量,也就是相对距离。实现相对地址,也是需要花费一番心思的。在源代码中,虽
阅读全文
摘要:Windows以函数的形式为应用提供了各种功能。这些形式的函数称为API (应用程序接口)。例如,Samplel.c中调用的MessageBox0,它并不是C语言的标准函数,而是Windows提供的API的一种。MessageBox()提供了显示消息框的功能。 Windows中,API的目标文件,并
阅读全文
摘要:下图的错误消息表示的是无法解析Sample1.obj参照的外部符号。 外部符号是指其他目标文件中的变量或函数。sprintf及MessageBoxA是目标文件中sprintf及MessageBox()的名称。代码中记述的函数名同目标文件中的函数名有一些差异,不过大家只需把它理解成这是C编译器的规定即
阅读全文
摘要:编译器转换源代码后,就会生成本地文件。不过,本地文件是无法直接运行的。 编译器转换源代码后,就会生成本地文件。不过,本地文件是无法直接运行的。为了得到可以运行的EXE文件,编译之后还需要进行“链接”处理。下面,就让我们使用Borland C++ Compiler5.5(以下称为Borland C++
阅读全文
摘要:能够把C 语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器。每个编写源代码的编程语言都需要其专用的编译器将 C语言编写的源代码转换成本地代码的编译器称为 C 编译器。 编译器首先读入代码的内容,然后再把源代码转换成本地代码编译器中就好像有一个源代码同本地代码的对应表。但实际上,仅仅靠对应
阅读全文
摘要:Windows中的EXE文件的程序内容,使用的就是本地代码。 本地代码的内容是人类无法理解的。 接下来,我们把刚才的 EXE 文件的内容 Dump 一下。Dump 是指把文件的内容,每个字节用2 位十六进制数来表示的方式。本地代码的内容就是各种数值的罗列,这一点想必大家都了解。而这些数值就是本地代码
阅读全文
摘要:1.CPU 可以解析和运行的程序形式称为什么代码? 本地代码(机器语言代码) 2.将多个目标文件结合生成 EXE 文件的工具称为什么? 链接器 3,扩展名为 .obi 的目标文件的内容,是源代码还是本地代码? 本地代码 4.把多个目标文件收录在一起的文件称为什么? 库文件 5.仅包含 Windows
阅读全文
摘要:程序的运行环境中,存在着名为BIOS(Basic Input/Output System)的系统。BIOS存储在ROM中,是预先内置在计算机主机内部的程序。BIOS除了键盘、磁盘、显卡等基本控制程序外,还有启动“引导程序”的功能。引导程序是存储在启动驱动器起始区域的小程序。操作系统的启动驱动器一般是
阅读全文
浙公网安备 33010602011771号