1、第一章 预备知识一、本章的学习内容一、本章的学习内容:本章学习汇编语言的预备知识:本章学习汇编语言的预备知识:1 1什么是汇编语言什么是汇编语言? ?2 2Intel 80X86Intel 80X86微处理器中的寄存器组微处理器中的寄存器组3 3主存储器的编址方式及物理地址的形成方式主存储器的编址方式及物理地址的形成方式4. 4. 数数和符号在计算机中的表示方法和符号在计算机中的表示方法5. 5. 标志寄存器标志寄存器6 6汇编源程序的基本结构汇编源程序的基本结构 第一章第一章 预备知识预备知识第一章第一章 预备知识预备知识二、本章的学习重点二、本章的学习重点:1 1汇编语言汇编语言、汇编程序
2、的概念、汇编程序的概念2 280X8680X86寄存器组寄存器组3. 3. 堆栈的概念、进栈、出栈指令堆栈的概念、进栈、出栈指令4 4实模式和保护模式下实模式和保护模式下物理地址的形成物理地址的形成5. 5. 整数和字符串的表示方法整数和字符串的表示方法6. CF6. CF、OFOF、ZFZF、SFSF标志位标志位7 7汇编源程序汇编源程序举例举例 三、本章学习的难点三、本章学习的难点: 1 1寄存器组各个寄存器的名称和用途寄存器组各个寄存器的名称和用途2 2PUSH/POPPUSH/POP指令、堆栈指示器的变化指令、堆栈指示器的变化3 3保护模式下保护模式下物理地址的形成物理地址的形成4.
3、4. 有符号数、无符号数及其运算对于标志寄存器有符号数、无符号数及其运算对于标志寄存器 的影响的影响第一章第一章 预备知识预备知识1.1 1.1 机器语言与汇编语言机器语言与汇编语言1. 1. 机器语言(指令)机器语言(指令)机器语言的特点:机器语言的特点:(1)(1)由由0 0和和1 1组成的二进制码。组成的二进制码。(2) (2) 能为计算机识别并执行。能为计算机识别并执行。 (3) (3) 不同类型的机器,不同类型的不同类型的机器,不同类型的CPUCPU都有自己特都有自己特有的、一定数量的基本指令。有的、一定数量的基本指令。机器指令机器指令( (硬指令硬指令):):指挥计算机完成某一基本
4、操作的指挥计算机完成某一基本操作的命令命令, ,是面向机器的。是面向机器的。 操作种类操作种类 操作数存放位置操作数存放位置例:例:1011 10111011 1011 BB BB 操作码操作码0011 0100 34 0011 0100 34 操作数操作数0001 0010 120001 0010 12操作:操作:1234H BX1234H BX1.1 1.1 机器语言与汇编语言机器语言与汇编语言 操作码操作码 地址码地址码指令系统:每台计算机都规定了自己所特有的、指令系统:每台计算机都规定了自己所特有的、一定数量的基本命令,这批指令的全体为计一定数量的基本命令,这批指令的全体为计算机的指令
5、系统算机的指令系统机器语言:机器指令的集合机器语言:机器指令的集合机器语言程序:用机器语言编写的程序机器语言程序:用机器语言编写的程序1.1 1.1 机器语言与汇编语言机器语言与汇编语言2. 2. 汇编语言汇编语言( (改进的方案改进的方案) ) 助记符助记符 变量或标号变量或标号 汇编语言:一种用符号书写的、其操作与机器指令汇编语言:一种用符号书写的、其操作与机器指令一一对应的,并遵循一定语法规则的计算机语言。一一对应的,并遵循一定语法规则的计算机语言。1.1 1.1 机器语言与汇编语言机器语言与汇编语言 操作码操作码 地址码地址码例例2 2:刚才的例子若用汇编语言来书写:刚才的例子若用汇编
6、语言来书写: 操作码操作码 地址码地址码 BB 34 12BB 34 12 MOV BX MOV BX, 1234H1234H1.1 1.1 机器语言与汇编语言机器语言与汇编语言汇编源程序汇编源程序 用汇编语言编写的程序用汇编语言编写的程序类似于高级语言编写类似于高级语言编写的源程序的源程序 汇编程序汇编程序 把汇编源程序翻译成目标程序的(语言加工)程把汇编源程序翻译成目标程序的(语言加工)程序序类似于高级语言的编译程序类似于高级语言的编译程序汇编汇编 汇编程序对源程序进行翻译的过程汇编程序对源程序进行翻译的过程 类似于类似于高级语言的编译过程高级语言的编译过程1.1 1.1 机器语言与汇编语
7、言机器语言与汇编语言机器语言、汇编语言和高级语言的比较机器语言、汇编语言和高级语言的比较机器语言机器语言汇编语言汇编语言高级语言高级语言计算机能否计算机能否直接识别直接识别能能不能不能不能不能易用性易用性差差中中好好占据空间占据空间小小小小大大执行速度执行速度快快快快慢慢用途用途特殊特殊加密解密加密解密系统核心系统核心要求速度快要求速度快,代码短的,代码短的程序程序直接操纵直接操纵I/OI/O信息安全信息安全一般性软件一般性软件开发开发1.1 1.1 机器语言与汇编语言机器语言与汇编语言1.2 Intel1.2 Intel系列机简介系列机简介微型计算机的构成微型计算机的构成1.2.2 80 x
8、861.2.2 80 x86微处理器结构微处理器结构80 x8680 x86微处理器结构微处理器结构1 1总线接口部件总线接口部件: : 是是CPUCPU与计算机系统中其它功能与计算机系统中其它功能部件之间的高速接口部件之间的高速接口 功能:接受所有的总线操作请求,并按优先权进功能:接受所有的总线操作请求,并按优先权进 行选择,最大限度地利用本身的资源为这行选择,最大限度地利用本身的资源为这 些请求服务。些请求服务。2 2执行部件:寄存器组、标志寄存器、算逻部件、执行部件:寄存器组、标志寄存器、算逻部件、 控制部件等组成控制部件等组成 功能:从译码指令队列中取出指令并且执行功能:从译码指令队列
9、中取出指令并且执行1.2.2 80 x861.2.2 80 x86微处理器结构微处理器结构(1 1) 数据寄存器组数据寄存器组(EAX(EAX,EBXEBX,ECXECX,EDX)EDX) EAX ( EAX (累加器累加器)Accumulator)Accumulator EBX ( EBX (基址寄存器基址寄存器)Base )Base ECX ( ECX (计数寄存器计数寄存器)Count)Count EDX ( EDX (数据寄存器数据寄存器)Data)Data 作用作用 :用来保存操作数、运算结果或作指示:用来保存操作数、运算结果或作指示 器、变址寄存器,减少存取操作数所需器、变址寄存器
10、,减少存取操作数所需 要的访问总线和主存储器的时间,加快要的访问总线和主存储器的时间,加快 运行速度。运行速度。1.2.2 80 x861.2.2 80 x86微处理器结构微处理器结构注意:注意:它们既可作它们既可作3232位、位、1616位寄存器,也可作位寄存器,也可作8 8位寄存器使用。位寄存器使用。8 8位的寄存器不能作指示器或变址寄存器。位的寄存器不能作指示器或变址寄存器。 1.2.2 80 x861.2.2 80 x86微处理器结构微处理器结构(2 2) 指示器变址寄存器组指示器变址寄存器组(ESI(ESI、EDIEDI、ESPESP、EBP)EBP) 作用:一般用来存放操作数的偏移
11、地址,用作作用:一般用来存放操作数的偏移地址,用作 指示器或变址寄存器。指示器或变址寄存器。ESPESP(Stack PointerStack Pointer),称为堆栈指示器,存放),称为堆栈指示器,存放的是当前堆栈段中栈顶的偏移地址;的是当前堆栈段中栈顶的偏移地址; EBP(BaseEBP(Base Pointer) Pointer),为对堆栈操作的基址寄存器;,为对堆栈操作的基址寄存器;ESI(SourceESI(Source Index) Index),称为源变址寄址器;字符串,称为源变址寄址器;字符串指令源操作数的指示器指令源操作数的指示器EDI(DestinationEDI(Des
12、tination Index) Index),称为目的变址寄存器;,称为目的变址寄存器;字符串指令目的操作数的指示器字符串指令目的操作数的指示器1.2.2 80 x861.2.2 80 x86微处理器结构微处理器结构3. 3. 指令预取部件和指令译码部件指令预取部件和指令译码部件指令预取部件指令预取部件: :通过总线接口部件,把将要执行的通过总线接口部件,把将要执行的指令从主存中取出,送入指令排队机构中排队。指令从主存中取出,送入指令排队机构中排队。指令译码部件指令译码部件: :从指令预取部件中读出指令并译码,从指令预取部件中读出指令并译码,再送入译码指令队列排队供执行部件使用。再送入译码指令
13、队列排队供执行部件使用。 指令(地址)指示器指令(地址)指示器: :它总是保存着下一条将要被它总是保存着下一条将要被CPUCPU执行的指令的偏移地址执行的指令的偏移地址( (简称简称EA)EA),其值为该指,其值为该指令到所在段首址的字节距离令到所在段首址的字节距离。1.2.2 80 x861.2.2 80 x86微处理器结构微处理器结构4 4分段部件和分页部件分段部件和分页部件使用分段部件和分页部件实现虚拟存储空间映射使用分段部件和分页部件实现虚拟存储空间映射到物理存储空间到物理存储空间程序员使用二维地址程序员使用二维地址 段地址:段内偏移地址段地址:段内偏移地址分段部件分段部件段地址:段内
14、偏移地址段地址:段内偏移地址 一维的线性的地址一维的线性的地址分页部件分页部件虚拟的线性的地址虚拟的线性的地址 主存储器的物理地址主存储器的物理地址 1.2.2 80 x861.2.2 80 x86微处理器结构微处理器结构段寄存器:低档处理器保存段首地址,高档处理器保存选择段寄存器:低档处理器保存段首地址,高档处理器保存选择字字 代码段寄存器代码段寄存器 CSCS 堆栈段寄存器堆栈段寄存器 SSSS 数据段寄存器数据段寄存器 DSDS 附加段寄存器附加段寄存器 ESES 附加段寄存器附加段寄存器 FSFS 附加段寄存器附加段寄存器 GSGS 1.2.2 80 x861.2.2 80 x86微处
15、理器结构微处理器结构指令执行过程:指令执行过程:(1) (1) 指令预取部件和指令译码部件指令预取部件和指令译码部件 EIP EIP 指令的偏移地址指令的偏移地址 EIPEIP增量,形成下一条指令的地址增量,形成下一条指令的地址(2) (2) 分段部件和分页部件分段部件和分页部件CS : EIP CS : EIP 指令的物理地址指令的物理地址(3) (3) 总线接口部件总线接口部件从主存中取指令从主存中取指令 预取指令队列预取指令队列1.2.2 80 x861.2.2 80 x86微处理器结构微处理器结构(4) CPU(4) CPU按序从预取指令队列中取出指令按序从预取指令队列中取出指令 指令
16、译指令译码部件。码部件。(5) (5) 指令译码部件译码指令译码部件译码 执行部件执行指令执行部件执行指令; ;(6) (6) 执行过程中若需要取主存操作数执行过程中若需要取主存操作数 操作数偏操作数偏移地址移地址(7) (7) 分段部件和分页部件分段部件和分页部件偏移地址偏移地址 , , 段寄存器段寄存器 操作数的物理地址操作数的物理地址(8) (8) 总线接口部件总线接口部件从主存中取数据从主存中取数据 执行部件执行部件1.2.2 80 x861.2.2 80 x86微处理器结构微处理器结构1. 1. 实方式(实际地址)实方式(实际地址)操作相当于一个可进行操作相当于一个可进行3232位快
17、速运算的位快速运算的80868086(内(内部部3232位、外部总线位、外部总线1616位数据、位数据、2020位地址)位地址)2. 2. 保护方式(虚地址)保护方式(虚地址)是是80X8680X86设计目标全部达到的工作方式,通过对设计目标全部达到的工作方式,通过对程序使用的存储区采用分段、分页的存储管理机程序使用的存储区采用分段、分页的存储管理机制,达到分级使用互不干扰的保护目的。能为每制,达到分级使用互不干扰的保护目的。能为每个任务提供一台虚拟处理器,使每个任务单独执个任务提供一台虚拟处理器,使每个任务单独执行,快速切换。行,快速切换。3. 3. 虚拟虚拟80868086方式方式保护方式
18、下所提供的同时模拟多个保护方式下所提供的同时模拟多个80868086处理器。处理器。 1.2.2 80 x861.2.2 80 x86的三种工作方式的三种工作方式存储器:用来存放程序和数据的装置,存储器:用来存放程序和数据的装置,包括主存和外存。包括主存和外存。主存储器:主机内部的半导体存储器,主存储器:主机内部的半导体存储器,相对外存,容量小,速度快,成本高。相对外存,容量小,速度快,成本高。1.3 1.3 主存储器和物理地址的形成主存储器和物理地址的形成主存储器编址方式主存储器编址方式主存储器的基本记忆单元是主存储器的基本记忆单元是位位,它能记忆,它能记忆/ /容纳一容纳一个二进制数个二进
19、制数0 0或或1 1。8 8位位组成一个组成一个字节字节,当前微机一个存储单元存放一,当前微机一个存储单元存放一个字节。个字节。为了区别不同的存储单元,每一存储单元都被指为了区别不同的存储单元,每一存储单元都被指定一个编号,定一个编号,编号编号作为存储单元的物理地址。作为存储单元的物理地址。1.3.1 1.3.1 主存储器主存储器80X8680X86系统中主存是按字节编址的,即字节作最小访问单位。系统中主存是按字节编址的,即字节作最小访问单位。 1.3.1 1.3.1 主存储器主存储器字:由字:由2 2个字节组成,字地址由两字节地址较小的一个字节组成,字地址由两字节地址较小的一个(即低字节)的
20、地址表示。存放的方式是低个(即低字节)的地址表示。存放的方式是低8 8位位存放低字节,高存放低字节,高8 8位存放高字节。位存放高字节。双字:双字的地址也由四个字节中的最低地址表示双字:双字的地址也由四个字节中的最低地址表示1.3.1 1.3.1 主存储器主存储器双字双字(32位位)字字(16位位)字字(16位位)字节字节(8位位)字节字节(8位位)字节字节(8位位)字节字节(8位位)76543210问题问题: : 一个字数据该怎样存入计算机主存呢一个字数据该怎样存入计算机主存呢? ? 双字双字数据呢?数据呢?高高- -高高 低低- -低低字:要占有连续的两个字节字:要占有连续的两个字节. 1
21、6. 16位中,低位中,低8 8位存放在位存放在低字节地址中,高低字节地址中,高8 8位存放在相邻的高字节地址中。位存放在相邻的高字节地址中。双字:双字:3232位中,低位中,低1616位存放在低字地址中,高位存放在低字地址中,高1616位位存放在相邻的高字地址中。存放在相邻的高字地址中。1.3.1 1.3.1 主存储器主存储器1.3.1 1.3.1 主存储器主存储器从逻辑上来看:是内存中开辟的一片存贮区,这片从逻辑上来看:是内存中开辟的一片存贮区,这片存贮区采用的存贮方式是一端固定,一端活动,存贮区采用的存贮方式是一端固定,一端活动,即只允许在一端插入或删除即只允许在一端插入或删除( (访问
22、可任意访问可任意) )。堆栈中数据的存取原则堆栈中数据的存取原则: “: “先进后出先进后出”, 堆栈中的数据也称元素或栈项。堆栈中的数据也称元素或栈项。元素进栈称压入,出栈称弹出。元素进栈称压入,出栈称弹出。1.3.2 1.3.2 堆栈堆栈从硬件的观点看堆栈必须由从硬件的观点看堆栈必须由一片存贮单元和一个指示一片存贮单元和一个指示器组成。器组成。固定端叫栈底。固定端叫栈底。栈指针用来指示栈顶进栈和栈指针用来指示栈顶进栈和出栈时偏移地址的变化出栈时偏移地址的变化指针所指示的最后存入信息指针所指示的最后存入信息的单元叫栈顶,所有信息的单元叫栈顶,所有信息的存取都在栈顶进行,栈的存取都在栈顶进行,
23、栈指针总是指向栈顶的指针总是指向栈顶的。1.3.2 1.3.2 堆栈堆栈问题:为什么要用堆栈?问题:为什么要用堆栈?程序中经常用到程序中经常用到子程序子程序或或处理中断处理中断,此时,主,此时,主程序需要把子程序或中断程序将用到的寄存器内程序需要把子程序或中断程序将用到的寄存器内容保护起来,以便子程序或中断返回后,主程序容保护起来,以便子程序或中断返回后,主程序能够从调用点或中断点处继续执行。能够从调用点或中断点处继续执行。此外,堆栈还经常用于:此外,堆栈还经常用于:保护和恢复现场保护和恢复现场主程序和子程序之间传递参数主程序和子程序之间传递参数子程序中的局部变量子程序中的局部变量1.3.2
24、1.3.2 堆栈堆栈1.1.进栈指令进栈指令PUSHPUSH 格式:格式:PUSH OPSPUSH OPS 功能:将立即数、寄存器、段寄存器或存贮功能:将立即数、寄存器、段寄存器或存贮器中的一个字器中的一个字/ /双字数据压入堆栈。双字数据压入堆栈。 例:例:PUSH AXPUSH AX 设:设:(AX)=4241H (SP)=10000H(AX)=4241H (SP)=10000H执行:执行: (SP)-2SP (SP)-2SP (AX) (AX)(SPSP) 1.3.2 1.3.2 堆栈堆栈1.3.2 1.3.2 堆栈堆栈出栈指令出栈指令POPPOP 格式:格式:POP OPDPOP OP
25、D 功能:将栈顶元素弹出送至某一寄存器、功能:将栈顶元素弹出送至某一寄存器、段寄存器段寄存器( (除除CSCS外外) )或字或字/ /双字存贮单元中。双字存贮单元中。例:例:POP BXPOP BX设指令执行前:设指令执行前:(BX)=1111H(BX)=1111H,堆栈内容,堆栈内容如上题所示。如上题所示。 1.3.2 1.3.2 堆栈堆栈1.3.2 1.3.2 堆栈堆栈问题的由来问题的由来 80868086的限制,的限制,2020位地址总线,位地址总线,1616位寄存器位寄存器(SP(SP,BPBP,SISI,DI)DI)。问题:如何通过问题:如何通过1616位寄存器访问位寄存器访问1MB
26、1MB的内存的内存解决:将解决:将1M1M字节主存分段,每段最多字节主存分段,每段最多64K64K字节字节1.3.3 1.3.3 存储器物理地址的形成存储器物理地址的形成 分段管理的方法:分段管理的方法: 段寄存器保存起始首地址段寄存器保存起始首地址 + + 段内偏移地址的总段内偏移地址的总体策略。体策略。段首地址分别存放在:段寄存器段首地址分别存放在:段寄存器CSCS、DSDS、ESES、SSSS、FSFS、GSGS中中 段内偏移地址:段内相对于段起始地址的偏移段内偏移地址:段内相对于段起始地址的偏移值,往往由值,往往由SPSP、BPBP、SISI、DIDI、IPIP给出。给出。 1.3.3
27、 1.3.3 存储器物理地址的形成存储器物理地址的形成1. 实模式PA = PA = 段寄存器段寄存器保存的保存的1616位二进制位二进制数后补数后补4 4个个0 0 + EA+ EA1.3.3 1.3.3 存储器物理地址的形成存储器物理地址的形成分段的实际作用:分段的实际作用:(1) (1) 实现了实现了1616位表示位表示2020位的地址;位的地址;(2) (2) 当程序和数据的大小当程序和数据的大小64KB 0 0111 0100B(116) 0 相加后,原本相加后,原本8 8位的二进制数变成了位的二进制数变成了9 9位,这多出位,这多出的一位称为进位位。由于一个字节只能是的一位称为进位
28、位。由于一个字节只能是8 8位,多位,多出的一位出的一位( (即进位位即进位位) )就被丢掉了,这种情况称为就被丢掉了,这种情况称为溢出。溢出。1.4.1 1.4.1 数值数据数值数据 在标志寄存器中有一溢出位在标志寄存器中有一溢出位OFOF,当出现上述情况,当出现上述情况时,则时,则OFOF位置位置1 1,检查,检查OFOF就可判断运算是否溢出。就可判断运算是否溢出。 对加运算来说,使对加运算来说,使OFOF位置位置1 1的条件是:同符号数相的条件是:同符号数相加,结果的符号与之相反,则加,结果的符号与之相反,则OFOF为为1 1,否则为,否则为0 0。 即即: :正数正数 + + 正数正数
29、 = = 负数负数 负数负数 + + 负数负数 = = 正数正数 OF = 1 OF = 1OF = 1 OF = 1 正数正数 + + 正数正数 = = 正数正数 负数负数 + + 负数负数 = = 负数负数 OF = 0 OF = 0OF = 0 OF = 01.4.1 1.4.1 数值数据数值数据例:设例:设n=8n=8,X1=-0100 0010B(-66)X1=-0100 0010B(-66), X2=0110 1101B(109)X2=0110 1101B(109),求,求X1X1补补-X2-X2补。补。 X1X1补补-X2-X2补补 = X1= X1补补+X2+X2补补 = 10
30、11 1110B + 1001 0011B= 1011 1110B + 1001 0011B = = 1 1 0101 0001B (81)0 0101 0001B (81)0 在用补码作减运算时,负数减正数,一定为负数在用补码作减运算时,负数减正数,一定为负数(结果),而结果为正说明产生了溢出。(结果),而结果为正说明产生了溢出。 1.4.1 1.4.1 数值数据数值数据 对减运算来说,如果被减数与减数异号,且结果对减运算来说,如果被减数与减数异号,且结果的符号与减数相同的符号与减数相同( (与被减数相反与被减数相反) ),说明运算产,说明运算产生了溢出,结果是错误,否则不是溢出。生了溢出,
31、结果是错误,否则不是溢出。 即即: :正数正数 - - 负数负数 = = 负数负数 负数负数 - - 正数正数 = = 正数正数 OF = 1OF = 1 正数正数 - - 负数负数 = = 正数正数 负数负数 - - 正数正数 = = 负数负数 OF = 0OF = 01.4.1 1.4.1 数值数据数值数据n n十进制数表示范围十进制数表示范围十六进制数表示范围十六进制数表示范围最大值最大值最小值最小值最大值最大值最小值最小值8 8位位2552550 00FFH0FFH0 01616位位65535655350 00FFFFH0FFFFH0 03232位位429496729542949672
32、950 00FFFFFFFFH0FFFFFFFFH0 01.4.1 1.4.1 数值数据数值数据无符号数表示范围无符号数表示范围有符号数表示范围有符号数表示范围1.4.1 1.4.1 数值数据数值数据n n十进制数表示范围十进制数表示范围二进制数表示二进制数表示范围范围补码表示范围补码表示范围最大值最大值最小值最小值最大最大值值最小值最小值最大值最大值最小值最小值8 8位位+127+127-128-1282 27 7-1-1-2-27 77FH7FH80H80H1616位位+32767+32767-32768-327682 21515-1-1-2-215157FFFH7FFFH8000H800
33、0H3232位位+2147483647+2147483647-2147483648-21474836482 23131-1-1-2-231317FFFFFFFH7FFFFFFFH80000000H80000000HBCD( Binary Coded Decimal)BCD( Binary Coded Decimal)码(码(84218421码)码)用用4 4位二进制数(例如位二进制数(例如0000000010011001)表示)表示1 1位十进制位十进制数(数(0 09 9)。)。如:如:1983 = 0001 1001 1000 0011 BCD1983 = 0001 1001 1000 0
34、011 BCD非压缩的非压缩的BCDBCD码:一个字节存放一个十进制数位码:一个字节存放一个十进制数位00000000=0 00000001=1 00000010=200000000=0 00000001=1 00000010=2压缩的压缩的BCDBCD码:一个字节存放码:一个字节存放2 2个十进制数码个十进制数码00010000=10 10001001=8900010000=10 10001001=891.4.2 BCD1.4.2 BCD码码1.4.3 1.4.3 字符数据字符数据 键盘输入的字母和数字、显示器显示的文字等都键盘输入的字母和数字、显示器显示的文字等都是字符信息。是字符信息。
35、西文:常用的将字符与西文:常用的将字符与2 2进制数对应起来的编码方进制数对应起来的编码方法是美国信息标准交换代码法是美国信息标准交换代码ASCIIASCII码。码。 汉字:汉字: GB2312GB2312编码编码 区位码表:分区位码表:分9494区区* *9494位,包括一级汉字(最常用位,包括一级汉字(最常用汉字,按拼音排序)和二级汉字(稍常用汉字,汉字,按拼音排序)和二级汉字(稍常用汉字,按部首排序),均为简体汉字,共约按部首排序),均为简体汉字,共约67006700个。个。标志寄存器用来保存在一条指令执行之后,标志寄存器用来保存在一条指令执行之后,CPUCPU所处状态的信息及运算结果的
36、特征所处状态的信息及运算结果的特征1616位标志寄存器:位标志寄存器:FLAGSFLAGS3232位标志寄存器:位标志寄存器:EFLAGSEFLAGS1.5 1.5 标志寄存器标志寄存器一、条件标志位一、条件标志位 1 1符号标志符号标志SF SF (7 7)若运算结果为负则若运算结果为负则SF=1SF=1,否则,否则SF=0SF=0;这里负是指运算结果的最高位为这里负是指运算结果的最高位为1 1则则SF=1SF=1 2 2零标志零标志ZF ZF (6 6)若运算结果为若运算结果为0 0则则ZF=1ZF=1,否则,否则ZF=0ZF=0例:例:MOV AX, 0MOV AX, 0ADD AX,
37、1 SF=0 ZF=0ADD AX, 1 SF=0 ZF=0SUB AX, 1 SF=0 ZF=1SUB AX, 1 SF=0 ZF=1SUB AX, 2 SF=1 ZF=0SUB AX, 2 SF=1 ZF=01.5.1 1.5.1 标志位标志位3 3溢出标志溢出标志OF OF (1111) 当将操作数作为有符号数看时,使用该当将操作数作为有符号数看时,使用该标志位判断运算结果是否溢出。标志位判断运算结果是否溢出。加法:若同符号数相加,结果的符号与之加法:若同符号数相加,结果的符号与之相反则相反则OF=1OF=1,否则,否则OFOF置置0 0。减法:被减数与减数异号,而结果的符号减法:被减数
38、与减数异号,而结果的符号与减数相同则与减数相同则OF=1OF=1,否则置,否则置0 0。1.5.1 1.5.1 标志位标志位 4 4进位标志进位标志CF CF (0 0) 将操作数看作无符号数时,使用该标志位将操作数看作无符号数时,使用该标志位判断运算结果是否发生了进位或者借位。判断运算结果是否发生了进位或者借位。加法加法:若运算结果从字或字节的最高位向前:若运算结果从字或字节的最高位向前产生了进位则产生了进位则CFCF置置1 1,否则置,否则置0 0。减法减法:两数相减,若将它们看作无符号数,:两数相减,若将它们看作无符号数,则够减无借位置则够减无借位置0 0,有借位置,有借位置1 1。1.
39、5.1 1.5.1 标志位标志位 实际运算结果实际运算结果 应得结果应得结果 看作无符号数看作无符号数 看作有符号数看作有符号数 0 0000 0100 4 +4000 0100 4 +4 + + 0 0000 1011 + 11 + (+11)000 1011 + 11 + (+11) 0 0000 1111 15 +15000 1111 15 +15 无符号数无符号数 15 CF=0 OF=015 CF=0 OF=0 有符号数有符号数 15151.5.1 1.5.1 标志位标志位1.5.1 1.5.1 标志位标志位 实际运算结果实际运算结果 应得结果应得结果 看作无符号数看作无符号数 看作
40、有符号数看作有符号数 0 0000 0111 7 +7000 0111 7 +7 + + 1 1111 1011 + 251 + (-5)111 1011 + 251 + (-5) 1 1 0 0000 0010 258 +2000 0010 258 +2 无符号数无符号数2 CF=1 OF=02 CF=1 OF=0 有符号数有符号数2 21.5.1 1.5.1 标志位标志位 实际运算结果实际运算结果 应得结果应得结果 看作无符号数看作无符号数 看作有符号数看作有符号数 0 0000 1001 9 +9000 1001 9 +9 + + 0 0111 1100 + 124 + (+124)11
41、1 1100 + 124 + (+124) 1 1000 0101 133 +133000 0101 133 +133 无符号数无符号数133 CF=0 OF=1133 CF=0 OF=1有符号数有符号数-123-1231.5.1 1.5.1 标志位标志位 实际运算结果实际运算结果 应得结果应得结果 看作无符号数看作无符号数 看作有符号数看作有符号数 1 1000 0111 135 -121000 0111 135 -121 + + 1 1111 0101 + 245 + (-11)111 0101 + 245 + (-11) 1 1 0 0111 1100 380 -132111 1100
42、380 -132 无符号数无符号数124 CF=1 OF=1124 CF=1 OF=1有符号数有符号数1241245 5奇偶标志位奇偶标志位PF PF (2 2) 当运算结果(指低当运算结果(指低8 8位)中位)中1 1的个数为偶数的个数为偶数时,时,PFPF置置1 1,否则置,否则置0 0。该标志位主要用于检。该标志位主要用于检测数据在传输过程中的错误。测数据在传输过程中的错误。6 6辅助进位标志位辅助进位标志位AF AF (4 4) 标识标识作字节运算的时候作字节运算的时候低半字节向高半字低半字节向高半字节的进位和借位。节的进位和借位。有进位和借位时有进位和借位时AFAF置置1 1 ,否则
43、置否则置0 0。1.5.1 1.5.1 标志位标志位二、控制标志位二、控制标志位1 1方向标志方向标志DF DF (1010) 控制串操作指令的处理方向控制串操作指令的处理方向DF=0DF=0,地址递增(从低地址向高地址变化),地址递增(从低地址向高地址变化)DF=1DF=1,地址递减(从高地址向低地址变化),地址递减(从高地址向低地址变化)2 2中断允许标志中断允许标志IF IF (9 9)控制控制CPUCPU是否允许响应外设的中断请求。是否允许响应外设的中断请求。IF=0IF=0,关中断(,关中断(CPUCPU屏蔽外设的中断请求)屏蔽外设的中断请求)IF=1IF=1,开中断(,开中断(CP
44、UCPU响应外设的中断请求)响应外设的中断请求)3 3跟踪跟踪( (单步单步) )标志标志TF TF (8 8)控制单步执行。控制单步执行。TF=0TF=0,CPUCPU连续工作连续工作TF=1TF=1,CPUCPU单步执行单步执行1.5.1 1.5.1 标志位标志位1. 1. 标志寄存器传送指令标志寄存器传送指令 LAHF LAHF 功能:将标志寄存器的低功能:将标志寄存器的低8 8位位AHAH 说明:本指令不带操作数,也不影响标志位。说明:本指令不带操作数,也不影响标志位。 SAHF SAHF 功能:将功能:将(AH)(AH)标志寄存器的低标志寄存器的低8 8位。位。 说明:标志寄存器原来
45、低说明:标志寄存器原来低8 8位的内容全部被冲掉,位的内容全部被冲掉,以以AHAH的内容来取代。但它算不影响高字节内容。的内容来取代。但它算不影响高字节内容。( (因高字节中以控制标志为主,不能随便改变因高字节中以控制标志为主,不能随便改变) ) 1.5.2 1.5.2 标志寄存器操作指令标志寄存器操作指令 标志寄存器进栈指令标志寄存器进栈指令PUSHFPUSHF 功能:将标志寄存器内容压入堆栈功能:将标志寄存器内容压入堆栈 即:即: (SPSP)2SP 2SP (FLAGSFLAGS)(SPSP) 标志寄存器出栈指令标志寄存器出栈指令POPFPOPF 功能:将栈顶的内容送入标志寄存器功能:将
46、栈顶的内容送入标志寄存器1.5.2 1.5.2 标志寄存器操作指令标志寄存器操作指令2.2.标志位操作指令标志位操作指令 CLC CLC 使使CF=0 CF=0 (Clear carryClear carry)进位标志进位标志CF CMC CF CMC 使使CFCF取反(取反(Complement carryComplement carry) STC STC 使使CF=1 CF=1 (Set carrySet carry) CLD CLD 使使DF=0 DF=0 (Clear directionClear direction)方向标志方向标志DF DF STD STD 使使DF=1 DF=1
47、(Set directionSet direction) CLI CLI 使使IF=0 IF=0 (Clear interruptClear interrupt)中断标志中断标志IF IF STI STI 使使IF=1 IF=1 (Set interruptSet interrupt)1.5.2 1.5.2 标志寄存器操作指令标志寄存器操作指令.386 .386 (绿色部分可省略,(绿色部分可省略,红色为段名红色为段名); ;数据段数据段DATADATA SEGMENT SEGMENT USE16USE16 ; ;段为段为1616位段位段 SUM DW ? ;SUMSUM DW ? ;SUM为
48、字变量,初值不定为字变量,初值不定DATADATA ENDS ENDS1.6 1.6 汇编源程序举例汇编源程序举例; ;堆栈段堆栈段 STACKSTACK SEGMENT SEGMENT USE16 STACKUSE16 STACK; ;段名和组合类型段名和组合类型 DB 200 DUP(0) ;DB 200 DUP(0) ;定义堆栈为定义堆栈为200200个字节个字节STACK STACK ENDSENDS1.6 1.6 汇编源程序举例汇编源程序举例; ;代码段代码段CODECODE SEGMENT SEGMENT USE16USE16 ASSUME CS:ASSUME CS:CODECOD
49、E, SS:, SS:STACKSTACK,DS:,DS:DATADATASTART: MOV AXSTART: MOV AX,DATADATA MOV DS MOV DS,AX ;AX ;数据段首址送数据段首址送DSDS1.6 1.6 汇编源程序举例汇编源程序举例 MOV CX MOV CX,50 ;50 ;循环计数器置初值循环计数器置初值 MOV AXMOV AX,0 ;0 ;累加器置初值累加器置初值 MOV BXMOV BX,1 ;1BX1 ;1BXNEXTNEXT:ADD AXADD AX,BX ;(AX)+(BX)AXBX ;(AX)+(BX)AX INC BX INC BX INC
50、 BX ;(BX)+2BX INC BX ;(BX)+2BX DEC CX ;(CX)-1CX DEC CX ;(CX)-1CX JNE NEXT ;(CX)0 JNE NEXT ;(CX)0转转NEXTNEXT MOV SUM MOV SUM,AX ;(CX)=0AX ;(CX)=0累加结果累加结果SUMSUM1.6 1.6 汇编源程序举例汇编源程序举例 MOV AHMOV AH,4CH4CH INT 21H ; INT 21H ;返回返回DOSDOSCODECODE ENDS ENDS END START ; END START ;源程序结束语句。程源程序结束语句。程序运行时,启动地址为序