slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
微型计算机系统 PowerPoint Presentation
Download Presentation
微型计算机系统

Loading in 2 Seconds...

play fullscreen
1 / 131

微型计算机系统 - PowerPoint PPT Presentation


  • 147 Views
  • Uploaded on

微型计算机系统. 本课程的任务、目标:. 第二章:微处理器的指令系统. 第二章. 微处理器的指令系统. 第二章:微处理器的指令系统. 教学要求 :. 本章重点介绍 8088/8086 指令系统中 7 种寻址方式和常用指令系统,此内容是 8088/8086 汇编语言编程的重点内容,它们对编程起着至关重要的作用。. 第二章:微处理器的指令系统. 本章主要内容:. 一、 8088/8086 的寻址方式 操作数类型 寻址方式. 二、指令系统 数据传送指令 算术运算指令 逻辑运算指令 移位指令. 转移指令 字符串操作指令 处理器操作指令 中断指令.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '微型计算机系统' - rowdy


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
本课程的任务、目标:

第二章:微处理器的指令系统

第二章

微处理器的指令系统

slide3

第二章:微处理器的指令系统

教学要求:

本章重点介绍8088/8086指令系统中7种寻址方式和常用指令系统,此内容是8088/8086汇编语言编程的重点内容,它们对编程起着至关重要的作用。

slide4

第二章:微处理器的指令系统

本章主要内容:

  • 一、 8088/8086的寻址方式
    • 操作数类型
    • 寻址方式
  • 二、指令系统
    • 数据传送指令
    • 算术运算指令
    • 逻辑运算指令
    • 移位指令
  • 转移指令
  • 字符串操作指令
  • 处理器操作指令
  • 中断指令
slide5

第二章:微处理器的指令系统

§ 2.1 8088/8086的寻址方式

§ 2.1.1 概述

指令:控制计算机操作的基本命令形式

指令组成:有操作码 (OP)和操作数(OPRD )两部分

操作码 ——指示计算机要执行的操作;

操作数 ——指出在指令执行操作过程中所需要的数据;

指令的一般格式:

slide6

第二章:微处理器的指令系统

其中操作码必不可少,操作数可有一个或多个也可没有。

8086/8088的指令系统中,一般为无操作数、单操作数和双 操作数。操作数的存放(来源)有三种。

寻址:指令执行时寻找操作数地址的过程;

寻址方式:寻找操作数存放地址的各种方式。

slide7

第二章:微处理器的指令系统

§ 2.1.2 操作数类型

8088/8086指令中的操作数可以分为3种类型:

立即数操作数、寄存器操作数和存储器操作数。

  • 1、立即数操作数
    • 立即数是作为指令代码的一部分出现在指令中。
    • 通常作为源操作数使用。
    • 书写形式可以为二进制、八进制、十进制和十六进制数,也可以是一个可求出确定值的表达式。
  • 2、寄存器操作数
    • 操作数存放在寄存器中,用来参加运算或存放结果。
    • 在双操作数指令中,它可以作为源操作数和目的操作数。其书写形式就是寄存器的名称。
slide8

第二章:微处理器的指令系统

目的操作数(OPD):为指令提供操作数据及操作结果的存放位置,它的值是随执行结果而变化的;

源操作数(OPS):只为指令提供操作数据,其值在指令执行过程中是不变的。

例 ADD AX,BX

其中:AX是目的操作数,BX是源操作数,

执行前,AX存放被加数,BX存放加数,

执行后,AX和BX相加的结果存放在AX中。

  • 3. 存储器操作数
    • 存储器操作数存放在存储器中,其存放的地址出现在指令中;
    • 其存放的地址应该是物理地址,但段地址是隐含的,一般采用偏移地址EA(或称有效地址)来表示;
    • 书写形式:假如偏移地址是X,该地址中的内容为Y,则(X)=Y
slide9

第二章:微处理器的指令系统

§ 2.1.3 寻址方式

  • 寄存器寻址
    • 指令所需操作数存放在指令指定的寄存器中。
    • 16位操作数时,寄存器可以是:AX、BX、CX、DX、SI、DI、SP、CS、DS、ES、SS和BP ;
    • 8位操作数时,寄存器可以是:AL、AH、BL、BH、CL、CH、DL和DH。
  • 特点:寻址方式速度较快。适用于需要经常存取的操作数

例:MOVAX,BX 把BX的内容传送到AX

slide10

2. 寄存器间接寻址

◆ 操作数的偏移地址EA在指令指定的寄存器中,即寄存器R的内容为操作数的偏移地址EA,而操作数存放在存储器中。

◆ 操作数物理地址PA的形成:

PA= 段寄存器×16+ EA

= 段寄存器×10H+ R

◆ 可作间接寻址的寄存器只能

是:SI、DI、BP、BX;

slide11

第二章:微处理器的指令系统

◆段寄存器的选择

若指令中指定的寄存器是 BX、DI或 SI,则操作数在当前数据段中,操作数的物理地址为:

BX

PA=DS ×10H +SI

DI

若指令中指定的寄存器是BP,则操作数在当前堆栈段中,操作数的物理地址为:

PA= SS ×10H +BP

◆ 寄存器的间接寻址方式可以用于表格处理,执行完一条指令后,只需修改寄存器内容就可取出表格中的下一项,所以,通常将它们称作地址指示器,用于存取存储器数据。

slide12

第二章:微处理器的指令系统

例:MOV  AX,[BX]

指令执行后:

AX=3412H

slide13

第二章:微处理器的指令系统

【例2.3】 MOV AX,[BX] ,执行前:AX=6,BX=100H,

DS=1000H,(10100H)=60FEH。双操作数指令。

AX是目的操作数地址,其寻址方式为寄存器寻址方式;

源操作数[BX]表示采用寄存器间接寻址方式,BX的内容为源操作数的偏

移地址EA;

源操作数的物理地址为: PA= DS ×10H + BX

执行后:AX=60FEH,

BX、DS、(10100H)的内容未变。

slide14

第二章:微处理器的指令系统

【例2.4】 MOV AX,[BP]

执行前:AX=0,BP=50H,SS=2000H,20050H=1A34H

目的操作数地址是AX ;

源操作数[BP]表示使用寄存器间接寻址,BP的内容为源操作数

的偏移地址EA;

源操作数的物理地址:

PA=SS ×10H +BP

执行后:

AX=1A34H,BP、SS、(20050H)内容未变。

slide15

第二章:微处理器的指令系统

  • 3. 寄存器相对寻址(直接变址寻址)

操作数的偏移地址EA是一个基址寄存器或变址寄存器的内容和指令中给出的8位或16位位移量之和;

    • 基址寄存器有 BX、BP;变址寄存器有 SI 、DI
    • 操作数物理地址PA的形成

PA= 段寄存器×16+R+X

其中:

X为8位或16位的位移量

R为基址寄存器或变址寄存器

slide16

第二章:微处理器的指令系统

  • 段寄存器的选择
  • 若指令中指定的寄存器是BX、DI或SI,则操作数在当前数据段中,操作数的物理地址为:
  • BX
  • PA= DS ×10H + SI + X
  • DI
  • 若指令中指定的寄存器是BP,则操作数在当前堆栈段中,操作数的物理地址为:
  • PA= SS ×10H + BP + X
slide17
寄存器相对寻址

例:MOV   Al,   [BX+5]

slide18

第二章:微处理器的指令系统

【例2.5】MOV AX,NAME[BX]

执行前:AX=0,BX=1000H,DS=2000H,(21100H)=1234H,NAME=100H

目的操作数为AX,采用寄存器寻址方式;源操作数采用寄存器相对寻址方式,

NAME为16位位移量的符号地址,故X的值为100H,变址寄存器为BX,所以EA= BX +NAME=1100H,

源操作数的物理地址:

PA=DS × 16 +BX+ NAME = 21100H

执行后:AX=1234H,BX、DS、

(20010H)内容未变。

指令 MOV AX,NAME[BX]也可写为:MOV AX,[BX+NAME]格式

slide19

第二章:微处理器的指令系统

【例2.6】 ADD 5[BP],BX

执行前:BX=40H,BP=30H,SS=2000H,(20035H)=50H。

目的操作数采用寄存器相对寻址方式,其偏移地址EA= BP +5;

源操作数为BX采用寄存器寻址方式;

目的操作数的物理地址PA为堆栈段寄存器SS的内容左移4位与 EA相加:

PA=SS × 16 + BP + 5

=20000H+30H+5 =20035H

执行后:(20035H)=90H,BX、BP、SS未变。

slide20

第二章:微处理器的指令系统

4. 基址变址寻址

操作数在存储器中,操作数的偏移地址EA是一个基址寄存器和一个变址寄存器之和,两个寄存器均由指令指定。

  • 基址寄存器为BX和BP,变址寄存器有 SI 、DI。
  • 操作数的偏移地址EA
  • BX + SI
  • BX + DI
  • EA=
  • BP + SI
  • BP + DI
