考试题型

  1. 简答
  2. 计算
  3. 程序填空
  4. 程序题

考试重点

  • 第一章 汇编与机器之间的联系
  • 第二章 计算机组成 重点是寄存器
  • 第三章 完成一个程序的步骤,每步的操作
  • 第四章 寻址方式有哪些,每一个寻址方式是怎么操作
  • 第五章 全部
  • 第六章 伪指令的结构,汇编程序框架,不要求子程序,有类似6.1的题目
  • 第七章 3个编程程序
  • 考试大纲:汇编语言的组成,编译,实现步骤,寄存器的组成,作用,功能调用,寻址方式,指令系统,伪指令,内存分配,分支和循环程序设计。

第一章 汇编语言基础知识

机器语言与汇编语言

机器语言:计算机硬件直接识别的程序设计语言。构成这种程序的是机器指令,机器指令是用二进制编码的指令,即编码中只含0或1。机器语言被称为第一代语言,不仅复杂难记,而且还依赖于具体的机型。

汇编语言:汇编语言是一种面向机器的用符号表示的程序设计语言,所以也叫符号语言。和机器语言不同的是,汇编语言用直观、便于记忆和理解的英文单词符号或缩写符号来表示指令和数据变量。汇编语言被称为第二代语言。

尽管用汇编语言编写的程序要比机器代码更容易理解,但每条汇编语言指令均对应一条机器指令,因为与机器语言并没有本质区别,因此汇编语言仍然属于面向机器的低级语言。

汇编语言的组成

  1. 汇编指令:机器码助记符,有对应的机器码,它是汇编语言的核心。
  2. 伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
  3. 其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码。

第二章 计算机基本原理

计算机系统组成

  • 计算机的基本工作原理是存储程序和程序控制
  • 冯诺伊曼原理的计算机结构:
    • 中央处理器(CPU)或叫微处理器(MPU),主要包括运算器和控制器。运算器执行指令,控制器负责计算机的控制,负责从主存储器取指令,对指令进行译码,发出访问主存储器或者I/O设备接口的控制信号,完成程序的要求。CPU是计算机结构中最核心的部件,指令都是在这里执行的。
    • 存储器是计算机记忆部件,以二进制形式存放程序和数据。
    • 输入/输出(I/O)子系统包括大容量存储器(如硬盘)和其他外设,如显示器、键盘、打印机、鼠标等
    • 系统总线连接CPU、主存储器、和I/O子系统三大部分,用以完成各部分的数据交换。系统总线包括数据总线、地址总线和控制总线。

image-20221128192147709

寄存器

  1. 通用数据寄存器

    AX、BX、CX、DX这4个寄存器通常用来存放一般性数据,有时候也可以存放地址,被称为通用数据寄存器。

    • AX:累加器,运算时较多使用这个寄存器,有些指令规定必须使用它。
    • BX:基址寄存器,除了存放数据,它经常用来存放一段内容的起始偏移地址。
    • CX:计数寄存器,除了存放数据,它经常用来存放重复操作的次数。
    • DX:数据寄存器,除了存放数据,它有时用来存放32位数据的高16位。
  2. 地址寄存器

    主要作用是存放数据所在偏移地址,也可以存放数据。它们不能再拆分使用

    • SP:堆栈指针,这是一个专用的寄存器,存放堆栈栈顶的偏移地址。
    • BP:基址指针,可以用来存放内存中数据的偏移地址。
    • SI:源变址寄存器,它经常用来存放内存中源数据区的偏移地址,所谓变址寄存器,是指在某些指令下它可以自动地递增或递减其中的值。
    • DI:目的地址寄存器,它经常用来存放内存中目的数据区的偏移地址,并在某些指令作用下可以自动的递增或递减其中的值。
  3. 段寄存器

    用来存放4个段的段基址

    • CS:代码段寄存器,用来存放当前正在执行的程序段的段基址。
    • SS:堆栈段寄存器,用来存放堆栈段的段基址。
    • DS:数据段寄存器,用来存放数据段的段基址。
    • ES:附加段寄存器,用来存放另一个数据段的段基址。
  4. 指令指针寄存器

    IP:指令指针寄存器,存放即将执行指令的偏移地址。

  5. 标志寄存器

    FLAGS:存放CPU的两类状态。

    状态标志:反映处理器当前的状态,如有无溢出、有无进位等。状态标志有6个:CF、PF、AF、ZF、SF和OF。

    控制标志:用来控制CPU的工作方式,如是否响应可屏蔽终端等。控制标志有3个:TF、IF和DF。

IMG_20221129_122957

第三章 汇编语言程序实例及上机操作

完成一个程序的步骤

汇编语言从设计到形成可执行程序文件,在计算机上的操作分为三步:编辑、汇编、连接。

  • 使用编辑程序编辑源程序文件(.asm)
  • 使用汇编程序(MASM)将源程序文件(.asm)汇编成目标文件(.obj)
  • 使用连接程序(LINK),将目标文件(.obj)连接成可执行文件(.EXE)
  • 使用调试程序(DEBUG),调试可执行文件

image-20221129130220897

因此建立汇编语言程序至少要有以下几个文件:

  • 编辑程序,如EDIT.EXE;
  • 汇编程序,如MASM.EXE;
  • 连接程序,如LINK.EXE;
  • 调试程序,如EDBUG.EXE;

一个汇编源程序从写出到最终执行,需要经过如下几个步骤:

  1. 编写汇编源程序:

    编辑ASM源程序文件就是在机器上写程序,大多数文字编辑软件都可用来输入和修改汇编语言源程序。

  2. 对源程序进行汇编和连接:

    • 汇编:汇编程序的作用是把汇编语言源程序翻译成为机器代码,产生二进制格式的目标文件(Object File)
    • 连接:连接就是使用连接程序LINK把目标文件(OBJ)转换为可执行的EXE文件。
  3. 执行或调试可执行文件中的程序

