今天聊一下初学汇编

什么是汇编器和链接器?

  • 汇编器(assembler):用于将汇编语言源程序转换为机器语言
  • 链接器(linker):一种工具程序,把编译器生成的单个文件组合成一个可执行文件
  • 寄存器(register):是 CPU 中被命名的存储位置,用于保存操作的中间结果

MASM能创建哪些类型的程序?

  • 32 位保护模式(32-Bit Protected Mode):运行于所有的 32 位和 64 位版本的 Microsoft Windows 系统。他们通常比实模式程序更容易编写和理解。
  • 64 位模式(64-Bit Mode):运行于所有的 64 位版本的 Microsoft Wimdows 系统。
  • 16 位实地址模式(16-Bit Real-Address Mode):运行于 32 版本的 Windows 和嵌入式系统,64 位 Windows 不支持这类程序。

汇编语言和机器语言有什么关系?

  • 机器语言(machine language):是一种数字语言,专门设计成能被计算机处理器(CPU)理解。所有 x86 处理器都理解共同的机器语言。
  • 汇编语言(assembly language):包含用短助记符如 ADD、MOV、SUB 和 CALL 书写的语句。
  • 汇编语言于机器语言是一对一(one-to-one)的关系:每一条汇编语言指令对应一条机器语言指令。

C++ 和 Java 与汇编语言有什么关系?

  • 高级语言(如 Python、C++、Java)与汇编语言和机器语言的关系是一对多(one-to-many)。int y;
    int x = (y + 4) * 3;// 与之对应的汇编
    mov eax,y ; y 送入 EAX 寄存器
    add eax,4 ; EAX 寄存器内容加 4
    mov ebx,3 ; 3 送入 EBX 寄存器
    imul ebx ; EAX 与 EBX 相乘
    mov X,eax ; EAX 的值送入 X

汇编语言可移植吗?

  • 可移植(portable):一种语言,如果他的源程序能够在各种各样的计算机系统中进行编译和运行,那么这种语言被称为是可移植的。
  • 汇编语言是不可移植的。因为它是为特定处理器系列设计的。汇编语言会直接与计算机体系结构相匹配。或者在执行时用一种被称为微代码解释器(microcode interpreter)的处理器内置程序来进行转换。
  • 常见处理器:Motorola68x00、x86、SUN Sparc、Vax 和 IBM-370

为什么要学习汇编语言?

  • 占用内存少,是编写嵌入式程序的理想工具
    – 嵌入式程序:指一些存放在专用设备中小容量存储器内的短程序。这些设备有:电话、汽车燃油和点火系统、空调控制系统、安全系统、数据采集系统、显卡、声卡、硬盘驱动器、调制解释器和打印机等。
  • 处理仿真和硬件监控的实时应用程序要求精确定时和响应。
    – 高级语言不会让程序员对编译器生成的机器代码进行精确控制。汇编语言则允许程序员精确指定程序的可执行代码。
  • 电脑游戏要求软件在减少代码大小和加快执行速度方面进行高度优化。
    – 汇编语言允许直接访问计算机硬件,为了提高速度可以对代码进行手动优化。
  • 汇编语言有助于形成对计算机硬件、操作系统和应用程序之间交互的全面理解。
  • 一些高级语言对其数据表示进行了抽象,这使得他们在执行底层任务时显得有些不方便,如位控制。在这种情况下,程序员常常会调用使用汇编语言编写的子程序来完成他们的任务。
  • 硬件制造商为其销售的设备创建设备驱动程序。
    – 设备驱动程序(device driver):是一种程序,它把通用操作系统指令转换位对硬件细节的具体引用。

汇编语言有规则吗?

  • 大多数汇编语言规则都是以目标处理器及其机器语言的物理局限性为基础的。如:CPU 要求两个指令操作数的大小相同。汇编语言的规则较少。
正文完