slide21

第二章:微处理器的指令系统

  • 操作数物理地址PA的形成

PA= 段寄存器×16+ BR+ IR

若选用BX作为基址寄存器,操作数的物理地址PA为:

SI

PA= DS ×10H + BX +

DI

若选用BP作为基址寄存器,操作数的物理地址PA为:

SI

PA= SS ×10H + BP +

DI

slide22

第二章:微处理器的指令系统

例:MOVAX,[BX][SI] 或 MOVAX,[BX+SI]

设:(DS)=5000H

(BX)=2000H

(SI)=0006H

有效地址EA=2000H+0006H

=2006H

物理地址=5000H×10H+

2006H=52006H

执行结果:AX=0AB78H

slide23

第二章:微处理器的指令系统

【例2.7】 MOV AX,[BX][DI]

执行前:BX=2000H,DI=0002H,DS=3000H,(32002H)=1AFEH

源操作数采用基址变址寻址,变址寄存器选用了DI,基址

寄存器选用了BX,故源操作数的物理地址:

PA=(DS)左移4位+BX+DI=32002H,操作数为(32002H)=1AFEH

执行后:AX=1AFEH,BX、DI、DS、(32002H)内容未变。

【例2.8】MOV [BP+SI],CX

执行前:SS=1000H,BP=300H,SI=50H,CX=1234H,(10350H)=0FFFFH

目的操作数采用基址变址寻址方式,基址寄存器选用了BP,

故目的操作数的物理地址:

PA=(SS)左移4位+BP+SI =10350H;

执行后:(10350H)=1234H,BP、SI、CX的内容不变。

slide24

第二章:微处理器的指令系统

5. 相对基址加变址寻址

操作数的偏移地址EA是指令中指定的基址寄存器内容、变址寄存器内容及8位或16位位移量X三项相加之和;

  • 操作数的偏移地址EA

BX + SI +X

BX + DI+X

BP + SI+X

BP + DI+X

EA =

    • 操作数物理地址PA的形成
  • PA= 段寄存器×16+ BR+ IR +X
slide25

第二章:微处理器的指令系统

    • 若选用BX作为基址寄存器,操作数的物理地址PA为:
  • SI
  • PA= DS ×10H + BX + +X
  • DI
    • 若选用BP作为基址寄存器,操作数的物理地址PA为:
  • SI
  • PA= SS ×10H + BP + +X
  • DI

【例2.9】 MOV AX,80[BX+SI]

执行前:AX=30H,BX=1000H,SI=100H,DS=3000H,(31180H)=1234H

源操作数采用相对基址加变址寻址,由于选用BX作基址寄存

器,所以其物理地址:

PA=(DS)左移4位+BX+SI+80H=31180H, 操作数为(31180H)=1234H。

执行后:AX=1234H,BX、SI、DS、(31180H)未变。

slide26

第二章:微处理器的指令系统

【例2.10】MOV -6[BP+DI],AX

执行前:AX=33H,BP=10H,DI=48H,SS=4000H,(40052H)=900H

目的操作数采用相对基址加变址寻址方式,基址寄存器选用了BP,段寄存

器就是SS,所以,其物理地址PA =(SS) ×+BP+DI+(-6)=40052H

执行后:(40052H)=33H,BP、DI、SS、AX内容均未改变。

  • 6. 立即寻址

操作数直接放在指令中,即操作数的存放地址就是指令操作码的下一单 元的地址,其内容为操作数n。

    • 操作数n称为立即操作数可以是8位或16位二进制补码表示的常数, 若是16位,则高位字节存放在高地址单元中,低位字节存放在低地址单元中。
slide27

第二章:微处理器的指令系统

例 MOV  AX,1234H

  • 该方式不能用在单操作数指令中,不能用于目的操作数字段,只能用于源操作数字段。

【例2.11】 MOV CL,10

目的操作数地址是CL;

源操作数是立即数10,其地址是指令操作码的下一单 元。源操作数10紧跟着指令操作符存放在代码段中。

该指令的功能是将立即数10送入CL寄存器中。

【例2.12】 MOV AX,‘AB’

目的操作数地址是AX;

源操作数是字母A、B,其地址是指令操作码的下一单元。源操作数‘AB’紧跟着指令操作符存放在代码段中。

该指令的功能是将高地址单元中的字母A的ASCII码送入AH中、低地址单元中的字母B的ASCII码送入AL中。

slide28

第二章:微处理器的指令系统

  • 7. 直接寻址

指令操作数字段中存放的是操作数的16位偏移地址EA,即操作数的偏移地址EA与操作码一起存放在代码段中,存放于指令操作码下一字单元中;

  • 操作数可以存放在数据段,也可以存放在其他段,操作数可以是字或字节。
  • 操作数的物理地址由其所在段的寄存器内容左移4位与指令中给出的偏移地址EA相加形成,如图 所示。
  • EA可以用符号或数值表示,如果EA为数值,则必须用方括号括起来,而且在方括号前应给出段寄存器名;如果EA用符号表示,则方括号可用可不用。
slide29

第二章:微处理器的指令系统

  • 例:MOV AL, DS:[2000H]
    • 若DS=4000H,则此指令式将数据段中物理地址为42000H 单元的内容传送AL寄存器。
slide30

第二章:微处理器的指令系统

【例2.13】 (1) MOV AX,DS:[2005H]

(2) MOV DH,DS:[2005H]

执行前:AX=1,DS=3000H,(32005H)=10H ,(32006H)=20H。

目的操作数 均为寄存器;

源操作数都采用直接寻址方式,在数据段中,其偏移地址为2005H;

执行后:DS、(32005H)字节单元内容未变。

(1) 源操作数为16位的字数据,执行后:AX=2010H。

(2) 源操作数为8位的字节数据,执行后:DH=10H。

【例2.14】MOV AX,BUFA

若BUFA在数据段定义,其偏移地址是1000H,即 BUFA =1000H,

执行前 DS=2000H,AX=222H,(21000H)=1234H。

源操作数采用直接寻址方式, 变量BUFA的偏移地址EA存放于指令操作码

下 一单元中。

指令的功能是将字类型变量BUFA中的内容送入AX之中。

执行后:AX=1234H。

slide31

第二章:微处理器的指令系统

    • 直接寻址方式适合于处理单个变量。当需要对某个存放在存储器中的变
  • 量进行处理时,可以先用直接寻址方式把该变量取到一个寄存器中,
  • 例如:
        • MOV AX, A1 ; A1中内容→AX
        • MOV BX, A2 ; A2中内容→BX
        • MOV CX, A3 ; A3中内容→CX
        • MOV DX, A4+6 ; A4+6中内容→DX
slide32

第二章:微处理器的指令系统

8. 跨段的有关问题

  • 7种寻址方式中,除立即数寻址方式和寄存器寻址方式外,其他各种寻址方式的操作数都在除代码段以外的存储区中;
    • 指令中若不标明段寄存器,就表示操作数在默认的存储段中;
  • 直接寻址方式的操作数默认在数据段;
  • 其它4种寻址方式中:
  • 凡选用寄存器BP作间址寄存器、或基址寄存器时,操作数默认在堆栈段;
  • 凡选用寄存器BX、SI、DI作间址寄存器、变址寄存器或基址寄存器时,
  • 操作数默认在数据段;
    • 否定默认状态,操作数在非约定段时,必须采用跨段前缀指明操作数所在段的段寄存器名。
  • 汇编格式:操作码 目的操作数,段寄存器名:源操作数
  • “:”之前的段寄存器指明了操作数所在段。
slide33

第二章:微处理器的指令系统

  • 跨段前缀的说明:
  • ;DS左移4位+ BP
  • ;ES左移4位+ BX
  • ;SS左移4位+ SI
  • ;SS左移4位+ DI
  • 例 :
  • MOV AX,DS:[BP]
  • MOV BX,ES:[BX]
  • MOV CX,SS:[SI]
  • MOV DX,SS:[DI]

上述指令中若无跨段前缀(DS:、ES:、SS:),则默认状态确定操作数所在的段。此时,第(1)条的源操作数在堆栈段,第(2)、(3)、(4)条的源操作数在数据段。

  • 在实际应用中,当要访问某段之中某一单元时,着重考虑的不是其物理地址的计算方法及结果,而是其类型及偏移地址的表示形式。
slide34

第二章:微处理器的指令系统

§ 2.2 指 令 系 统

808/8086指令系统有92种基本指令。按功能可分为6大类:

  • 数据传送类指令
  • 算术运算类指令
  • 逻辑运算和移位类指令
  • 串操作类指令
  • 控制转移类指令
  • 处理器控制类指令

§ 2.2.1 数据传送指令

数据传送指令用来实现寄存器和存储器间的字节或字的数据传送。

包括:

  • 通用数据传送指令
  • 输入/输出数据传送指令
  • 地址传送指令
  • 状态标志位传送指令
