Skip to content

AlexBruceLu/computer-system-architecture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 

Repository files navigation

程序执行的结果不仅依赖于高级编程语言的语法和语义,还与其他好多方面有关。例如,对于以下C语言程序的例子:

代码段(一):

int a = 2147483648;

int b = a / -1; 

printf(“%d,%d\n”,a, b);

代码段(二):

int a = 2147483648;

int b = -1;

int c = a / b; 

printf("%d,%d\n", a, c);

从C语言的角度来说,这两个代码段的功能完全一样,但是,运行结果却截然不同。代码段(一)的执行结果为“-2147483648, -2147483648”,而代码段(二)在Linux上的执行结果为“Floating point exception”,在Windows上的执行结果又不是“Floating point exception”。显然,在代码段(一)中,CPU没有检测到异常;而在代码段(二)中,CPU检测到了异常,操作系统内核进行了相应的处理。

在这个例子中有以下疑问: 变量a明明被赋予的是正数,为什么打印出来的却是负数?为什么负数a与-1相除,结果还是负数呢?为什么明明是“除法错”异常,却显示是浮点异常呢?代码(一)和代码(二)都是除法运算,为什么执行结果不同呢?代码段(二)在Windows平台上的执行结果为什么不是“Floating point exception”?

这样的例子还能举出很多。从这些例子可以看出,真正要理解程序的行为还需要学习隐藏在编程语言背后的许多内容。这些影响程序执行结果的隐藏在编程语言背后的内容就是“计算机系统基础”。

(1)“程序的表示、转换与链接”(stage1)。 主要介绍可执行文件的生成,包括高级语言程序和机器级代码的对应关系。

(2)“程序的执行和存储访问”(stage2)。主要介绍可执行文件的正常执行过程,特别是执行过程中的指令和数据的存储访问。

(3)“异常、中断和输入/输出”(stage3)。主要介绍可执行文件执行过程中的异常和中断处理,以及I/O操作处理过程

Welcome computer system architecture!

About

computer system architecture

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published