汇编语言(第七版)
第一章 基本概念
汇编语言是最古老的编程语言,在所有语言中,它与原生机器语言最为接近。
它能直接访问计算机硬件,要求用户了解计算机架构和操作系统。
汇编器(assembler)是一种工具程序,用于将汇编语言源程序转换为机器语言。
链接器(linker)也是一种工具程序,它把汇编器生成的单个文件组合为一个可执行程序。
调试器(debugger),可以在程序运行时单步执行程序并检查寄存器和内存状态。
汇编语言和机器语言的关系:
机器语言(machine language)是一种数字语言,专门设计成能被计算机处理器(CPU)理解。
所有X86处理器都理解共同的机器语言(不同机器只能识别各自的机器语言,参看《计算机组成原理》)。
汇编语言(assembly language)包含用短助记符如ADD、MOV、SUB和CALL书写语句。
汇编语言与机器语言是一对一的关系:每一条汇编语言指令对应一条机器语言指令。
C++和Java与汇编语言的关系
高级语言如Python、C++和Java与汇编语言和机器语言的关系是一对多(参看《计算机操作系统》)
比如,C++的一条语句就会扩展为多条汇编指令或机器指令。
假设X和Y是整数:
int Y;
int X = (Y + 4) + 3
与之等价的汇编语言程序如下
mov eax, Y ;
add eax, 4 ;
mov ebx, 3 ;
imul ebx ;
mov X, eax ;
Y送入EAX寄存器
EAX寄存器内容加4
3送入EBX寄存器
EAX与EBX相乘
EAX的值送入X
寄存器是CPU中被命名的存储位置,用于保存操作的中间结果
汇编语言能移植吗?
一种语言如果它的源程序能够在各种各样的计算机系统中进行编译和运行,那么这种语言被称为是可移植的。
Java语言的一大特点就是,跨平台,一处编译,处处运行(编译好的程序几乎能在所有计算机系统中运行)。
C++程序,除非需要特别引用某种操作系统的库函数,否则它几乎可以在任何一台计算机上编译和运行。
汇编语言不是可移植的,因为它是为特定处理器系列设计的。目前广泛使用的有多种不同的汇编语言,
每一种都基于一个处理器系列。对于一些广为人知的系列如X86和IBM-370,汇编指令会直接与该计算机体系结构相匹配,
或者在执行时用一种被称为微代码解释器的处理器内置程序来进行转换。
问题
1、汇编器和链接器是如何一起工作的?
2、学习汇编语言如何能提高你对操作系统的理解?
3、比较高级语言和汇编语言时,一对多关系是什么意思?
4、解释编程语言中的可移植性概念
5、x86处理器的汇编语言与Vax或Motorola 68x00等机器的汇编语言是一样的吗?
6、举一个嵌入式系统应用程序的例子
7、什么是设备驱动程序?
8、汇编语言和C/C++语言中的指针变量类型检查,哪一个更强(更严格)?
9、给出两种应用类型。与高级语言相比,它们更适合使用汇编语言。
10、编写程序来直接访问打印机端口时,为什么高级语言不是理想工具?
11、为什么汇编语言不常用来编写大型程序?
12、转换为汇编语言:X = (Y + 4) + 3