slide35

第二章:微处理器的指令系统

  • 1. 通用数据传送指令
  • (1) 数据传送指令 MOV
    • 格式:MOV OPD,OPS
  • 功能:OPD是目的操作数,OPS是源操作数。该语句的功能
  • 是将源操作数送至目的地址中,即 OPS → OPD 。
    • MOV 指令可以在CPU内或CPU和存储器之间传送字或字节。
    • 传送的信息可以有如下7种形式:

(1) 寄存器到寄存器:

MOV AX,BX ;将BX的内容送到AX中。

(2) 立即数到寄存器

MOV AX,03H ;将立即数03H送到AX中。

(3) 立即数到存储单元:必须用PTR确定操作数类型

MOV BYTE PRT [2000H],12H将立即数12H送到(2000H)中。

slide36

第二章:微处理器的指令系统

    • (4) 存储单元到寄存器
  • MOV AX,Y[BP][SI] ;将地址为(SS) ×16+(BP)+(SI)+位移
  • 量Y的存储单元的内容送到AX中。
  • (5) 寄存器到存储单元
  • MOV TABLE,AX ;将寄存器AX中的内容送到TABLE存储
  • 单元中。
  • (6) 寄存器或存储单元到除CS外的段寄存器
  • MOV DS,DATA;将DATA的内容送到DS中。
  • (7) 段寄存器到寄存器或存储单元
  • MOV AX,DS ;将段寄存器的内容送到AX中。
slide37

第二章:微处理器的指令系统

使用MOV指令时要注意以下一些问题:

(1) 不允许在两个存储单元之间直接传送数据。

(2) 不允许在两个段寄存器之间直接传送数据。

(3) 不允许用立即数直接为段寄存器赋值。

(4) 不影响标志位。

(5) 段寄存器CS及立即数不能作为目标操作数;

(6) 传送数据的类型必须匹配;

slide38

第二章:微处理器的指令系统

MOV指令中各类数据的传送关系

slide39

第二章:微处理器的指令系统

  • (2) 堆栈操作指令
    • 堆栈是内存中的一个特殊存储区(RAM区),用于数据的保存;
    • 堆栈中的数据只能通过堆栈的一端进行存取,这一端称为“栈顶”;
    • 堆栈数据总是通过栈顶进行存取,栈顶指针用SP寄存器表示;
    • 堆栈操作的原则为“先进后出”或“后进先出”;
    • 堆栈操作必须以“字”为单位进行;
    • 堆栈中的数据在堆栈段中从地址高端向低端存放,称为向下生长型;
  • 堆栈操作指令包括入栈指令PUSH和出栈指令POP:

①入栈指令 PUSH

格式:PUSH OPS

执行的操作:(OPS)→(SP-1)(SP-2) SP-2→SP

功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈中。

slide40

SS→

AX

SS→

04

F8

0FFEH

0FFFH

1000H

F8

04

0FFEH

0FFFH

1000H

XX

XX

第二章:微处理器的指令系统

【例2.15】 PUSH AX

执行后:( 0FFEH)=04F8H,AX的 内容不变。堆栈情况如图所示。

执行前:AX = 04F8H,SP =1000H

SP→

SP→

slide41

SS→

SS→

AX

04

F8

SP→

SP→

F8

F8

0FFEH

0FFFH

1000H

0FFEH

0FFFH

1000H

04

04

XX

XX

第二章:微处理器的指令系统

② 出栈指令 POP

格式:POP OPD。

执行的操作: OPD ← (SP+1 , SP ), SP ← SP +2

功能:将堆栈栈顶内容弹入寄存器、段寄存器或存储器中。

【例2.16】 POP AX

执行前:AX=1111H

执行后:AX=04F8H

SP→

slide42

第二章:微处理器的指令系统

  • 几点说明:
    • PUSH指令的操作数不能是“立即数”,POP指令的操作数不能是段寄存器CS。
    • PUSH和POP指令都不影响标志位。
    • 堆栈操作中,当多个数据暂存时,PUSH进入数据的顺序与POP弹出的顺序应相反。

【例2.17】依次用堆栈保存AX、BX、CX、DX寄存器的内容,然后再将

它们复原。

  • POP DX
  • POP CX
  • POP BX
  • POP AX
  • PUSH AX
  • PUSH BX
  • PUSH CX
  • PUSH DX
slide43

第二章:微处理器的指令系统

(3) 交换指令与换码指令

① 交换指令 XCHG

格式: XCHG OPD, OPS

执行的操作:OPS OPD

功能:将两个操作数的内容互换

  • 可在累加器、通用寄存器或存储器之间相互交换,两个存储器间不能直接交换,也不允许使用段寄存器。
  • 可以是字节或字操作,执行结果不影响标志位。

例: XCHG AX,[2000H]

指令执行前 AX=01F0H、DS=F000H、(F2000H)=4AB7H

功能为交换AX寄存器和2000H地址单元的内容;

指令执行后 AX=4AB7H、(F2000H)=01F0H。

slide44

第二章:微处理器的指令系统

【例2.18】写出使两个内存单元NUM1和NUM2的内容互换的指令。

由于XCHG指令不允许同时对两个存储单元进行操作,必须借助于一个通用寄存器AX。先把NUM1中的数据传送到AX,再将AX中的内容与 NUM2进行交换。

  • 程序为:MOV AX , NUM1
  • XCHG AX , NUM2
  • MOV NUM1 , AX

②换码指令 XLAT

格式:XLAT或 XLAT OPR ,OPR为表首址;

执行的操作:AL DS:( BX+AL )

功能:将BX寄存器内容加上AL寄存器内容作为操作数的偏移地址,从

数据段中这个地址取一字节内容送AL中。 作用是将一种代码转

换成另一种代码。

slide45

第二章:微处理器的指令系统

  • XLAT指令所需的数据表格是预先建立的,当 进行代码转换时,应先将表格的首地址存入BX寄存器,并把需要转换的代码(即相对于首地址的偏移值)存入AL寄存器。
  • 该指令的执行结果不影响标志位。
  • AL寄存器只有8位,所以表格长度不能超过256个字节。

例:用查表法将10进制数转换成相应的ASCII码。

解:在数据段中定义一个10进制的ASCII码表,设表的名称为ABC,内容为30H、31H、32H、33H、34H、35H、36H、37H、38、39H。

程序段为:MOV AL,5

LEA BX, ABC

XLAT

slide46

第二章:微处理器的指令系统

  • 2. 地址传送指令
  • (1)有效地址送寄存器指令 LEA
  • 格式:LEA OPD,OPS ;
  • 功能:该指令把源操作数的偏移地址送到指定的寄存器中;
    • OPD可以为任一16位通用寄存器,OPS为各种寻址方式的存储器操作数,可以是变量名、标号或地址表达式。
  • 例 LEA AX,TABLE ;TABLE为标号
  • LEA CX,[BX+SI]
  • LEA DX,NUM[SI+BX] ;NUM为变量
    • LEA指令取的是变量的偏移地址,而不是变量的值。
  • 【例2.19】 比较以下两条指令的区别。
  • LEA DX , VALUE和 MOV AX , VALUE
      • 若指令执行前,VALUE的有效地址为100H,以VALUE为符号地址的字单元中内容为3056H。
  • 则LEA指令执行后 DX=0100H ;MOV指令执行后 AX=3056H。
slide47

第二章:微处理器的指令系统

  • (2) 数据段指针送寄存器指令 LDS
    • 格式:LDS OPD ,OPS
    • 功能:把源操作数OPS指定的内存中低地址的两个单元的内容 送到由指令指定的通用寄存器中,高地址两个单元的内容送到DS段寄存器。
  • OPD可以为任一16位通用寄存器BX,BP,SI,SI等,OPS为各种寻址方式的存储器操作数;

【例2.20】 LDS SI,[BX]

指令执行前:DS=0C00H、BX=0200H、(0C200H)=2A35H、

(C202H)=4000H。

slide48

第二章:微处理器的指令系统

由BX间接寻址的存储器单元的物理地址 PA=0C200H;

0C200H- 0C201H 单元内容为偏移地址送SI;

0C202H- 0C203H 单元内容为段基地址送DS;

指令执行后:执行后DS=4000H、SI=2A35H,

slide49

第二章:微处理器的指令系统

  • (3) 附加段指针送寄存器 LES
    • 格式:LES OPD,OPS。
    • 功能:OPS指定的内存中低地址的两个单元的内容送到由指令指定的通用寄存器中,高地址两个单元的内容送到ES段寄存器中。

【例2.21】 LES DI,[BX]

执行前:DS=B000H、BX=0020H、(B0020H)=0076H、(B0022H)=1F00H

执行后:ES=1F00H、DI=0076H

  • (4)地址传送指令特点
    • 地址传送指令的目的操作数都不为段寄存器,且源操作数寻址方式必须是除立即数方式和寄存器方式以外的其他寻址方式。
    • 都不影响标志位。