第四章 操作数的寻址方式

所谓寻址方式就是指令中寻找操作数的方式,同时寻址方式也规定了指令的结构和格式。

立即寻址方式

所要找的操作数字何解写在指令中,这种操作数成为立即数。立即数就在指令中(紧跟在操作码之后),这种寻址方式称为立即寻址方式。

例1:

​ MOV AL, 6H 执行完之后AL=06H

例2:

​ MOV AX, 12AFH 执行完之后AX=12AFH,即AH=12H,AL=AFH,遵循高位数据在高地址的规定。

寄存器寻址方式

操作数就是寄存器中的值,这种寻址方式称为寄存器寻址方式。指令中给出寄存器名。

例1 MOV AX, BX 执行后AX=BX,BX保持不变

在寄存器寻址中,由于操作数在CPU内部的寄存器中,指令在执行时不需要访问内存,因而执行速度快。

直接寻址方式

操作数的有效地址就在指令中,这种寻址方式称为直接寻址方式。指令中直接给出了操作数的有效地址。

指令形式如下:

​ MOV AX, DS:[4050H]

操作数的有效地址EA直接写在指令中,用方括号里的数值作为操作数的偏移地址(有效地址),操作数的段地址为数据段,由DS指出,即操作数本身存放在数据段中。

操作数的物理地址=(DS)*10H+EA

寄存器间接寻址

操作数的有效地址EA就在寄存器中,这种寻址方式称为寄存器间接寻址。寄存器间接寻址方式与寄存器寻址方式不同,它不是把寄存器的内容作为操作数,而是把寄存器的内容作为操作数的地址。

例:MOV AX,[BX]

已知(DS)=1500H,(BX)=4580H

则EA=(BX)=4580H,操作数的物理地址=(DS)*10H+EA=19580H

若(19580H)=2364H,则执行完之后(AX)=2364H

寄存器相对寻址方式

操作数的有效地址EA是一个寄存器与位移量之和,这种寻址方式称为寄存器相对寻址。和寄存器间接寻址不同的是,有效地址EA的构成除了寄存器之外,还要加上位移量。

例:MOV AX,TOP[SI]

以上指令TOP为符号地址,即位移量。

已知(DS)=1500H,(SI)=7310H,TOP=25H,则

有效地址EA=(SI)+TOP=7335H

物理地址=(DS)*10H+EA=1C335H

若(1C335H)=3567H,则执行指令后:(AX)=1567H

基址变址寻址方式

操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,这种寻址方式称为基址变址寻址。允许使用的基址寄存器为BX和BP,变址寄存器为SI和DI。

例:MOV AX,[BX+DI]

已知(DS)=2100H,(BX)=0158H,(DI)=10A5H,(221FD)=34H,(221FE)=95H,(AX)=0FFFFH。则

有效地址EA = (BX)+(DI)=11FDH

物理地址 = (DS)*10H+EA = 221FDH

执行后,(AX)=9534H

相对基址变址寻址方式

操作数的有效地址是一个基址寄存器和一个变址寄存器以及一个位移量之和,这种寻址方式称为相对基址变址寻址。

例:MOV AX,MAXK[BX][SI]

有效地址EA = MAXK + (BX)+(SI);

寻址方式的有关问题

  1. 双操作数寻址方式的规定:

    一条指令的源操作数和目的操作数不能同时用存储器方式

    如:MOV BUF,[ BX ] 这条指令就是错误

  2. 操作数的类型

    • 寄存器寻址方式中,操作数的类型由寄存器决定

    • 立即数没有类型

    • 不含变量的存储器方式所表示的操作数类型未知

    • 含变量的寻址方式对应的操作数类型就是变量的类型

  3. 双操作数的类型规定

    • 双操作数中至少应有一个的类型时明确的;
    • 若两个操作数的类型都明确,则两个的类型应相同。
  4. 段选择说明

    对于存储器方式:

    • 标明了段寄存器,OP在段寄存器指明的段中。否则:

    • 若有变量,则是变量所在的段;否则

    • 系统默认(V为常量时)

      对于[R],R为BP,EBP,ESP时,是SS段。

      对于V[R*F],R为BP,EBP,ESP时,是SS段。

      对于V[]

第五章 常用指令系统

每种计算机都有一组指令集供用户使用,这组指令集就称为计算机的指令系统。

80x86汇编语言指令的一般格式为:

[标号:] 指令助记符 [操作数] [;注释]

各部分的意义说明如下:

  1. 标号:标号是一个符号地址,用来表示指令在内存中的位置,以便程序中其他指令能引用该指令。它通常作为转移指令的操作数,以表示转向的目标地址。当一条指令使用标号时,应加冒号“;”,不可省略。
  2. 指令助记符:指令助记符表示指令名称,是指令功能的英文缩写。如“MOV”表示传送指令。
  3. 操作数:操作数表示要操作的数据或数据所在的地址。
  4. 注释:注释由分号“;”开始,为了使程序更容易理解而用来对指令的功能加以说明。

指令要求

一般情况下,指令的共同要求:

  1. 双操作数的操作数类型必须匹配
  2. 目的操作数一定不能是立即操作数
  3. 目的操作数和源操作数不能同时为存储器操作数。如果一个数在数据存储单元中,另一个一定要是立即 数和寄存器操作数。

数据传送指令

  1. 通用数据传送指令

    • MOV 传送

      例:MOV AX,2016H

    • PUSH 进栈

    • POP 出栈

    • XCHG 交换

  2. 累加器专用传送指令

    • IN(input)输入
    • OUT(output)输出
    • XLAT(translate)换码