第三章 80868088的指令系统
第3章 80868088的指令系统
3.1 寻 址 方 式
例如: ADD AX,BX 其中AX是目的操作数,BX是源操作数,执行前, AX存放被加数,BX存放加数,执行后,AX和BX相 加的结果存放在AX中。 从书写形式来看,8088/8086系统中的操作数 可以分为三种类型:立即数操作数、寄存器操作 数和存储器操作数。
课件制作人:刘永华
3.1 寻 址 方 式
1. 立即数操作数 立即数是作为指令代码的一部分出现在指令 中。它通常作为源操作数使用。其书写形式可 以为二进制、八进制、十进制和十六进制数, 也可以是一个可求出确定值的表达式。 2. 寄存器操作数 寄存器操作数是把操作数存放在寄存器中, 用来参加运算或存放结果。在双操作数指令中, 它可以作为源操作数和目的操作数。其书写形式 就是寄存器的名称。
课件制作人:刘永华
3.1 寻 址 方 式
3.1.2 寻址方式 寻址方式共有7种: 1. 寄存器寻址 寄存器寻址方式中,指令所需要的操作数存 放在指令指明的寄存器中。对16位操作数, 寄存器可以是AX、BX、CX、DX、SI、DI、SP、 CS、DS、ES、SS和BP;对8位操作数,寄存器 可以是AL、AH、BL、BH、CL、CH、DL和DH。 这种寻址方式速度较快,对于那些需要经常 存取的操作数,采用寄存器寻址方式较为合 适。
课件制作人:刘永华
图3.3 MOV AX,BX
3.1 寻 址 方 式
2. 寄存器间接寻址 寄存器间接寻址方式中,操作数的偏移地址EA在指 令指明的寄存器中,即寄存器的内容为操作数的偏 移地址EA,而操作数存放在存储器中。 能够用来间接寻址的寄存器只能是寄存器SI、DI、 BP、BX其中之一。若指令中指定的寄存器是BX、DI 或SI,则操作数在当前数据段中,所以操作数的物 理地址PA的形成是由数据段寄存器DS的内容左移4位, 加上BX、DI或SI中的偏移地址EA。若指令中指定的 寄存器是BP,则操作数在当前堆栈段中,所以操作 数的物理地址PA的形成是堆栈段寄存器SS的内容左 移4位,加上BP中的偏移地址EA形成操作数的物理地 址PA,如图3.4所示。
第三章 80868088的指令系统2
六、处理器控制指令
1.标志操作指令 用来设置标志位的状态。 (1)CF设置指令
CLC STC CMC CLD STD CLI STI 0→CF 1→CF CF变反 0→DF (串操作的指针移动方向从低到高) 1→DF (串操作的指针移动方向从高到低) 0→IF (禁止INTR中断) 1→IF (开放INTR中断)
重复前缀(p128) 重复前缀(p128) (p128 串操作指令前面可加上重复前缀。 串操作指令前面可加上重复前缀。当使用 重复前缀 重复前缀时, 指令重复执行, 重复前缀时,MOVS 指令重复执行,重复执 行次数由CX决定 并且每执行一次 决定。 每执行一次, 就 行次数由 决定。并且每执行一次,CX就 自动减1,直到减为0,然后退出重复执行。 自动减 ,直到减为 ,然后退出重复执行。 重复前缀包括: 重复前缀
部分常用的 8086 指令
指令类型 数 据 传 送 算 术 运 算 逻辑 移位 地址传送 LEA 输入输出 IN,OUT 加法 减法 乘/除法 移位 串操作 控制转移
28原则 28原则
助记符 ;标志传送PUSHF/POPF
数据传送 MOV,XCHG; 堆栈PUSH/POP
ADD,ADC,INC,DAA SUB,SBB,DEC,CMP MUL,DIV SHL/SHR/SAR,ROL/ROR,RCL/RCR MOVSB JMP,JXX,LOOP,CALL/RET,INT/IRET
① 根据单个标志位设置的条件转移指令
含 义 等于/ 结果为0 不等于/ 结果不为0 有进位/ 有借位 无进位/ 无借位 溢出 不溢出 有偶数个“1” 有奇数个“1” 符号位为 1 符号位为 0 指 令 JE / JZ JNE / JNZ JC JNC JO JNO JP / JPE JNP / JPO JS JNS 转移条件 ZF=1 ZF=0 CF=1 CF=0 OF=1 OF=0 PF=1 PF=0 SF=1 SF=0
第3章 8086 8088指令系统
字节2
6 5 4 3 2 1 0 7· · · 0 7· · · · ·0 7· · · · · 0 7· · · · · 0 DISPH DATAL DATAH
OP code
D w MOD REG R/M DISPL
操作码字节 寻址方式字节 位移量 立即数 •OP code为操作码,表示该指令要完成的操作。 为操作码, OP code为操作码 表示该指令要完成的操作。 •D=0:第一个操作数是目的操作数, 1:第二个操作数是目的操作数 D=0: 是目的操作数, 第二个操作数是目的操作数 D=0 第一个操作数是目的操作数 •W=0:8位操作数, 1:16位操作数 W=0: 位操作数, 16位操作数 W=0 •MOD指明寻址方式: MOD=11 寄存器寻址 MOD指明寻址方式 MOD指明寻址方式: MOD= MOD≠11存储器寻址 MOD≠11存储器寻址 00没有偏移量 1016 16位偏移量 00没有偏移量 01 8位偏移量 1016位偏移量 •REG用编码方式指明操作中所使用的寄存器。 REG用编码方式指明操作中所使用的寄存器 REG用编码方式指明操作中所使用的寄存器。 •R/M用编码方式指出存储器有效地址计算方法。 R/M用编码方式指出存储器有效地址计算方法 R/M用编码方式指出存储器有效地址计算方法。 •DISP表示地址偏移量。DATA则指明立即数。 DISP表示地址偏移量 则指明立即数。 DISP表示地址偏移量。DATA则指明立即数
DATA
操作码 00 02
DS : 80000 BX: 1000 DI: + 2000 DATA: + 0200 83200H
AX 30 40
码 段
40 30
83200 83201
数 据 段
03第三章 Intel 80868088 CPU的指令系统02
设(AX)=1020H,执行示意图
低地址
存储区
低地址
存储区
(SS段)
(SS段)
(SP)-2 (SP)-1 (SP) (SP)
20
10
(AL) (AH)
进栈方向
高地址
执行前
(AX)=1020
高地址
执行后
PUSH AX指令执行示意图
注意进栈方向是高地址向低地址发展。
压栈指令的格式为: PUSH reg PUSH mem/reg PUSH segreg 例如: PUSH AX PUSH [BX] PUSH DS
OF DF IF TF SF ZF
AF
PF
CF
SAHF指令的功能
(3)把标志寄存器推入栈顶指令PUSHF
执行的操作:(SP)-1←标志寄存器高8位 (SP)-2←标志寄存器低8位 (SP)←(SP)-2 (4)从栈顶弹出标志寄存器指令POPF 执行的操作:标志寄存器低8位←(SP) 标志寄存器高8位←(SP)+1 (SP)←(SP)+2 PUSHF和POPF指令用于保护和恢复标志寄 存器内容。
存储器
42000H+0
30 31 32
39 41
...
‘0’ ‘1’ ‘2’
‘9’ ‘A’ ‘B’ ‘E’ ‘F’ 十六进制数ASCII码表
42000H+0BH
42 45 46
... ...
则可用如下几条指令实现:
MOV BX,2000H ;(BX)←表首地址 MOV AL,0BH ;(AL)←序号 XALT ; 查表转换
上程序段存放在代码段中,設(CS)=109EH, 则各条指令存放地址如下:
CS : 109E : 109E : 109E : 109E : 109E : 109E : 109E : 109E : 109E : IP 0100 0103 0106 0108 010A 010B 010C 010E 0110 指令 MOV DI,1000H MOV CX,64H MOV AL,2AH MOV [DI],AL INC DI DEC CX JNZ 0108 HLT
第3章+80868088的寻址方式和指令系统
指令 寄存器号 位移量
寄存器 基或变地址
段寄存器 段基址
EA
物理地址
存储器 操作数
图3.9 寄存器相对寻址方式
5.寄存器相对寻址(续)
说明:
若选择BX或SI或DI寄存器提供的基地址或变地址,则操作 数一般在数据段区域中,用DS提供段基址,即操作数物理地址 为: 物理地址PA=16×(DS)+ EA=16×(DS)+位移量+(BX) 或(SI)或(DI)
定义:操作数的有效地址是一个基址寄存器和一个变 址寄存器的内容之和,基址寄存器名和变址寄存器名均 由指令指定。寻址方式如图3.11所示:
指令
变化寄存器 段寄存器
基址寄存器变址寄存器
变基址 段基址
存储器
EA
物理地址 操作数
基址寄存器
基地址
图3.11 基址变址寻址
6.基址变址寻址(续)
说明:
若选择BX寄存器提供基地址,SI或DI寄存器提供变地址,
§3.1.1 与数据有关的寻址方式(续)
3.段间直接寻址
定义:指令中直接提供转向段基址和偏移地址,从而实现从一段转移 到另一段的操作。寻址方式如图3.18所示:
指令 转向偏移量 转向段基址
IP寄存器
CS寄存器
图3.18 段间直接寻址
3.段间直接寻址(续)
说明:
用指令中指定的偏移地址→IP,用指令中指定的段地址→CS 指令的汇编语言格式: JMP FAR PTR LLL
必须是一个基址寄存器和一个变址寄存器的组合; 寄存器相对寻址方式允许使用段跨越前缀,适用于数组、字符串、 表格的处理。
§3.1.1 与数据有关的寻址方式(续)
7.相对基址变址寻址
第3章 80868088的指令系统(通用数据传送指令)
SP
0012H
0AH 45H 6CH 32H XX
3000DH 堆 3000EH 栈 3000FH 段 30010H 30011H 30012H
通用数据传送指令
PUSH 和 POP指令 • 用途 • 堆栈常有两个用途:暂存和传送。 暂存:
通用数据传送指令
MOV 指令 • 基本格式和功能
指令格式:
MOV
执行的操作:
dest,src
其中 dest 表示目的操作数,src表示源操作数
(dest)(src)
通用数据传送指令
MOV 指令 • 数据传送通道
立即数 存 储 器 通用寄存器 AX BP BX CX DX SP SI DI
LEA指令 • 例子
•
例:如BX=00CDH,SI=00A6H,存储单元的内 容为78ABH,则指令
MOV
AX,[BX][SI]
执行后,AX=78ABH;而
LEA
AX,[BX][SI]
执行后,AX=00CDH+00A6H=0173H。
LEA指令和OFFSET操作符!!
•
相同点: 例如: • LEA BX,ARRAY • MOV BX,OFFSET ARRAY 在功能上都是取符号地址的值并放在BX寄存器中 不同点: 例如: • LEA BX,ARRAY[BX][SI] • MOV BX,OFFSET ARRAY[BX][SI](× ) OFFSET只能与简单的符号地址相连,而LEA指令既能取简单
LEA指令 • 基本格式和功能
• •
寻址方式:
第3章 8086 8088指令系统
如: MOV AX,[BX] [DI]或写成MOV AX,[BX+DI] 设(DS)=2000H,(BX)=0256H,(DI)=6694H,则 PA=(DS)×16+(BX)+(DI)=268EAH 指令执行后,将把268EAH和268EBH两单元的内容送 到AX中,即(AH)=3BH,(AL)=20H 由于基址寄存器和变址寄存器的内容都是可以修改, 因此,在处理二维数组和表格时用这种寻址方式较 为方便。
29
3)不能用CS作目的操作数,即CS寄存器的内容不得 随意改变,CS和IP的值一般只能在转移指令时改变 4)不在段寄存器间直接传送数据 5)不允许用立即数作目的操作数dst 6)不允许直接向段寄存器传送立即数,如果需要, 则应通过通用寄存器或存储单元传送。
30
2、堆栈操作指令PUSH,POP
3.1.2 寻址方式
包括:操作数的寻址方式和指令的寻址方式。 指令通常顺序存放,因此,指令寻址只要通过对指 令指针IP内容自动加1,便可形成下一条指令地址。 当遇到转移或调用指令时,按照转移目标修改IP或 CS,因此,指令的寻址主要是转移指令和调用指令 的转移目的地址的形成方式,这里先讨论操作数的 寻址方式
②通用寄存器和段寄存器间传送
MOV MOV
③通用寄存器和存储单元间传送
MOV MOV
AL,[BX] ;AL ←(BX) [1400H],BX; (1400H)←BX
27
④段寄存器和存储单元之间的传送
MOV
DS,[3000H] ;将3000H和3001H两字节单元的 内容送到DS MOV [BX+SI],CS ;CS的内容送到BX+SI和BX+SI+1 所指的两个字节存储单元
第三章 80888086的指令系统
MOV AX, BX MOV AL, BH 位操作数, 对16位操作数,寄存器可以是 、BX、CX、DX、SI、 位操作数 寄存器可以是AX、 、 、 、 、 DI、SP、BP等 、 、 等 位操作数, 对8位操作数,寄存器可以是 AH、AL、BH、BL、CH、 位操作数 、 、 、 、 、 CL、DH、DL 、 、 错误例: 错误例: × MOV AX, BL × MOV ES:AX, DX ;字长不同 字长不同 ;寄存器与段无关 寄存器与段无关
3.1 8088/8086的寻址方式 的寻址方式
寻址方式有: 寻址方式有: 1、立即寻址 、
操作数直接放在指令中。 操作数直接放在指令中。不 需要访问存储器。 需要访问存储器。 例: MOV AL,34H , MOV AX,1234H , • 主要用于给寄存器赋初值,但不能给段寄 主要用于给寄存器赋初值 但不能给段寄 存器赋值 • 只能用于 只能用于SRC(源操作数)字段,不能 (源操作数)字段, 作目的操作数 • SRC 和 DST(目的操作数)的字长一致 (目的操作数)
3.1 8088/8086的寻址方式 的寻址方式
• 根据指令内容确定操作数地址的过程,称为寻址。 根据指令内容确定操作数地址的过程,称为寻址 寻址。 • 根据寻址计算所得到的操作数地址叫做操作数的有 根据寻址计算所得到的操作数地址叫做操作数的有 效地址(EA),也就是段内偏移地址。有效地址还需 效地址 ,也就是段内偏移地址。 要与相应的段基地址组合才是20位的物理地址(PA) , 位的物理地址 要与相应的段基地址组合才是 位的物理地址 该工作由CPU完成。 完成。 该工作由 完成 • 操作数的来源:(1)直接包含在指令中; 操作数的来源:( )直接包含在指令中; :( 的某寄存器中; (2)在CPU的某寄存器中; ) 的某寄存器中 (3)在内存中。 )在内存中。
第3章 指令系统
除INC和DEC指令不影响CF标志外,算术运 算指令对6个状态标志位都有相应的影响。 ① CF = 1 :无符号数运算产生溢出 ② OF = 1 :有符号数运算产生溢出 ③ ZF = 1 :两数运算结果为0 ④ SF = 1 :两个有符号数运算结果为负 ⑤ AF = 1 :两个BCD数运算半字节有进位 ⑥ PF = 1 :两数运算结果有偶数个1
第3章 8086/8088的指令系统
3.1 8086/8088的指令格式与寻址方式 3.2 8086/8088指令简介
3.1 8086/8088的指令格式与寻址方式 一、8086/8088指令的基本格式 机器指令 操作码[操作数](指令长度为1~6B,其中 操作码1~2B) 如:B83412h(其功能是将数据1234h赋 值给AX寄存器)
MOV 指令的源操作数和目的操作数 ①r ↔ r ②r ↔ seg ③r ↔ m ④r ← imm ⑤seg ↔ m ⑥m ← imm
二、算术运算类指令
①加法指令: ADD、ADC、INC、DAA、 AAA ②减法指令: SUB、SBB、DEC、DAS、 AAS、NEG、CMP ③乘法指令: MUL、IMUL、AAM ④除法指令: DIV、IDIV、AAD、方式
寻址方式:指令中操作数所在地址的表示方式。 隐含寻址 I/O寻址 8086/8088 直接寻址 立即寻址 寻址方式 间接寻址 寄存器寻址 相对寻址 存储器寻址 基址变址寻址 相对基址变址寻址 一般讨论寻址方式时多指源操作数的寻址方式。 在转移控制类指令中,寻址方式指的是转移地址
五、控制转移类指令
①无条件转移指令: JMP ②有条件转移指令: Jcc(cc为条件) ③过程调用指令: CALL、RET ④中断指令: INT、IRET ⑤循环控制指令: LOOP、LOOPZ、 LOOPNZ、JCXZ、LOOPE、LOOPNE
微机原理2007年-第三章-指令系统第二节传送指令
可以利用循环, ② 可以利用循环, 但每循环一次要修改地址(源地址和目的地址), 但每循环一次要修改地址(源地址和目的地址), 必须把地址放在寄存器当中, 寄存器间接寻址来寻找操作数 必须把地址放在寄存器当中,用寄存器间接寻址来寻找操作数.
得到如下程序: 得到如下程序:
…
MOV SI,OFFSET AREA1 , MOV DI,OFFSET AREA2 , MOV CX,100 , AGAIN : MOV AL,[SI] , MOV [DI],AL , INC SI INC DI DEC CX JNZ AGAIN ;修改地址指针 ;修改地址指针 ;修改个数
的符号: 介绍指令系统使用的符号: 八位寄存器: ,BH, , 八位寄存器 AH,AL,BH,B ,BL,CH,CL,DH,DL , , ,B , , , 十六位通用寄存器: 十六位通用寄存器 AX,BX,CX,DX,SP,BP,SI,DI , , , , , , , 堆栈指针 指令指针 标志位 目的和源变址寄存器 段寄存器 通用寄存器 SP IP Flags DI, SI CS, DS, ES, SS r
Байду номын сангаас
一. 数据传送指令
功能: 功能: 负责CPU和存储器 和存储器 负责 CPU和I/O端口 和 端口 CPU的内部寄存器之间的数据传 送。 的内部寄存器之间的数据传 特点: 特点: 它是计算机最基本、最重要的一种操作,使用比例最高。 它是计算机最基本、最重要的一种操作,使用比例最高。 通用传送指令包括: MOV, PUSH, POP ,XCHG 通用传送指令包括: MOV, PUSH, 累加器专用传送指令: IN, OUT;XLAT 累加器专用传送指令: OUT; 地址传送指令包括: LEA, LDS, LES 地址传送指令包括: 标志传送指令包括 : LAHF, SAHF, PUSHF, POPF 指令外, 除 SAHF和POPF指令外,对标志位没有影响。 和 指令外 对标志位没有影响。
第三章 8086 8088指令系统
MOV MOV MOV MOV MOV MOV MOV
AX , 3102H AX , [3102H] SI , AX AX , [SI] AX , [BX ] DATA AX , [BX][SI] AX, [BX] [DI] DATA
MOV AX , MOV [3102H] , MOV [SI] , MOV [BX] DATA , MOV [BX][SI] , MOV [BX] [DI ]DATA,
[例3-7] 指令 MOV AX,DATA[BX]
设:(DS)=6000H,(BX)=1000H,DATA=08H, 则物理地址=60000H+1000H+08H= 610008H
指令的执行情况如图3-6所示。执行结果为AX=5566h
DS BX ﹢) 6000 1000 0008 61008 位移量 高8位 0 位移量 低8位
MOV AX,[6000H]
③立即数到寄存器的传送
MOV MOV AL,5 BX,3078H ; 将立即数5送累加器AL ; 将立即数3078H送寄存器BX
④立即数到存储器的传送
MOV BYTE PTR[BP+SI],5 MOV WORD PTR[BX],1005H ; 将5送堆栈段中偏移地址为BP+SI所指的单元中 ;1005H 送数据段中偏移地址为BX和BX+1两单元
图 3-4 寄存器寻址示意图
采用寄存器寻址方式,虽然指令操作码在代码段中,但操作数在内部寄存器中,
指令执行时不必通过访问内存就可取得操作数,故执行速度较快。
3.2.4寄存器间接寻址
寄存器间接寻址 ——是用寄存器的内容表示操作数的偏移地址。此时寄存
器中的内容,只是存放数据的偏移地址,操作数本身在内存储器中。
第三章 80868088的指令系统
3.1 指令的基本格式一、指令构成微计算机的指令系统通常由几十种或百余种指令组成(可见表2-1)。
每种指令又由两个字段(Field)构成:l.操作码(OP-Code)字段该字段指示计算机所要执行的操作类型,由一组二进制代码表示,在汇编语言中又用助记将(Mnemonic)代表。
8086执行指令时,首先将操作码从指令队列取入执行部件EU中的控制单元,经指令译码器识别后,产生执行本指令操作所需的时序性控制信号,控制计算机完成规定的操作。
2.操作数(Oprand)字段该字段则是指出指令执行的操作所需的操作数。
在操作数字段中,可以是操作数本身,或是操作数地址或是操作数地址的计算方法。
微计算机中此字段通常可有一个或两个,称前者为单操作数指令,称后者为双操作数指令。
而双操作数又分别称为源操作数src (source)和目的操作数dst(destination)。
在指令执行之前,src和dst均为参加运算处理的两个操作数,指令执行之后,在dst中则存放运算处理的结果。
指令的基本格式如下:二、80868086的指令长度可在1~6字节的范围,如图3-1所示。
其中B l和B0为基本字节,B3~B6将根据不同指令作相应的安排。
表3-1 8086指令格式(1)B1字节各字段定义如下:OP--指令操作码。
D--表示方向。
D=1寄存器为目的,D=0寄存器为源。
W--表示字节或字处理方式。
W=0为字节指令,W=1为字指令。
(2)B2字节各字段定义如下:MOD--给出指令的寻址方式。
8086的一条指令中,最多可使用两个操作数,它们不能同时位于存储器中,最多只能有一个是存储器操作数。
当MOD=11时为存储器方式,即有一个操作数位于存储器中;MOD=00,没有位移量;MOD01,只有低8位位移量,需将符号扩展8位,形成16位;MOD=10有16位位移量。
当MOD=1l时,为寄存器方式,两个操作数均为寄存器。
REG--表示指令中只有一个操作数,这个操作数为寄存器,可见表3-1,表中左部示出寄存器对应的编码。
第3章80888086指令系统(老师用的课件哦)
第3章 8088/8086指令系统
图3.5 变址寻址示意图
第3章 8088/8086指令系统
例:MOV AX,200AH[SI];或(AX)←
[(DS)*16+(SI)+200AH
EA=(SI)
+200AH,SI为变址寄存器,200AH为16位的位移量。
图3.6为用BP寄存器进行变址寻址时的示意图。
第3章 8088/8086指令系统
3.存储器操作数 存储器操作数是把操作数放在存储器单元中。对这 类操作数,在指令中必须给出存储器的地址。存储器 的实际地址(也称物理地址)是由指定的段基址和段内地 址偏移量(也称为有效地址EA)所决定的。由于段基址 相对很少改变,故一般预先予以指定,以后通过隐含 方法使用,即只要段基址未改变,其在汇编指令中便 不再出现。此时,只给出有效地址EA(以各种寻址方式 给出)。
第3章 8088/8086指令系统
3.2 8088/8086指令系统
3.2.1 数据传送指令 1 .数据传送指令MOV 指令格式:MOV OPRD1,OPRD2 MOV 为操作码。 OPRD1为目的操作数,可以是寄存器、存储器、
累加器。
第3章 8088/8086指令系统
OPRD2为源操作数,可以是寄存器、存储器、累 加器和立即数。
第3章 8088/8086指令系统
4.寄存器间接寻址
寄存器间接寻址的操作数类型为存储器操作数,与 直接寻址方式的区别是:该存储单元的16位段内偏移 地址,不是从指令代码中直接得到,而是从指令所指 定的寄存器中得到。能用于间接寻址的寄存器为SI、 DI、BX、BP。若以SI、DI、BX进行间接寻址,应由 数据段DS的内容作为段基址,间接寻址寄存器的内容 为段内偏移量,并指定形成操作数的物理地址。若以 寄存器BP间接寻址,则BP中的内容为段内偏移量,段寄 存器SS与之一起形成物理地址。寄存器间接寻址示意 图如图3.4所示。
03第三章 Intel 80868088 CPU的指令系统04
这4条指令的功能如下图示:
最高位 CF (a) ROL 最高位 CF (b) ROR 最低位 CF (d) RCR 最高位 最低位 CF (c) RCL 最低位 最高位 最低位
循环移位指令功能示意图
② 不带进位标志位的循环右移指令 ROR
【格式】 ROR mem/reg,CL ;移位位数≥1时 1 ;移位位数=1时
移位位数1时功能及操作将目的操作数的内容向右移1位或cl所指定的位数操作数最低位移入标志位cfsal将目的操作数视为有符号数因此为了保证符号不丢失算术右移时最高位不是补零而是保持不变
第3章 8086/8088指令系统
3.3.3 逻辑运算和移位指令
要点:
▪ 逻辑运算指令可实现与(测试)、或、非、异或 等四类基本逻辑运算。 ▪ 移位指令可实现指定操作数的左移或右移(包 括算术/逻辑/循环)操作。 ▪ 逻辑运算和移位指令中的绝大多数均会影响OF、 CF、PF、SF和ZF标志,对AF无影响。 ▪ 逻辑运算指令的运算规则是:按位操作,无进/ 借位。
循环移位指令与非循环移位指令不同,循环移位后, 操作数中原来的信息不会丢失,而只是改变了位置而已, 如果需要还可恢复(反向移动即可)。 循环移位指令只影响CF和OF(与非循环移位指令相 同),其余标志不受影响。
① 不带进位标志位的循环左移指令 ROL 【格式】 ROL mem/reg,CL ;移位位数≥1时 1 ;移位位数=1时 【功能及操作】 将目标操作数向左循环移动1位或CL指定 的位数,最高位移入CF,同时再移入最 低位构成循环,CF不在循环圈之内(见 图)。
循环移位指令功能示意图
③ 带进位标志位的循环左移指令 RCL
【格式】 RCL mem/reg,CL ;移位位数≥1时 1 ;移位位数=1时
第3章80X86指令系统(2)PPT课件
src: 立即数,寄存器,存储器。
dest:寄存器,存储器。
例: CMP AL,0AH
;寄存器与立即数比较
CMP CX, DI
;寄存器与寄存器比较
CMP AX, AREA1
;寄存器与存储器比较
CMP [BX+5], SI
;存储器与寄存器比较
CMP WORD PTR ALPHA,100H;存储器与立即数比较
ZF=0, AX = BX ,两者不相等
(2) 根据CF标志, 判断两个无符号数的大小
例: 比较AX,BX寄存器, 将大数 AX
…
CMP AX,BX
JNC NEXT
; CF=0跳转至NEXT
XCHG AX,BX
NEXT:……
结论:CF=0 , AX > BX ; CF=1, AX < BX
22
(3) 用SF、OF标志,判断两个带符号数的大小 设:被比较二个带符号数分别为 : A、B 若SF OF=0, 则A>B 若SF OF=1, 则 A<B
为寄存器;单操作数指令不能为立即数。
2
(一)加法指令(Arithmetic)
8086/8088有5种加法操作指令:
1、 ADD(Addition)加法指令 2、 ADC(Add with carry)带进位加法指令 3、 INC(Increment by 1)加 1指令 4、 AAA(ASCII adjust for addition)加法ASCII调整指令 5、 DAA(Decimal adjust for addition)加法十进制调整指令
20D59E36C1H=?
开始
两个多字节数存放在:
DATA1,DDAATAT1 A2的F8H开始单元。
第3章 8086(8088)CPU指令系统
第3章 8086/8088CPU指令系统
4.1.4 操作数寻址方式
3.存储器寻址(Memory Addressing)
4.1操作数寻址方式
存储器操作数的寻址方式中,数据都存放于存储单元中,指令操 作过程中需要BIU通过一个总线周期的访问,才能获取操作数。存储 器操作数的寻址方式是怎么计算出操作数的有效地址EA(Effective Address)。有效地址EA是三个地址量因子一个以上组合,由CPU执行 单元EU计算出来。
4.1操作数寻址方式
Relative -plus-Index Addressing)
有效地址是一个8/16位移量和一个基址与变址之和构成 EA=(BX/BP)+(SI/DI)+ DISP8/16
MOV AX,[BX+SI+10H] 操作如图所示
数据段 BX 20H 00H
3000H:0000H
注: ◆基址因子BP访问默认为堆栈段 ◆不能同时取两个基址因子;也不 能同时去两个变址因子
第3章 8086/8088CPU指令系统
3.1操作数寻址方式
3.2指令系统
1
第3章 8086/8088CPU指令系统
微机工作过程中其内部信息有两类: 一类是控制信息(指令); 一类是被加工处理的信息(数据)。
指令:微机中的控制信息就是使计算机进行某种 操作的命令,这些命令就称为指令。 指令系统:一台计算机所能执行的全部指令的集合称 为指令系统。不同的计算机其指令系统是不同的。
第3章 8086/8088CPU指令系统
4.1.4 操作数寻址方式
4.端口寻址(Port Addressing)
4.1操作数寻址方式
80X86系列CPU在访问外设时使用10根地址线A9-A0,其实际访问空 间为210=1K。根据通常书写习惯当高2为A9A8=00时,直接书写低8位, 可直接出现在指令格式中即端口的直接寻址;当A9A8≠00时,要按照 16为的数据书写,不能直接出现在指令格式中,要预先送到DX寄存器 中,即端口的间接寻址。 A 9 A 8 A7A6A5A4A3A2A1A0 0 0 X X X X X X X X 0 1 X X X X X X X X 1 0 X X X X X X X X 1 1 X X X X X X X X
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.1 指令的基本格式一、指令构成微计算机的指令系统通常由几十种或百余种指令组成(可见表2-1)。
每种指令又由两个字段(Field)构成:l.操作码(OP-Code)字段该字段指示计算机所要执行的操作类型,由一组二进制代码表示,在汇编语言中又用助记将(Mnemonic)代表。
8086执行指令时,首先将操作码从指令队列取入执行部件EU中的控制单元,经指令译码器识别后,产生执行本指令操作所需的时序性控制信号,控制计算机完成规定的操作。
2.操作数(Oprand)字段该字段则是指出指令执行的操作所需的操作数。
在操作数字段中,可以是操作数本身,或是操作数地址或是操作数地址的计算方法。
微计算机中此字段通常可有一个或两个,称前者为单操作数指令,称后者为双操作数指令。
而双操作数又分别称为源操作数src (source)和目的操作数dst(destination)。
在指令执行之前,src和dst均为参加运算处理的两个操作数,指令执行之后,在dst中则存放运算处理的结果。
指令的基本格式如下:二、80868086的指令长度可在1~6字节的范围,如图3-1所示。
其中B l和B0为基本字节,B3~B6将根据不同指令作相应的安排。
(1)B1字节各字段定义如下:OP--指令操作码。
D--表示方向。
D=1寄存器为目的,D=0寄存器为源。
W--表示字节或字处理方式。
W=0为字节指令,W=1为字指令。
(2)B2字节各字段定义如下:MOD--给出指令的寻址方式。
8086的一条指令中,最多可使用两个操作数,它们不能同时位于存储器中,最多只能有一个是存储器操作数。
当MOD=11时为存储器方式,即有一个操作数位于存储器中;MOD=00,没有位移量; MOD01,只有低8位位移量,需将符号扩展8位,形成16位; MOD=10有16位位移量。
当MOD=1l时,为寄存器方式,两个操作数均为寄存器。
REG--表示指令中只有一个操作数,这个操作数为寄存器,可见表3-1,表中左部示出寄存器对应的编码。
R/M--R/M受MOD制约。
当 MOD=11(即寄存器方式时),由此字段给出指令中第二个操作数所在的寄存器编码;当MOD≠11时,此字段用来指出应如何计算指令中使用的存储器操作数的有效地址。
MOD和R /M字段表示的有效地址 EA计算方法如表3-1所示,共2 4种。
(3) B3~B6字节这四个字节一般是给出存储器操作数地址的位移量(即偏移量)和/或立即操作数。
位移量可为8位,也可为16位,这由MOD来决定。
8086规定16位的字位移量的低位字节放于低地址单元,高位字节放于高地址单元。
若指令中只有8位位移量, 8086在计算有效地址时,自动用符号将其扩展成一个16位的双字节数,以保证有效地址的计算不产生错误,实现正确的寻址。
指令中的立即操作数位于位移量的后面。
若B3,B4有位移量,立即操作数就位于B5,B6。
若指令中无位移量,立即操作数就位于B3,B4字节。
总之,指令中缺少的项将由后面存在的项向前顶替,以减少指令长度。
3.2 8086的寻址方式8086的操作数可隐含在操作码中,也可以是操作数字段中的操作数本身,还可以是存放操作数的地址,如寄存器,I/0端口及存储器。
对存储器,给出的或是存储器地址,或是产生存储器地址的信息。
从表3-l可见,共有2 4种计算存储器有效地址EA(Effect Address)的方法。
这些有效地址均在除代码段以外的存储段中,它表示的是离段起始地址的距离。
以上所有能寻得操作数来源的方式,称为寻址方式。
8086的寻址方式也是8位的8080/8085的母集,对不同的操作数8086有不同的方法对它们进行存取,特别是对存储器操作数,增加了许多支持数组处理和字符串处理的寻址方式。
这样,可使指令方便灵活地寻址整个存储器空间,同时,对支持高级语言的使用也是必不可少的。
一、固定寻址( Inherent Addressing)8086的单操作数指令,其操作是规定在CPU中某个固定的寄存器中进行,这个寄存器又被隐含在操作码中,因此,这种寻址方式的指令大多为单字节指令,例如,加减法的十进制调整指令,其操作总是固定在AL寄存器中进行;还有为双操作数指令,例如寄存器人栈和出栈指令PUSH REG和POP REG,其中有一个操作数地址也是固定的堆栈栈顶;还有乘、除法指令虽不是单字节指令,但被乘数,被除数总是放在AL 或AX中。
固定寻址指令中,对固定操作数是被隐含了的。
固定寻址的指令,不需要计算EA,执行速度快,加之大多为单字节指令,因此特别适合在微处理机中使用。
二、立即数寻址( Immediate Addressing)这种方式下的操作数直接存放在指令中,是紧跟在操作码之后的DATA,它作为指令的组成部分放在代码段中,随着取指令一起取到指令队列,执行时直接从指令队列中取,而不必执行总线周期。
立即数可以是8位,也可以是16位。
如果是16位数,则低位字节数存放在低地址单元,高位字节数存放在高地址单元。
例如:MOV AL,C3H ;执行后,(AL)=C3HMOV AX,2050H ;执行后,(AX)=2050H,其中:(AH)=20H,(AL)=50H。
这种寻址方式只能用于源操作数,且因操作数是直接从指令中取得,不执行总线周期,所以这种寻址方式的显著特点是执行速度快,主要用来给寄存器赋初值。
三、寄存器寻址(Register Addressing)其操作数来源于CPU的内部寄存器,指令中直接给出寄存器名。
对于16位的操作数,寄存器可以是:AX,BX,CX,DX,SI,DI,SP和BP;对于8位的操作数,寄存器可以是AL,BL,CL,DL及 AH,BH,CH,DH,可见表3-2中MOD=11时的情况。
例如:INC CX ;执行后,(CX)<-(CX)+1MOV DS,AX ;指令执行前,若(AX)=2100H,执行后,(DS)=2100H,并且(AX)不变。
一条指令中,可以对源操作数采用寄存器寻址方式,也可以对目的操作数采用寄存器寻址方式,还可以两者都用寄存器寻址方式。
采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,不需要执行总线周期,因此,执行速度快。
3.3 指令执行时间通常,计算机一条指令的执行时间是指取指令和执行指令所花时间的总和。
但是,在8086CPU中,执行部件EU和总线接口部件BIU是并行工作的,BIU可以预先把指令取到指令队列缓冲器存放,形成取指和执行的重叠,这样,在计算指令的执行时间时,就不把取指时间计算在内。
执行指令的时间,除了EU中的基本执行时间外,有些指令在执行过程中可能需多次访问内存,包括取操作数和存放操作结果等,这都要执行总线的读/写周期;而在每次访问内存之前,又需要计算有效地址EA,计算有效地址所需的时间又由寻址方式决定。
不同寻址方式下计算有效地址所需的时间如表3-2所示。
不同功能的指令,其基本执行时间也不相同,这里,将一些常用类指令的基本执行时间列举在表3-3中,其余指令的可参见附录一"时钟周期数"一栏中的第一项数据。
就是同一类指令,因寻址方式不同,访问存储器次数不一,因而执行时间也不同,这里,仅列出加法指令( ADD)的情况,如表3-4所示。
表中"时钟周期"一栏中的第二项"EA"为计算有效地址所需的时间。
'以上所有的时间均用时钟周期数来计量。
综上所述:执行一条指令所花的总时间=基本执行时间十计算EA的时间十执行总线读/写周期的时间。
其中后两项对存储器操作数才有。
除上面讨论的这些因素外,在考虑一第指令所需的执行时间时,还应注意到宇操作数在内存或I/O端口的存放格式也是一个影响因素。
8086的数据总线是16位的,因此,CPU和存储器、I/O端口之间传送数据时,在一个总线周期(基本总线周期为4T)中可以传送 16位数据,即一个字。
但要做到这点,是有条件的。
在第二章讨论存储器组织时,若存/取的字操作数是从偶地址开始的规则字,其存/取可在一个总线周期完成;若存/取的字操作数是从奇地址开始的非规则字时,其存/取需在二个总线周期完成。
因此,这种情况下,每访问内存一次,便需多加一个总线周期的时间。
如果,指令执行的是字节操作,而这个字节数是对偶地址单元或偶数端口进行的存/取,那么,在一个总线周期中,只有数据总线的低8位起传输作用,而高8位则处于空闲状态。
相反,若字节数是对奇地址单元或奇数端口进行存/取,则在一个总线周期中,只有数据总线高8位起传输使用,而低8位则处于空闲状态。
请看例题例1 设8086的时钟频率为5MHZ(即时钟周期=0.2uS),试求ADD指令在各种寻址方式下,指令的执行时间t。
解:根据表3-4:l.两操作数为:寄存器,寄存器,结果在寄存器。
这种情况下,对于字操作数或字节操作数均花3个时钟周期,即t=3×0.2=0.6 us2.两操作数为:寄存器,存储器(用相对基址加变址寻址),结果存寄存器,这时需访问一次内存。
在这种情况下,对于字节操作或对规则字操作,所需时间为t=9+EA=9+12=21(T)第一项9为这种寻址方式下指令基本运算和基本操作时间,第二项为计算EA的时间,则t=21×0.2=4.2 us对于非规则字的操作,则应在上面的时间上再加上一个总线周期时间,如 4T,即t=(21+4)T=5.0ns3.两个操作数为:存储器(用基址变址寻址),寄存器,结果存存储器,这时需访问二次内存。
对于字节操作或对规则字操作,指令执行时间为:t=16+EA=16+8=24(T)=4.8us第一项的16为这种寻址方式下指令基本运算和基本操作时间,第二项为计算EA时间。
对于非规则字操作,指令执行时间应在上面的时间上加上两个总统周期,则t=(6+8+4+4)T=32T=6.4us还有其它三种寻址方式下,ADD的执行时间,请读者练习计算。
从这个例子可以看出:对于同一种ADD指令,因寻址方式不同,执行指令的时间相差甚远,这是指令的时间指标概念。
从表3-4还可以看到:同一类指令使用不同的寻址方式,其指令长度也不一样,即占有的内存的字节数相差也很大,这是指令的空间指标的概念,合起来就是指令的时/空指标。
指令是程序的基本组成单元,那么当要求程序有较高的时/空利用率时,就要求程序设计者,不仅要研究程序的算法,数据结构,还要研究指令与寻址方式的选用,才能编制出理想的程序。
3.48086指令系统从本节开始,我们开始具体学习8086每一条指令的功能与格式。
8086指令系统包含133条基本指令,这些指令与寻址方式组合,再加上不同的操作数类型----字或字节,可构成上千种指令。
按功能的不同,可将这些指令分为六类:1.数据传送类 4.串操作类2.算术运算类 5.控制转移类3.逻辑运算与移位类 6.处理器控制类我们也按这种分类,来逐步学习。