slide50

第二章:微处理器的指令系统

3. 标志寄存器传送指令

(1) 标志寄存器送AH指令LAHF

格式:LAHF

功能:将标志寄存器FR低八位 送到AH中。

(2)AH 送标志寄存器指令 SAHF

格式:SAHF

功能:将AH的内容送到标志寄存器FR的低8位中。

slide51

第二章:微处理器的指令系统

(3) 标志寄存器入栈指令PUSHF

格式:PUSHF

功能:将标志寄存器FR的内容压入堆栈。

(4) 标志出栈指令POPF

格式:POPF。

功能:将栈顶内容弹出送入标志寄存器中。

  • (5)标志寄存器传送指令的特点
    • LAHF、PUSHF不影响标志位;
  • SAHF、POPF影响标志位,由装入的值确定标志位的值。
    • PUSHF、POPF用于保护调用过程前(PSW),过程返回后恢复。
slide52

第二章:微处理器的指令系统

§ 2.2.2 算术运算指令

算术运算指令可对带符号数、无符号数和十进制数进行算术运算。

主要包括:加、减、乘、除 、十进制调整和符号扩展操作等指令。

1. 加法指令

(1) 不带进位的加法指令 ADD

格式: ADD OPD,OPS

功能 :完成源操作数和目的操作数的加法运算,和送目的单元

执行的操作: OPD OPD + OPS

  • OPS和OPD可同为8位或16位的操作数;
  • OPS可以是立即数,寄存器操作数,存储器操作数;
  • OPD可为寄存器操作数,存储器操作数;
  • 目的和源操作数不能同时为存储器、段寄存器;

几点说明:

slide53

第二章:微处理器的指令系统

    • 标志位的影响
  • OF标志:当8位带符号数相加, 和超出范围(-128~+127)
  • 或16位带符数相加,和超出范围(-32768~+32767)时,
  • 置OF=1;否则OF =0 ;
  • CF标志:当8位数相加或16位数相加,最高位有进位时,
  • 置 CF=1;否则CF =0 ;
  • 状态标志SF,AF,PF,ZF:根据运算结果设置。

【例2.22】寄存器BX 的数据和一立即数相加的指令 ADD BX,0F0F0H;

若执行前BX=1234H,写出执行后结果和各状态标志。

0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0

1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

10 0 0 0 0 0 1 1 0 0 1 0 0 1 0 0

+

执行后 BX =0324H, CF=1,SF=0,ZF=0,OF=0,PF=1, AF=0

slide54

例 MOV AL,7EH ; AL =7EH

MOV BL, 5BH ; BL =5BH

ADD AL,BL ; AL =7EH+5BH=D9H

影响标志位的情况:

SF=1 , 结果最高位=1

ZF=0 ,结果不等于0

AF=1 ,D3 位向D4 有进位

PF=0 ,”1”的个数为奇数

CF=0 ,无进位

OF=1 ,和超过+127

(两个正数相加,结果为负;反之亦是)

slide55

(2)带进位加法指令ADC

格式:ADC OPD,OPS

执行的操作:OPD OPD + OPS+ CF

功能 :完成源操作数、目的操作数和进位标志CF的加法运算,和

送目的单元

  • 指令的特征、用法和对标志位的影响和ADD指令相同;
  • 主要用于多字节运算中。低位数相加用ADD指令,高位数相加用ADC指令,CF 值为低位相加时产生的进位;

【例2.23】在寄存器DX、AX和BX、CX中分别存放32位数,写出

计算两数之和的指令 。

若执行前:DX=0067H, AX=F000H

CX=0001H, BX=2345H

slide56

指令序列: ADD AX, BX

ADC DX, CX

执行第一条指令ADD AX,BX 后:

AX=1345H,CF=1,ZF=0,

SF=0,OF=0,PF=0

1 1110000 00000000

+ 0 0100011 01000101

10 0010011 01000101

执行第二条指令 ADC DX,CX后:

DX=0069H,CF=0,ZF=0,

SF=0,OF=0,PF=1

0 0000000 01100111

0 0000000 00000001

+ 1

0 0000000 01101001

两数之和为:0069 1345 H

slide57

例:在以DATA1和DATA2为首址的存储器单元中分别存放2个32位数,写出计算两数之和并将结果存放于DATA3为首址的内存单元中的指令序列

若执行前,数据存放如图所示。

完成加法: 74AC60F8H + D59E36C1H

程序为:

MOV AX,DATA1

ADD AX,DATA2 ; AX +(DATA2)→AX

MOV DATA3,AX

MOV AX,DATA1+2

ADC AX,DATA2+2 ; AX +(DATA2+2)+CF→AX

MOV DATA3+2,AX

slide58

第二章:微处理器的指令系统

(3)加1指令 INC

  • 格式: INC OPD
  • 执行的操作:OPD OPD +1
  • 功能:指定的操作数加1,
  • OPD可为8位或16位的操作数,可以是寄存器、存储器。不能是段寄存器
  • 标志位的影响 :影响SF、ZF、AF、PF、OF, 不影响CF。
  • 用于在循环程序中修改地址指针和循环次数。

例:INC AL ;8位寄存器AL的内容加1

INC CX ;16位寄存器CX的内容加1

INC [SI] ;存储器 单元内容加1

BYTE PTR字节

INC[SI] ;存储器单元内容加1

WORD PTR 字

slide59

第二章:微处理器的指令系统

  • (4)BCD码加法调整指令
  • BCD码的加法
  • 被加数、加数用BCD码表示,做加法时按二进制加法规则进行, 要求相加后的和也为BCD码表示的数。

BCD码加法完成:

35 +42 28+36

(0 0 1 1 0 1 0 1) BCD

+(0 1 0 0 0 0 1 0 ) BCD

( 0 1 1 1 0 1 1 1 )BCD =77

( 0 0 1 0 1 0 0 0)BCD

+ ( 0 0 1 1 0 1 1 0 ) BCD

0 1 0 1 1 1 1 0 非法码

+ 1 1 0

( 0 1 1 0 0 1 0 0 ) BCD = 64

slide60

第二章:微处理器的指令系统

① 非压缩BCD码加法调整指令 AAA

    • 格式 : AAA
    • 执行的操作:若 AL&0FH > 9 或 AF=1
    • 则 AL ← AL+6 、AL ← AL ∧0FH、AH ← AH+1
  • AF ← 1 、CF ← AF
    • 功能: 对AL中的两个非压BCD码数相加的和进行调整;
  • AAA 必须紧跟在加法指令ADD 或ADC后
  • 影响标志位AF、CF ,标志位OF PF SF ZF 为不定值。
  • 例:设AX的内容为 05H,BL寄存器的内容为09H,执行
  • ADD AL, BL AHAL
  • AAA
  • 0000 0101
  • + 0000 1001
  • 0000 1110
  • 0000 0000
  • + 0000 0001
  • 0000 0001

指令执行后:

AX寄存器的内容是0104H。

  • + 0000 0110
  • 0001 0100

AL ∧0FH=00000100

slide61

第二章:微处理器的指令系统

② 压缩BCD码加法调整指令 DAA

格式 :DAA

执行的操作:若 AL&0FH > 9 或 AF=1 则 AL← AL+6 、AF ←1

  • 若 AL&F0 ≥A0H 或 CF=1 则 AL← AL+60H、CF ←1

功能: 对AL中的两个压缩BCD码数相加的和进行调整:

  • DAA必须紧跟在加法指令ADD 或ADC后
  • 影响标志位AF、CF、 PF、 SF 、ZF ,标志位 OF为任意值。
  • 例:设AL的内容为 05H,BL寄存器的内容为09H,执行
  • ADD AL, BL
  • DAA
  • 0000 0101
  • + 0000 1001
  • 0000 1110

AL:

  • +0000 0110
  • 0001 0100

执行后AL=14H

slide62

第二章:微处理器的指令系统

    • 2. 减法指令
  • (1) 不带借位的减法指令 SUB
    • 格式:SUB OPD, OPS
    • 执行的操作:OPD ← OPD-OPS
    • 功能:目的操作数减去源操作数,其差值送入目的地址
    • OPS可以是立即数,寄存器,存储器;
  • OPD可为 寄存器,存储器;
  • 但不能同为存储器, 不能为段寄存器;
    • 标志位的影响
  • OF标志:8位数或16位数运算结果超出范围(-128~+127)
  • 或(-32768~+32767)时,置OF =1;否则置OF =0。
  • CF标志:CF为借位标志;当8位数或16位数相减时,最高位有
  • 借位时,置 CF=1;否则置CF =0 ;
  • 状态标志SF,AF,PF,ZF:根据运算结果设置。
slide63

