微机原理-指令系统
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作数在寄存器中,指令中指明寄存器 号,这种寻址方式叫寄存器寻址。
对于8位操作数,寄存器可以是 AH, AL, BH, BL, CH, CL, DH, DL .
对于16位操作数,寄存器可以是AX, BX, CX, DX, SI, DI, SP 和 BP ;
EXAMPLE
INC AX ; MOV AX, BX ;
物理地址=20000H + 1000H =21000H
AX
*指令中也可以通过
……….
“段跨越前缀”取得
数 其他段中的数据,
据 例如:
A0H 段 MOV AX,ES: [BX]
50 H
指令的执行结果为: (AX) = 50A0H
(五) 寄存器相对寻址 (Register relative addressing)
后压入:SP+1,SP) SRC …
(SP)
压 入
最后一项
弹出:格式 POP DST 栈顶 先弹出:DST (SP+1,SP) 弹 后修改指针:SP SP+2 出
高地址
栈底
压入标志:PUSHF 弹出标志:POPF
堆栈操作对标志位的影响
只有POPF指令影响所有的标志位,其它 堆栈指令均不影响任何标志位。
+
” ” BP, ” ”
ss
[BP] [DI]
Example
例:MOV AX,[BX+DI]
设(DS)=2100H,(BX)=0158H,[DI]=10A5H.
则 EA= 0158H+10A5H=11FDH
物理地址=21000H+11FDH=221FDH
*这种寻址方式同样
[BX] 21000H
21158H
在直接寻址方式中,指令中直接给出操作数的 有效地址,或者说,有效地址EA就在指令中。
它(操作数的有效地址,而不是操作数本身)存 放在代码段中指令的操作码之后,但操作数一 般存放在数据段中。
当然, 也允许数据存放在数据段以外的其 它段(如附加段)。此时应在指令中给出
“跨越段前缀”。
例 1. MOV AX , [2000H];
MOV AX, [SI+3000H] 设(DS)=4000H,(SI)=2000H 物理地址
OP
操
OP
作 码
=40000H+2000H+3000H
00
位
= 45000H 指令的执行情况如
30
移
量
右图
AX
40000H ……
43000H
SI ……
数
45000H 34
据 段
12
寄存器相对寻址
这种寻址方式可用于表格的处理,通过
寻址方式的名称和分类
立即寻址(立即数寻址) 立即寻址 ;直接寻址
寄存器寻址 直接寻址 间接寻址
立即扩展寻址;零页寻 址
隐含寻址;相对寻址 寄存器寻址;变址寻址
变址寻址
寄存器间接寻址;位寻 址
一.8086的寻址方式
分两种情况来讨论:
1. 程序存储器寻址
2. 数据存储器寻址
(我们重点掌握数据存储器寻址的几种 寻址方式)
操作数在存储器中(以寄存器的内容为操作数的 有效地址)。
[BX]……..对应段寄存器为 DS
EA= [BP]…….. ………………… SS
[SI]……… …………………..DS
[DI]……… ………………….DS
Example
MOV AX , [BX] ;
设 ( DS) = 2000H ,(BX) = 1000H
或 ES: MOV AX , [3000H] ;
• 为了使指令字不要过长,规定双操作数 指令不能两个操作数都用直接寻址方式。
如( MOV [2000H] , [3000H] )
(四) 寄存器间接寻址(Register indirect Addressing)
采用寄存器间接寻址方式时,指令中给 出寄存器号(寄存器为BX,BP,SI和DI之一), 被指定的寄存器中存放着操作数的有效地址,
第三章 指令系统
寻址方式
指令通常应提供的信息 1. 做什么操作 2. 操作数从哪里来 3. 操作结果放在哪里
4. 对于调用和转移指令,还要涉及 转移或调用地址的提供方式
指令的组成
操作码字段(field)
--标明计算机要执行什么操作
操作数字段
--指出指令在执行过程中所需要的
操作数(值为多少 或者放在什么 地方),以及操作结果送到哪里
位移量来设置表格的首地址;
利用修改基址寄存器或变址寄存器的内 容来获得表项的值。
(六)基址变址寻址(Based
indexed addressing)
操作数的有效地址是一个基址寄存器和 一个变址寄存器内容之和,两个寄存器 均由指令指定。
[BX] [SI] 若基址寄存器为BX,则段寄存器为DS
EA=
[BX] [SI]
用BX,则段寄存器为 DS
EA= + +位移量
[BP] [DI]
用BP,则段寄存器为 SS
例:MOV AX,[BX+SI+0250H]
OP
设(DS)=3000H,(BX)=2000H,(SI)=1000H,则
代
EA= 2000H+1000H+0250H=3250H
OP 码
物理地址=30000H+3250H=33250H
DEC AX ; ROL AH , 1 ;
将AH中的内容循环左移一位
CF
D7
D0
特点
(1) 操作数就在寄存器中,不需要访问存
储器来取得操作数(指令执行时,操 作就在CPU的内部进行),因而执行速 度快。
(2)寄存器号比内存地址短
* 在编程中,如有可能,尽量使用这种寻址 方式的指令。
* 寄存器寻址方式既可用于源操作数,也可 用于目的操作数,还可以两者都用于寄存器寻 址方式(如 MOV BX , AX )
(一)立即寻址(Immediate addressing)
指令中直接给出操作数,操作数紧跟在 操作码之后,作为指令的一部分存放在代 码段里,在取出指令的同时也就取出了操 作数,立即有操作数可用,所以称之为立 即寻址。
目的 源 example
MOV AL, 80H ; MOV AX, 3064H ; ADD AL, 20H ; ADD AX, 1090H;
操作数的有效地址是一个基址或变址寄
存器的内容与指令中指定的8位或16位位 移量之和。
若没有段跨越前缀,则对于寄存器BX,SI, DI的情况,段寄存器为DS;而对于寄存 器为BP的情况,则段寄存器为SS.
如下图所示
EA =
[BX] [BP] + [SI] [DI]
8位偏移量 16位偏移量
Example
操作指令
现代微型计算机中多采用二地址指令,
两个操作数分别称为“源操作数”和 “目的操作数”,指令执行后,把运
算结果放到目的操作数的地址之中。
指令的操作码在机器中的表示比较简单, 只要对每一种操作指定相应的二进制代 码即可;而指令的操作数字段的情形就 比较复杂
寻址方式
定义(1):指令中如何提供操作数或操作数
地址的方式称为寻址方式。
定义(2):规定如何对地址字段作出解释以
找到操作数。
*程序转移时需提供转移地址,这跟提供操作数 地址在方法上没有本质区别,因此也归入寻址 方式的范畴。
指令系统设计
一个指令系统能够提供哪些寻址方式, 能否为编制程序提供方便,这是指令系 统设计的关键。
需要说明的是,在不同的计算机系统中, 寻址方式的名称和分类并不统一,但基 本可以归结为以下几种方式或它们的变 型或组合:
50 段
02
[BX] 30000H
…
AX
位移量 32000H … 数
32250H … 据
[SI] 32250H 34 段
12
相对基址加变址寻址
这种寻址方式对堆栈中数组的访问提供了方便,通常 可用BP指向栈顶(MOV BP,SP). 从栈顶到数组第一个元 素的距离用位移量表示,变址寄存器(SI或DI)用来指出 数组元素。
练习2
把数据块BLOCK1移到BLOCK2
2040H
2060H
BLOCK1
BLOCK2
把2040H地址开始的10个字节数据移到2060地 址开始的10个字节单元处。
练习3
把2040H地址开始的10个字节单元的 内容与2060H地址开始的10个字节单 元内容互换。
ANSWER
START: MOV SI, 2040H ; MOV DI, 2060H ; MOV CX, 0AH;
LOOP1: MOV BL, [SI+09H]; MOV [DI+09H],BL ; DEC SI ; DEC DI ; DEC CX ; JNZ LOOP1; HLT ;
(2)堆栈操作指令
堆栈的定义 * [堆栈的用途】
堆栈的图示:
压入:格式 PUSH SRC
(SS)
先修改指针: SP SP-2
如(DS)= 3000H, 则指令的执行情况 如下图所示:
代 码 作 段
数 据 段
存储器 OP 00 20
50 30
采用直接寻址方式,如果没 有用“段跨越前缀”标明操
数在哪一段,就默认段寄存 为DS.
30000H AX
32000H 执行结果:(AX)=3050H
例2
如数据在附加段(扩展段)中,则应指明“段 跨越前缀”。 MOV AX , ES : [3000H] ;
O D ITSZAPC - - ------ -
(3)交换指令
格式:XCHG OPR1, OPR2 操作:OPTR1 OPTR2 标志:O D I T S Z A P C
低地址 存储器
AX
OP 代 64 码
段
30
高地址
立即寻址
立即数可以为8位,也可以为16位。如果是16
位数,则“高位字节存放在高地址中, 低位字节存放在低地址中。”
立即寻址方式常用于给寄存器赋值,并且只能
用于源操作数,而不能用于目的操作数。
(二) 寄存器寻址(Register addressing)
练习1
用MOV指令实现两内存字节单元内容的交换 2035H 01H ….
2045H 02H
用直接寻址方式实现
MOV BL, [2035]; MOV CL,[2045H]; MOV [2045H],BL; MOV [2035H],CL; HLT
用寄存器间接寻址方式实现
MOV SI , 2035H; MOV DI, 2045H; MOV AH, [SI]; MOV AL, [DI]; MOV [2035H],AL; MOV [2045H],AH;
…
适用于表格(或数组), 首地址可存放在基址
AX
…
寄存器中,而用变址寄存器
221FDH
34
来访问表格中的各项。由于 两个寄存器都可以修改使
12
用起来更灵活。
(七)相对基址加变址寻址 (Relative based indexed address~)
也称“带位移量的基址加变址寻址方 式”.
操作数的有效地址是一个基址寄存器和 一个变址寄存器内容与8位或16位位移量 之和。
1. 通用传送指令: 最基本的传送指令(MOV) 堆栈指令(PUSH,POP) 数据交换指令(XCHG)
(1) MOV指令
指令格式:MOV DST,SRC; 操作:DST SRC
实现CPU的内部寄存器或寄存器与内存间的数据传送 (复制操作). 例: MOV AL, BL;
MOV [DI], AX; MOV CX,[1000H]; MOV BL, 40 MOV WORD PTR[SI],01H; WORD PTR 字长度标记;BYTE PTR 字节长度标记 DWORD PTR 双字长度标记 (伪指令) 标志:所有通用传送指令都不影响标志位。
指令的一般格式
操作数字段可以有一个,二个或三个操 作数,通常称为“一地址”,“二地址” 或 “三地址”指令
操作码 操作数 。。。 操作数
示例
加1指令 INC AX 只需要指出加1的操作数,它是“一地址” 指令。
双操作数指令 ADD AX, BX
大多数运算型指令都是双操作数指令,对 这种指令,有的机器(大中型)使用“三地址” 指令:除给出参加运算的两个操作数外,还要 指出运算结果的存放地址
[BP] 栈顶
存储器
低地址
位移量
[SI]
A(0)
A(1)
…
A(n)
二 8086指令系统概况
1.指令格式
2. 指令执行时间
三. 8086指令系统
可以分为以下六类: 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 转移指令 处理器控制指令
(一)数据传送指令
包括:通用传送指令;累加器专用传送指令; 地址传送指令;标志传送指令;
寻址方式
除以上两种寻址方式外,下面各种寻址 方式的操作数均在存储器中,通过采用不 同的寻址方式取得操作数地址,从而取得 操作数。
(三)直接寻址(Direct
Addressing)
在讨论寻址方式时,通常把操作数的偏移地址
称为有效地址EA (Effective Address) ,EA
可通过不同的寻址方式来得到。
对于8位操作数,寄存器可以是 AH, AL, BH, BL, CH, CL, DH, DL .
对于16位操作数,寄存器可以是AX, BX, CX, DX, SI, DI, SP 和 BP ;
EXAMPLE
INC AX ; MOV AX, BX ;
物理地址=20000H + 1000H =21000H
AX
*指令中也可以通过
……….
“段跨越前缀”取得
数 其他段中的数据,
据 例如:
A0H 段 MOV AX,ES: [BX]
50 H
指令的执行结果为: (AX) = 50A0H
(五) 寄存器相对寻址 (Register relative addressing)
后压入:SP+1,SP) SRC …
(SP)
压 入
最后一项
弹出:格式 POP DST 栈顶 先弹出:DST (SP+1,SP) 弹 后修改指针:SP SP+2 出
高地址
栈底
压入标志:PUSHF 弹出标志:POPF
堆栈操作对标志位的影响
只有POPF指令影响所有的标志位,其它 堆栈指令均不影响任何标志位。
+
” ” BP, ” ”
ss
[BP] [DI]
Example
例:MOV AX,[BX+DI]
设(DS)=2100H,(BX)=0158H,[DI]=10A5H.
则 EA= 0158H+10A5H=11FDH
物理地址=21000H+11FDH=221FDH
*这种寻址方式同样
[BX] 21000H
21158H
在直接寻址方式中,指令中直接给出操作数的 有效地址,或者说,有效地址EA就在指令中。
它(操作数的有效地址,而不是操作数本身)存 放在代码段中指令的操作码之后,但操作数一 般存放在数据段中。
当然, 也允许数据存放在数据段以外的其 它段(如附加段)。此时应在指令中给出
“跨越段前缀”。
例 1. MOV AX , [2000H];
MOV AX, [SI+3000H] 设(DS)=4000H,(SI)=2000H 物理地址
OP
操
OP
作 码
=40000H+2000H+3000H
00
位
= 45000H 指令的执行情况如
30
移
量
右图
AX
40000H ……
43000H
SI ……
数
45000H 34
据 段
12
寄存器相对寻址
这种寻址方式可用于表格的处理,通过
寻址方式的名称和分类
立即寻址(立即数寻址) 立即寻址 ;直接寻址
寄存器寻址 直接寻址 间接寻址
立即扩展寻址;零页寻 址
隐含寻址;相对寻址 寄存器寻址;变址寻址
变址寻址
寄存器间接寻址;位寻 址
一.8086的寻址方式
分两种情况来讨论:
1. 程序存储器寻址
2. 数据存储器寻址
(我们重点掌握数据存储器寻址的几种 寻址方式)
操作数在存储器中(以寄存器的内容为操作数的 有效地址)。
[BX]……..对应段寄存器为 DS
EA= [BP]…….. ………………… SS
[SI]……… …………………..DS
[DI]……… ………………….DS
Example
MOV AX , [BX] ;
设 ( DS) = 2000H ,(BX) = 1000H
或 ES: MOV AX , [3000H] ;
• 为了使指令字不要过长,规定双操作数 指令不能两个操作数都用直接寻址方式。
如( MOV [2000H] , [3000H] )
(四) 寄存器间接寻址(Register indirect Addressing)
采用寄存器间接寻址方式时,指令中给 出寄存器号(寄存器为BX,BP,SI和DI之一), 被指定的寄存器中存放着操作数的有效地址,
第三章 指令系统
寻址方式
指令通常应提供的信息 1. 做什么操作 2. 操作数从哪里来 3. 操作结果放在哪里
4. 对于调用和转移指令,还要涉及 转移或调用地址的提供方式
指令的组成
操作码字段(field)
--标明计算机要执行什么操作
操作数字段
--指出指令在执行过程中所需要的
操作数(值为多少 或者放在什么 地方),以及操作结果送到哪里
位移量来设置表格的首地址;
利用修改基址寄存器或变址寄存器的内 容来获得表项的值。
(六)基址变址寻址(Based
indexed addressing)
操作数的有效地址是一个基址寄存器和 一个变址寄存器内容之和,两个寄存器 均由指令指定。
[BX] [SI] 若基址寄存器为BX,则段寄存器为DS
EA=
[BX] [SI]
用BX,则段寄存器为 DS
EA= + +位移量
[BP] [DI]
用BP,则段寄存器为 SS
例:MOV AX,[BX+SI+0250H]
OP
设(DS)=3000H,(BX)=2000H,(SI)=1000H,则
代
EA= 2000H+1000H+0250H=3250H
OP 码
物理地址=30000H+3250H=33250H
DEC AX ; ROL AH , 1 ;
将AH中的内容循环左移一位
CF
D7
D0
特点
(1) 操作数就在寄存器中,不需要访问存
储器来取得操作数(指令执行时,操 作就在CPU的内部进行),因而执行速 度快。
(2)寄存器号比内存地址短
* 在编程中,如有可能,尽量使用这种寻址 方式的指令。
* 寄存器寻址方式既可用于源操作数,也可 用于目的操作数,还可以两者都用于寄存器寻 址方式(如 MOV BX , AX )
(一)立即寻址(Immediate addressing)
指令中直接给出操作数,操作数紧跟在 操作码之后,作为指令的一部分存放在代 码段里,在取出指令的同时也就取出了操 作数,立即有操作数可用,所以称之为立 即寻址。
目的 源 example
MOV AL, 80H ; MOV AX, 3064H ; ADD AL, 20H ; ADD AX, 1090H;
操作数的有效地址是一个基址或变址寄
存器的内容与指令中指定的8位或16位位 移量之和。
若没有段跨越前缀,则对于寄存器BX,SI, DI的情况,段寄存器为DS;而对于寄存 器为BP的情况,则段寄存器为SS.
如下图所示
EA =
[BX] [BP] + [SI] [DI]
8位偏移量 16位偏移量
Example
操作指令
现代微型计算机中多采用二地址指令,
两个操作数分别称为“源操作数”和 “目的操作数”,指令执行后,把运
算结果放到目的操作数的地址之中。
指令的操作码在机器中的表示比较简单, 只要对每一种操作指定相应的二进制代 码即可;而指令的操作数字段的情形就 比较复杂
寻址方式
定义(1):指令中如何提供操作数或操作数
地址的方式称为寻址方式。
定义(2):规定如何对地址字段作出解释以
找到操作数。
*程序转移时需提供转移地址,这跟提供操作数 地址在方法上没有本质区别,因此也归入寻址 方式的范畴。
指令系统设计
一个指令系统能够提供哪些寻址方式, 能否为编制程序提供方便,这是指令系 统设计的关键。
需要说明的是,在不同的计算机系统中, 寻址方式的名称和分类并不统一,但基 本可以归结为以下几种方式或它们的变 型或组合:
50 段
02
[BX] 30000H
…
AX
位移量 32000H … 数
32250H … 据
[SI] 32250H 34 段
12
相对基址加变址寻址
这种寻址方式对堆栈中数组的访问提供了方便,通常 可用BP指向栈顶(MOV BP,SP). 从栈顶到数组第一个元 素的距离用位移量表示,变址寄存器(SI或DI)用来指出 数组元素。
练习2
把数据块BLOCK1移到BLOCK2
2040H
2060H
BLOCK1
BLOCK2
把2040H地址开始的10个字节数据移到2060地 址开始的10个字节单元处。
练习3
把2040H地址开始的10个字节单元的 内容与2060H地址开始的10个字节单 元内容互换。
ANSWER
START: MOV SI, 2040H ; MOV DI, 2060H ; MOV CX, 0AH;
LOOP1: MOV BL, [SI+09H]; MOV [DI+09H],BL ; DEC SI ; DEC DI ; DEC CX ; JNZ LOOP1; HLT ;
(2)堆栈操作指令
堆栈的定义 * [堆栈的用途】
堆栈的图示:
压入:格式 PUSH SRC
(SS)
先修改指针: SP SP-2
如(DS)= 3000H, 则指令的执行情况 如下图所示:
代 码 作 段
数 据 段
存储器 OP 00 20
50 30
采用直接寻址方式,如果没 有用“段跨越前缀”标明操
数在哪一段,就默认段寄存 为DS.
30000H AX
32000H 执行结果:(AX)=3050H
例2
如数据在附加段(扩展段)中,则应指明“段 跨越前缀”。 MOV AX , ES : [3000H] ;
O D ITSZAPC - - ------ -
(3)交换指令
格式:XCHG OPR1, OPR2 操作:OPTR1 OPTR2 标志:O D I T S Z A P C
低地址 存储器
AX
OP 代 64 码
段
30
高地址
立即寻址
立即数可以为8位,也可以为16位。如果是16
位数,则“高位字节存放在高地址中, 低位字节存放在低地址中。”
立即寻址方式常用于给寄存器赋值,并且只能
用于源操作数,而不能用于目的操作数。
(二) 寄存器寻址(Register addressing)
练习1
用MOV指令实现两内存字节单元内容的交换 2035H 01H ….
2045H 02H
用直接寻址方式实现
MOV BL, [2035]; MOV CL,[2045H]; MOV [2045H],BL; MOV [2035H],CL; HLT
用寄存器间接寻址方式实现
MOV SI , 2035H; MOV DI, 2045H; MOV AH, [SI]; MOV AL, [DI]; MOV [2035H],AL; MOV [2045H],AH;
…
适用于表格(或数组), 首地址可存放在基址
AX
…
寄存器中,而用变址寄存器
221FDH
34
来访问表格中的各项。由于 两个寄存器都可以修改使
12
用起来更灵活。
(七)相对基址加变址寻址 (Relative based indexed address~)
也称“带位移量的基址加变址寻址方 式”.
操作数的有效地址是一个基址寄存器和 一个变址寄存器内容与8位或16位位移量 之和。
1. 通用传送指令: 最基本的传送指令(MOV) 堆栈指令(PUSH,POP) 数据交换指令(XCHG)
(1) MOV指令
指令格式:MOV DST,SRC; 操作:DST SRC
实现CPU的内部寄存器或寄存器与内存间的数据传送 (复制操作). 例: MOV AL, BL;
MOV [DI], AX; MOV CX,[1000H]; MOV BL, 40 MOV WORD PTR[SI],01H; WORD PTR 字长度标记;BYTE PTR 字节长度标记 DWORD PTR 双字长度标记 (伪指令) 标志:所有通用传送指令都不影响标志位。
指令的一般格式
操作数字段可以有一个,二个或三个操 作数,通常称为“一地址”,“二地址” 或 “三地址”指令
操作码 操作数 。。。 操作数
示例
加1指令 INC AX 只需要指出加1的操作数,它是“一地址” 指令。
双操作数指令 ADD AX, BX
大多数运算型指令都是双操作数指令,对 这种指令,有的机器(大中型)使用“三地址” 指令:除给出参加运算的两个操作数外,还要 指出运算结果的存放地址
[BP] 栈顶
存储器
低地址
位移量
[SI]
A(0)
A(1)
…
A(n)
二 8086指令系统概况
1.指令格式
2. 指令执行时间
三. 8086指令系统
可以分为以下六类: 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 转移指令 处理器控制指令
(一)数据传送指令
包括:通用传送指令;累加器专用传送指令; 地址传送指令;标志传送指令;
寻址方式
除以上两种寻址方式外,下面各种寻址 方式的操作数均在存储器中,通过采用不 同的寻址方式取得操作数地址,从而取得 操作数。
(三)直接寻址(Direct
Addressing)
在讨论寻址方式时,通常把操作数的偏移地址
称为有效地址EA (Effective Address) ,EA
可通过不同的寻址方式来得到。