第二章:微处理器的指令系统

  • (2) 带借位减法指令 SBB
    • 格式:SBB OPD,OPS
    • 执行的操作:(OPD)←(OPD)-(OPS)-CF
    • 功能:从目的操作数中减去源操作数和标志位CF,结果送入目的地
    •    址中;
    • 指令的特征、用法和对标志位的影响和SUB指令相同;
    • 主要用于多字节减法运算中,低位数相减用SUB指令,高位数相减用SBB指令,CF 值为低位相减时产生的借位;
slide64

第二章:微处理器的指令系统

【例2.24】求两个三字节数之差,差存放

在DL、AH、AL中。

A1 DB 105,36,59

A2 DB 120,64,72

… … ……

MOV AL,A1

SUB AL,A2 ;低字节数之差

MOV AH,A1+1

SBB AH,A2+1 ; 中间字节数之差

MOV DL,A1+2

SBB DL,A2+2 ; 高字节数之差

slide65

第二章:微处理器的指令系统

  • (3) 减1指令 DEC
    • 格式:DEC OPD
    • 执行的操作:OPD ← OPD -1
    • 功能:目的操作数减1,结果送回目的地址中;
    • 指令的特征、用法和对标志位的影响和INC指令相同
    • 用于在循环程序中修改地址指针和循环次数。
  • (4) 比较指令 CMP
    • 格式:CMP OPD,OPS
    • 执行的操作:OPD - OPS
    • 功能:两个操作数相减,但结果不回送,结果只影响状态标志位,
    • 根据比较的结果使程序产生分支;
slide66

第二章:微处理器的指令系统

  • 指令的特征、用法和对标志位的影响和SUN指令相同
  • 利用标志位比较两个数之间的关系:
    • 根据ZF标志,判断两者是否相等: ZF=1 , 则两数相等
    • 根据CF标志, 判断两个无符号数的大小;
    • 用SF、OF标志,判断二个带符号数的大小:
    • SFOF=0 , 则 OPD≥OPS
  • SFOF=1 , 则 OPD<OPS

10-5=5 SF=0 OF=0, A>B

不发生溢出时:OF=0-10-(-5)=-5 SF=1 OF=0, A <B

-10-5=-15 SF=1 OF=0, A <B

slide67

第二章:微处理器的指令系统

发生溢出时:OF=1

如A=126,B=-48,则有:

A-B=126-(-48)=174 溢出 01111110

+ 00110000

10101110 SF=1,OF=1 A>B

如A=-48,B=126,则有:

A-B=-48-126=-174 溢出 11010000

+ 10000010

101010010 SF=0,OF=1 A<B

SFOF=0, 则 OPD≥OPS

SFOF=1 , 则 OPD<OPS

slide68

第二章:微处理器的指令系统

  • (5) 求补指令 NEG
    • 格式:NEG OPD
    • 执行的操作: (OPD) 0 -(OPD)
    • 功能:操作数按位求反后末位+1
    • OPD可为8位或16位的操作数,可以是寄存器、存储器 ;
    • 影响标志AF、CF、OF、PF、SF、ZF
  • 当操作数为0时,求补运算的结果使CF=0;其他情况CF均为1;
  • 对―128求补或对―32768求补时使OF=1, 其他情况OF均为0。

例:设BX内容为0006H,DS内容为1800H,存储单元18006H的内容为

47H,执行NEG [BX]。

物理地址 PA=1800X10H+0006=18006H

slide69

第二章:微处理器的指令系统

(18006H)= 47H=0100 0111

求补 1011 1001 = B9H

置标志位SF=1、 ZF=0、 AF=1、 PF=0, OF=0,CF=1;

(6) 非压缩BCD码减法调整指令AAS

格式 :AAS

功能: 对AL中的两个非压缩BCD码数相减的差进行调整;

AAS 必须紧跟在减法指令SUB、SBB后 ;

(7) 压缩BCD码减法调整指令DAS

格式 :DAS

功能: 对AL中的两个压缩BCD码数相减的差进行调整:

DAS 必须紧跟在减法指令SUB、SBB后 ;

slide70

第二章:微处理器的指令系统

  • 加、减法指令的应用:
    • ADD AL,50H
    • ADD DI,SI
    • ADD AX,[DI]
    • INC AL
    • INC AX
    • SUB AX,BX
    • SBB DX,CX
    • DEC CX
    • DEC BYTE PTR[SI]
    • CMP AL,0
    • ;AL+50H→AL
    • ;DI+SI→DI
    • ;AX+([DI+1],[DI])→AX
    • ;AL+1→AL
    • ;AX+1→AX
    • ;AX-BX→AX
    • ;DX-CX-CF→DX
    • ;CX-1→CX
  • ;SI所指示字节单元内容减1送回
  • ;AL和0进行比较,置标志位
slide71

第二章:微处理器的指令系统

  • 3. 乘法指令
  • (1) 无符号数乘法指令MUL
    • 格式:MUL OPS
    • 执行操作:字节乘法操作:AX←AL× OPS
  • 字乘法操作: DX,AX←AX × OPS
    • 功能:实现源操作数无符号数OPS与累加器AL(AX)中的无符号数相乘
    • OPS 可为8位或16位的操作数;可以是寄存器,存储器;
  • 目的操作数和被乘数隐含 ;
    • 影响标志: 乘积高半部分为0 , CF=OF=0
  • 乘积高半部分不为0 , CF=OF=1
  • 其它标志SF、ZF、AF、PF为不定值
slide72

第二章:微处理器的指令系统

【例2.25】 MUL WORD PTR BETA[BX]

MUL DI

例:完成两个无符号数09H与10H相乘

MOV AL,09H ;09H →AL

MOV BL,10H ;10H →BL

MUL BL ;(09H)*(10H) →AX(0090H)

  • (2)带符号数乘法指令 IMUL
    • 格式:IMUL OPS
    • 指令操作、特征、使用和标志位影响均与指令MUL相同,只是乘 数、被乘数和乘积都是带符号数即以补码表示的数 。
  • (3) 非压缩BCD码乘法调整指令 AAM
    • 格式 :AAM
    • 功能: 对AX中的两个非压缩BCD码数相乘的积进行调整;
  • AAM 必须紧跟在乘法指令后
slide73

第二章:微处理器的指令系统

【例2.26】设AL=9CH,BL=12H,分析执行无符号数乘法指令 MUL BL和有符号数乘法指令IMUL BL。

(1) 数据作为无符号数时, 使用MUL指令

AL= 9 CH的十进制数为 156 D

BL= 12 H的十进制数为 18 D

其结果为:AX= AF8 H= 2808 D,CF=OF=1。

(2) 数据作为有符号数时,使用IMUL指令

AL= 9 CH的十进制数为(-100)D

BL= 12 H的十进制数为(18)D

其结果为:AX=(F8F8)H=(-1800)D,CF=OF=1。

slide74

第二章:微处理器的指令系统

  • 4. 除法指令
  • (1) 无符号数除法指令 DIV
    • 格式:DIV OPS。
    • 执行操作:字节除法:AL←AX/(OPS)的商、AH←AX/(OPS)的余数
  • 字操作: AX←(DX,AX)/(OPS)的商
  • DX←(DX,AX)/(OPS)的余数
    • 功能:实现两个无符号数二进制数除法运算,除数为OPS,字节相
  • 除,被除数在AX中;字相除,被除数在DX、AX中;
    • OPS 可为8位或16位的操作数;可以是寄存器、存储器;
  • 目的操作数和被除数隐含 ;
    • 标志位为不定值
slide75

第二章:微处理器的指令系统

例: DIV BL ;(AX)/(BL) 商→AL,余数→AH

DIV CX ;(DX),(AX)/(CX) 商→AX,余数→DX

  • (2) 有符号数除法指令 IDIV
    • 格式:IDIV OPS
    • 功能:实现带符号数的除法;
    • 指令操作、特征、使用和标志位影响均与 指令DIV相同,只是除 数、被除数和商 都是带符号数即以补码表示的数 ;

【例2.27】设AX= 0400 H、CL= A0 H,分析分别作为无符号数和

有符号数参加除法运算。

(1) 无符号数时,采用DIV指令实现除法;

AX= 0400 H = 1024 D,CL= A0 H = 160 D

结果为: 商 AL= 06 H= 06 D

余数AH= 40 H= 64 D

slide76

第二章:微处理器的指令系统

(2) 作为有符号数时,使用IDIV指令。

AX= 0400 H =+1024 D

CL= A0 H=-96 D

其结果为:商AL= 0F6 H= -10 D

余数AH= 40 H= 64 D

在使用除法指令时应注意:

除法指令的字节除法的商为8位,字除法的商为16位。如果字节除法

时,被除数高8位的绝对值大于除数的绝对值;字除法时,被除数高

16位的绝对值大于除数的绝对值,得到的商就会产生溢出。这种溢出

在IBM PC中是由系统直接转入0型中断处理的。

slide77

第二章:微处理器的指令系统

  • (3) 非压缩BCD码除法调整指令 AAD
    • 格式: AAD
    • 功能: 对AX中的两个非压缩BCD码数进行调整;
  • AAD 必须在除法指令之前

5. 符号扩展指令

由于字节除法要求被除数为16位,字除法要求被除数为32位,往往需要用符号扩展的方法来得到所需的被除数格式,为此系统中提供了两条符号扩展指令。这两条指令不影响状态标志。

(1) 字节转换为字指令 CBW

格式:CBW

功能:把AL中的8位带符号数扩展为16位带符号数存于AX中;

执行操作: 如AL的最高位为0,则AH= 00 H;

如AL的最高位为1,则AH= FF H。

slide78

第二章:微处理器的指令系统

(2) 字转换为双字指令CWD

格式:CWD

功能:把AX中的16位带符号数扩展为32位带符号数存于DX、AX中

执行操作: 如 AX的最高位为0,则DX= 0000 H;

如AX的最高位为1,则DX= FFFF H。

  • 【例2.28】 在A、B、C这3个字变量中各存有16位带符号数a、b、c。用程
  • 序实现(a×b+c)/a的运算,并将商存入AX寄存器,余数存入DX寄存器。
  • MOV AX,A ;取操作数A
      • IMUL B ;A×B,乘积为32位
      • MOV BX,AX ;乘积暂存CX:BX
      • MOV CX,DX
      • MOV AX,C ;取操作数C
      • CWD ;符号扩展为32位
      • ADD AX,BX ;32位加法
      • ADC DX,CX
      • IDIV A ;除以A
slide79

第二章:微处理器的指令系统

§ 2.2.3 逻辑运算指令

  • 1. 逻辑与指令AND
  • 格式:AND OPD,OPS
  • 执行操作:OPD ← OPD ∧ OPS
  • 功能:完成源操作数和目的操作数的逻辑与运算,结果送目的单元
    • OPS和OPD可同为8位或16位的操作数;
  • OPS可以是立即数,寄存器,存储器;
  • OPD可为 寄存器,存储器;
    • 标志位的影响
  • 置标志CF=0、OF=0;根据运算结果设置状态标志SF、PF、ZF;
  • 通常用来清除某位(A∧0)或保留某位 (A ∧1);
slide80

第二章:微处理器的指令系统

【例2.29】 AND AX,0FH

执行前:AX=0FBFAH

1111101111111010

0000000000001111

0000000000001010

执行后:AX=000AH

例 若(AL)=56H

取低4位:

取高4位:

AND AL, 00001111B ; 06H→AL

AND AL, 11110000B ; 50H→AL

2. 逻辑或指令OR

格式:OR OPD,OPS

执行操作:OPD ∨ OPS → OPD

功能:完成源操作数和目的操作数的逻辑或运算,结果送目的单元

slide81

第二章:微处理器的指令系统

  • 指令操作、特征、使用和标志位影响均与 指令AND相同;
    • 用或运算实现使一个操作数中的某位保持不变(A∨0=A),
  • 某置位1 (A∨1=1);

【例2.30】 OR AX,00FFH

执行前:AX=0AAAAH

1010101010101010

0000000011111111

1010101011111111

执行后: AX=0AAFFH

例 用OR指令进行代码组合。(BCD→ASCⅡ)

执行前:(AL)= (06)BCD

OR AL,30H ;36H →AL

slide82

第二章:微处理器的指令系统

  • 3. 逻辑非指 NOT
    • 格式:NOT OPD。
    • 执行操作:OPD ← OPD
    • 功能:对操作数按位取反,然后送回原处;
    • OPD可为8位或16位的操作数;可以使寄存器,存储器操作数
    • 本指令不影响标志位。
  • 4. 异或指令 XOR
    • 格式:XOR OPD,OPS
    • 执行操作:OPD ← OPD⊕ OPS
    • 功能:完成源操作数和目的操作数的逻辑异或运算,结果送目的单元
  • 指令操作、特征、使用和标志位影响均与 指令AND相同;
  • 通常用于使某个操作数中的若干位维持不变,若干位取反。
  • A⊕0=A,A⊕1= A,A⊕A=0
slide83

1010101010101010

1111111111111111

0101010101010101

第二章:微处理器的指令系统

【例2.31】 XOR AX,0FFFFH

执行前:AX=0AAAAH

执行后:AX=5555H。

  • 5. 测试指令 TEST
    • 格式:TEST OPD,OPS
    • 执行操作 :(OPD)∧(OPS)
    • 功能:完成源操作数和目的操作数的逻辑与运算,根据运算结果置标志位SF、ZF、PF
  • 指令操作、特征、使用和标志位影响均与指令AND相同;
  • 通常用来检测某数的某位为1,还是为0;
slide84

第二章:微处理器的指令系统

例: 测试 DATA单元数据的最高位是1还是0

MOV AL , DATA

TEST   AL , 10000000B

JNZ PROC1 ; 最高位为1转PROC1

  • 小结:
    • 逻辑运算指令可以对字节或字进行逻辑运算操作。逻辑运算是按位操作的,逻辑操作结果见表:
  • 逻辑运算指令可以对特定的位进行操作,利用逻辑运算指令可以完成屏蔽、置位以及测试等操作。
slide85

助记符操作数

举 例

注 释

NOT寄存器

存储器

NOT AX

NOT [DI]

(AX)取反→AX

AND 寄存器,寄存器

寄存器,存储器

存储器,寄存器

寄存器,立即数

存储器,立即数

AND AL,BL

AND CX,DATA

AND [DI],AL

AND CL,0FH

AND DATA,01H

(AL)∧(BL) →AL

((DI)) ∧(AL) →(DI)

(CL) ∧0FH →CL

TEST 寄存器,寄存器

寄存器,存储器

寄存器,立即数

存储器,立即数

TEST SI,DI

TEST SI,DATA

TEST BX,8000H

TEST [DI],01H

(SI) ∧(DI)

(BX) ∧8000H

逻辑运算指令表

slide86

OR寄存器,寄存器  

寄存器,存储器

存储器,寄存器

寄存器,立即数

存储器,立即数

OR AL,CL

OR CX,DATA[DI]

OR DATA,CL

OR CX,00FFH

OR [BX],0FH

(AL)∨(CL)→AL

(CX) ∨00FFH →CX

XOR寄存器,寄存器

寄存器,存储器

存储器,寄存器

寄存器,立即数

存储器,立即数

XOR CX,BX

XOR BL,[DI]

XOR [DI],AL

XOR SI,00CCH

XOR CODE,0D2H

(CX) (BX) →CX

(SI) 00CCH →SI

第二章:微处理器的指令系统

slide87

第二章:微处理器的指令系统

  • §2.2.4移位指令
    • 算术移位、逻辑移位、循环移位操作和左移、右移等指令。
    • 格式:OP OPD, COUNT
    • 其中:
      • COUNT表示移位次数。次数为1,则COUNT可为立即数1,次数为2次以上,COUNT为寄存器CL;
      • OPD为8位或16位的操作数;可以是寄存器、存储器;
    • 算术逻辑移位指令影响SF、ZF、PF,CF、OF 状态标志;
    • 循环移位指令只影响CF、OF状态标志; AF均无定义;
slide88

第二章:微处理器的指令系统

  • 逻辑左移指令SHL与算术左移指令SAL
    • 格式:SHL OPD,COUNT
  • SAL OPD,COUNT
    • 功能:将 OPD 向左移动指定的位数,而最低位补入相应个数
    • 的0。两条指令的功能和操作一样。
  • 执行操作: 可用下图表示:
  • 对状态标志位的影响:
    • 根据结果置标志: SF、ZF、PF;
    • CF=从目标操作数移出的最后一位;
    • 当执行多次移位指令后,OF不定,当执行一次移位指令后 ,若最高位与CF不等,则OF = 1;
slide89

第二章:微处理器的指令系统

  • 左移一位,操作数×2,左移n位,操作数×2n,使用时要注意是否发生溢出。

例:SHL AH,1

SAL SI, CL

SAL WORD PTR [BX+5] ,1

SHL BYTE PTR [BX], CL

【例2.32】 设DI=00FFH,写出计算DI×4→DI 的指令序列

执行指令:MOV CL,2

SAL DI,CL

执行后: DI=03FCH

slide90

第二章:微处理器的指令系统

  • 2. 算术右移指令SAR
    • 格式:SAR OPD,COUNT
    • 功能:将 OPD 向右移动指定的位数,最高位右移后 ,同时再用它自身的值填入最高位。

执行操作: 可用图表示:

  • 状态标志的影响同SHL、SAL指令
  • 实现右移n位,带符号数÷ 2n的功能;

例:MOV DL,0F4H ; DL:11110100 真值= -0001100B= -12

MOV CL,2

SAR  DL,CL ; DL: 11111101 真值= -0000011B= -3

slide91

第二章:微处理器的指令系统

  • 3. 逻辑右移指令SHR
    • 格式:SHR OPD,COUNT
    • 功能:将OPD向右移动指定的位数,最高位补以相应个数的0;
  • 执行操作:可用图表示:
  • 状态标志的影响同SHL、SAL指令
  • 实现右移n位,无符号数÷ 2n的功能;

【例2.33】 若 DS=F800H,VALUE=1800H,(F9800H)=0008H。

执行指令序列:MOV CL,2

SHR VALUE,CL

执行后:(F980A)=0002H,CF=0,相当于(VALUE)除以4。

slide92

第二章:微处理器的指令系统

  • 4. 循环左移指令ROL
    • 格式:ROL OPD,COUNT
    • 功能:称为小循环左移,将目的操作数的最高位与最低位连接起来,组成一个环,将环中所有位一起向左移动由COUNT指定的次数。
  • 状态标志的影响:
    • 不影响 SF、ZF、PF、AF;
    • CF=从目标操作数移出的最后一位;执行多次移位指令后,OF不定。
    • 当执行一次移位指令后,若最高位与CF不等,则OF = 1;
  • 用来改变操作数中所有位的位置;
slide93

第二章:微处理器的指令系统

  • 5. 循环右移指令 ROR
    • 格式:ROR OPD,COUNT
    • 功能:称为小循环右移,将目的操作数的最高位与最低位连接起来组成一个环,将环中所有位一起向右移动由COUNT指定的次数。
  • 执行操作: 用图表示:
  • 状态标志的影响同 ROL指令;
  • 用来改变操作数中所有位的位置;
slide94

第二章:微处理器的指令系统

  • 6.带进位循环左移 RCL
    • 格式:RCL OPD,COUNT
    • 功能:称为大循环左移,将目的操作数连同CF标志位与最低位连 接起来,组成一个环,将环中所有位一起向左移动由COUNT指定的次数;
  • 执行操作:如图所示:
  • 状态标志的影响同 ROL指令;
  • 用来改变操作数中所有位的位置;
slide95

第二章:微处理器的指令系统

  • 7.带进位循环右移指令 RCR
    • 格式:RCR OPD,COUNT
    • 功能:称为大循环右移,将目的操作数连同CF标志位与最低位连接起来,组成一个环,将环中所有位一起向右移动由COUNT指定的次数;
  • 执行操作:如图所示:
  • 状态标志的影响同ROL指令;
  • 用来改变操作数中所有位的位置;
slide96

AX

BX

12 00

12 34

00 12

00 34

执行前:

第二章:微处理器的指令系统

【例2.34】 如AX=0012H、BX=0034H,要求执行程序将它们装配在一起形成AX=1234H。

编程如下:

MOV CL,8

ROL AX,CL

ADD AX,BX

例: 将DX、AX组合32位操作数扩大一倍。

  • 程序:
    • SHL AX , 1
    • RCL DX , 1
slide98

第二章:微处理器的指令系统

§ 2.2.5 转移指令

程序在运行的过程中是按照段寄存器CS和程序计数器IP所指定的地址来取指令并运行的。程序转移指令是用来改变这两个寄存器的内容,从而改变程序的执行顺序。8088/8086提供了5种转移指令:无条件转移指令、条件转移指令、重复控制指令、子程序调用指令和中断指令 。

slide99

第二章:微处理器的指令系统

1. 无条件转移指令 JMP

无条件转移指令无条件地将转移到指令中规定的内存目的地,执行指令会改变IP寄存器或CS寄存器的内容,但该指令不影响标志位的值。

格式:JMP 目标地址功能:转移到目标地址对应的指令处执行;

无条件转移指令有五种格式:

  • 段内直接短转移
  • 段内直接近转移
  • 段内间接转移
  • 段间直接远转移
  • 段间间接转移
slide100

内存

...

OP

源程序 :

条件转移指令:JMP SHORT

next

(IP)

50H

D

=50H

=1050H-1000H

当前

8

...

...

...

3000:1000H

...

...

next:

MOV AL,03H

OP

3000:1050H

03H

...

(IP)=(IP)当前+D8

第二章:微处理器的指令系统

  • (1) 段内直接短转移
    • 格式:JMP SHORT OPD
    • 其中:OPD— 在汇编语言中为符号地址,在机器语言中存放位移
    • 量 D8,D8的范围在(-128 ~ 127)之间。
  • SHORT为短属性标号行
    • 执行的操作: (IP) ←(IP)+8位位移量D8。

例: JMP SHORT NEXT 指令执行过程:

slide101

第二章:微处理器的指令系统

(2) 段内直接近转移

格式:JMP NEAR PTR OPD

其中: OPD—在汇编语言中为符号地址,在机器语言中存放

位移量D16,为16位补码,范围-32768~+32767H。

NEAR为近属性标号。

执行的操作:(IP) ←(IP)+16位位移量D16

这两条指令也可以直接写成:JMP OPD,用户不需要考虑是短转移还是近转移,汇编程序在汇编时,会计算出JMP下一条指令与目标地址间的相对偏移量,若该偏移量在±127B之内时,产生一个短转移,否则,产生一个在±32KB范围内的近转移。

slide102

第二章:微处理器的指令系统

(3) 段内间接转移

    • 格式:JMP WORD PTR OPD
  • OPD —为16位寄存器、存储器;
  • 执行操作:IP (EA)或 IP  reg16

例: JMP CX

JMP WORD PTR [DI]

【例2.35】 JMP [BX]。

执行前:BX=2010H

DS=2000H

(22010H)=0FA34H。

执行后:IP=OFA34H

slide103

第二章:微处理器的指令系统

  • (4) 段间直接(远)转移
    • 格式:JMP FAR PTR OPD
    • 其中: OPD— 在汇编语言中为符号地址;
  • FAR为远属性标号;
    • 执行的操作:IP←OPD的段内偏移地址。
    • CS←OPD所在段的段地址。
  • 标号与控制转移指令不在同一段中,可以实现从一个段到另一个段的转移操作。
slide104

第二章:微处理器的指令系统

  • (5) 段间间接转移
    • 格式:JMP  DWORD PTR OPD
    • 其中:OPD —为存储器
    • 执行的操作:IP←(EA),CS←(EA+2)
    • 转移的段地址和偏移地址存放在内存中4个相邻的字节单元中,指 令只能用存储器寻址方式取得段地址和偏移地址的值,修改CS寄存器和IP寄存器的内容。

【例2.36】 JMP DWORD PTR BUF[BX]

执行前:DS=3000H,BX=0020H,BUF=0100H

(30120H)=1234H,(30122H)=5678H

物理地址:PA=30000H+0100H+0020H=30120H

执行指令时,IP (30120H) ;CS (30122H)

执行后:IP=1234H, CS=5678H,

slide105

建立转移条件

Y

条件满足

N

转分支

继续

第二章:微处理器的指令系统

  • 2. 条件转移指令
    • 条件转移指令是根据标志寄存器(FR)的状态是否满足指定的条件而发生转移。
    • 执行指令只改变IP寄存器内容,且转移目标范围在(-128~+127)。
    • 该指令不影响标志位的值
    • 格式:Jcc目标地址
    • 功能:当条件成立时,实现程序的转移
slide106

第二章:微处理器的指令系统

  • 按转移条件不同,条件转移指令可以分为三大类:
    • 以单个状态标志作为转移条件;
    • 以两个无符号数比较的结果为转移条件;
    • 以两个带符号数比较的结果为转移条件

根据标志位CF、ZF、SF、PF、OF的状态,作为转移条件。

(1) 根据单个标志位的条件转移指令

slide108

第二章:微处理器的指令系统

(2)比较两个无符号数,并根据比较的结果转移

两个无符号数A、B,作减法A-B ,根据无符号数A、B的大小、

相等情况产生分支 ;

slide109

第二章:微处理器的指令系统

(3) 比较两个带符号数,并根据比较的结果转移

两个带符号数A、B,作减法A-B ,根据带号数A、B的大小、相

等情况产生分支 ;

slide110

第二章:微处理器的指令系统

(4)条件转移指令应用

例:比较二个数是否相等,如相等做动作1,否则做动作2。

……

CMP AX,BX

JE action_1

Action_2: ……

……

action_1:……

slide111

第二章:微处理器的指令系统

例:带符号数 X,Y, 若X > 50,则 转too_high;否则执行X-Y ,如溢出转overflow,不溢出将结果存result。

MOV AX,X

CMP AX,50

JG too_high ;大于转too_high

SUB AX,Y

JO overflow ;溢出转overflow

MOV result ,AX ;不溢将数据存存储单元

too_high: ……

overflow: ……

slide112

第二章:微处理器的指令系统

3. 重复控制指令

    • 使用CX寄存器作计数器作为控制条件实现转移;
    • 执行指 令只改变IP寄存器内容,且转移目标 范围在(-128~+127)
    • 该指令不影响标志位的值;
    • 循环控制指令用于使一些程序段反复执行形成循环程序;
  • 重复控制指令有四种:
  • (1)循环指令 LOOP
    • 格式:LOOP OPD
  • OPD 为目标地址,一般以符号地址表示。
    • 执行操作: CX ← CX - 1
  • (CX)≠0,转目标地址;CX=0,执行下一条指令;
slide113

第二章:微处理器的指令系统

  • 执行指令前应将循环次数初值置CX寄存器中
  • 该指令等效于指令:DEC CX
  • JNZ OPD
  • 使用形式: MOV CX,N
  • BEGIN: ┊
  • LOOP BEGIN

循环体

(2)当结果为零或相等循环指令LOOPZ/LOOPE

(3)当结果不为零或不相等循环指令LOOPNZ/LOOPNE

(4)测试CX的值为零转移指令JCXZ

slide115

第二章:微处理器的指令系统

  • 4. 子程序调用指令
    • 子程序概念
    • 如果有一些程序段在不同地方反复出现,可以将这些程序段设计成为过程(子程序)供调用。过程结束,返回调用处。过程在程序中为具有独立功能的独立程序模块。
    • 子程序(过程)定义格式:
  • 符号名PROC 类型
  • ……
  • 符号名ENDP
    • 子程序调用指令包括:过程调用指令 CALL 和返回指令RET
slide116

第二章:微处理器的指令系统

  • (1)子程序调用指令 CALL
    • 格式:CALL OPD
  • 功能:把返回点(即CALL指令的下一条指令地址)压入堆栈保护后,转向目标地址处执行子程序
  • 不影响标志位
  • CALL指令有四种形式:
  • 段内直接调用
  • 段内间接调用
  • 段间直接调用
  • 段间间接调用
slide117

第二章:微处理器的指令系统

  • ①段内直接调用
  • 格式:CALL NEAR OPD
  • 执行操作:SP SP-1,SP IPH;SP SP-1,SP IPL;
  • IP 子程序入口地址;
  • OPD为NEAR属性的子程序名,表示范围在-32768~+32767之间的子程序入口地址;
  • ② 段间直接调用
    • 格式:CALL FAR PTR OPD
    • 执行操作:SP SP-1,SP IPH;SP SP-1,SP IPL
    • SP CS
    • IP  子程序入口偏移地址CS  子程序入口段基地址
    • OPD为FAR属性的子程序名,可位于任何存储区域;
slide118

第二章:微处理器的指令系统

  • ③ 段内间接调用。
    • 格式:CALL WORD PTR OPD
    • 执行操作:SP SP-1,SP IPH;SP SP-1,SP IPL;
  • IP 由寄存器或存储器内容表示的子程序入口地址
    • OPR 为16位寄存器或单字存储单元
  • ④ 段间间接调用
    • 格式:CALL DWORD PTR OPD
    • 执行操作:SP SP-1,SP IPH;SP SP-1,SP IPL;
    • SP CS
  • IP 由第1个字存储单元内容表示的子程序入口偏移
  • 地址
  • CS 由第2个字存储单元内容表示的子程序入口段基
  • 地址
slide119

第二章:微处理器的指令系统

例:…

CALL subp ; YYY入栈

YYY:…

subp PROC NEAR ;过程定义

RET ;返回

slide120

第二章:微处理器的指令系统

  • (2) 返回指令 RET
    • 格式:RET
    • 功能:过程执行完后,返回调用程序的断点处继续执行原程序
    • 执行操作:
    • 若为段内调用返回指令,从堆栈取出返回点的偏移量给IP,实现调用返回;
    • 若为段间调用返回指令,从堆栈取出返回点的偏移量给IP,还取出返回点的段基地址给CS ,实现调用返回;
    • 指令不影响标志位
    • 指令应放在子程序的末尾
slide121

第二章:微处理器的指令系统

5.中断指令

当系统运行或程序运行期间遇到某些特殊情况,需要计算机自动执行一组专门的例行程序来进行处理。执行的这组例行程序称为中断子程序。

  • (1) 中断指令 INT
    • 格式:INT n 或:INT
  • n为类型码,是 0—255的常数或表达式,
    • 功能:该指令将产生一个软件中断,把控制转向一个类型号为n的
    • 软中断。
  • 执行的操作:
    • 把标志寄存器的内容压栈 SP←SP-2 ,(SP+1,SP) ← FR;
    • 清中断标志位和陷阱标志位 IF←0,TF←0;
slide122

第二章:微处理器的指令系统

  • 将现行程序的CS和IP的内容压栈:
  • SP←SP-2,(SP+1,SP)←CS
  • SP←SP-2,(SP+1,SP)←(IP)
  • (2)溢出中断指令 INTO
    • 格式:INTO
    • 功能:该指令检测OF标志位,当OF=1时,将立即产生一个中断类型为4的中断,执行中断服务程序,当OF=0,则执行INTO的下一条指令。
  • 执行操作:当 OF=1则执行:
      • 把FR内容压栈
      • TF标志、IF标志清0
      • 断点地址CS和IP内容压栈
      • 中断服务程序入口段基地址和偏移地址字送入CS和IP
slide123

第二章:微处理器的指令系统

  • (3)中断返回指令 IRET
    • 格式:IRET
    • 功能:用于中断处理程序,以返回被中断的程序断点处继续执行
    • 执行操作:从堆栈中取出被中断的程序的代码段地址、偏移地址
  • 和标志状态分别送入CS、IP和标志寄存器FR;

◆ 任何一个中断服务程序的末尾部必须安排一条IRET指令;

slide124

第二章:微处理器的指令系统

§ 2.2.6 处理器控制指令

  • 该类指令专门用于处理器的控制,指令格式中均不带操作数。
  • 除了设置和清除标志的指令,只影响指定的标志,其它指令均不影响标志位

1. 标志操作指令

主要用于设置或清除标志位:CF、DF、IF。

slide125

指令格式

执行操作

作用

CLC

CF=0

对CF的操作 使进位标志CF置为0

STC

CF=1

对CF的操作 使进位标志CF置为1

CMC

CF CF

对CF的操作 使进位标志CF取反

DF=0

CLD

对DF的操作 串操作指令指针SI和DI自动增量

STD

DF=1

对DF的操作 串操作指令指针SI和DI自动减量

CLI

IF=0

对IF的操作 禁止CPU响应可屏蔽中断INTR

STI

IF=1

对IF的操作 允许CPU响应可屏蔽中断INTR

第二章:微处理器的指令系统

slide126

第二章:微处理器的指令系统

2. 其他处理器控制指令

(1) 空操作指令 NOP

格式:NOP

功能: 不执行任何操作(即CPU完成一次空操作),延迟3个时钟

周期后,继续执行下条指令。

作用:◇ 其机器码占一个字节单元, 在调试程序时,修改程序用;

◇ 常被用于软件延时程序中,作短暂延时用 。

(2) 停机指令 HLT

格式:HLT

功能:使CPU处于暂停状态

作用:用于等待外部中断,中断处理结束后,继续执行HLT后的

下一条指令。

slide127

第二章:微处理器的指令系统

  • 脱离暂停状态的条件 :
    • RESET线上有复位信号;
    • 在NMI线上有中断请求;
    • 在开放中断情况下(IF=1),在INTR线上有中断请求;
  • 本指令使处理器暂停工作,等待一次外部中断,中断处理结束后继续执行后续指令。该指令只有RESET(复位)、NMI(非屏蔽中断请求)、INTR(中断请求)信号可以使其退出暂停状态。
  • (3) 等待指令WAIT (5) 封锁指令 LOCK
  • 格式:WAIT 格式:LOCK 指令
  • (4) 换码指令 ESCLOCK是指令前缀,它与其他指令配合
  • 格式: ESC MEM
slide128

第二章:微处理器的指令系统

§ 2.2.7 字符串操作指令

串——地址连续的字节或字存储单元,通常用于存放同一类数据。

数据源:源串;数据结果:目的串。

串操作—— 对串中的每一项都执行的操作。如:串传送、查找、比

较等。

串操作指令——对串元素实现传送、比较、检索、装入、存储等操

作,并自动修改地址指针。可以处理的数据串长度最

多为64K字节。

slide129

第二章:微处理器的指令系统

  • 基本串操作指令有五条:
  • 1、 MOVS(Move string) 串传送指令
  • 2、CMPS(Compare string) 串比较指令
  • 3、SCAS(Scan string) 串扫描指令
  • 4、LODS(Load from string) 从串取指令
  • 5、STOS (Store in to string) 存入串指令
  • 源操作数用SI寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段。
  • 目标操作数用DI寻址,隐含ES为段地址;
slide130

第二章:微处理器的指令系统

  • 用CX存待处理的串元素个数。每处理一个串元素,自动使 CX-1;
  • 自动修改串指针:
  • 方向标志DF决定指针的修改方向——DF=0,指针加;DF =1,指针减。
    • 与上述指令基本配合使用前缀有:
  • REP:重复。
  • REPE/REPZ: 相等/为零则重复。
  • REPNE/REPNZ:不相等/不为零则重复