第三章2 8086指令系统(算术逻辑移位)
第3章 8086指令系统2PPT课件
2020/10/31
第三章 8086/8088指令系统
14
(1)MOV指令
是基本传送类指令,实现字或字节数据的复制。 指令格式:MOV dst,src 指令功能:将源操作数src,传送到目的操作数dst中。 如:MOV AL,12H
功能:执行指令就是将立即数12H传送到AL中, 执行完指令后AL=12H。
2020/10/31
第三章 8086/8088指令系统
13
(3)装入附加段寄存器(Load Extra Segment Register)
指令格式:LES dst,src 指令功能 :src给出的是有效地址,低字送dst , 高字送ES。 这条指令用来将内存中的双字数据装入通用寄 存器和附加段寄存器ES。
②立即数送存储单元;
如: MOV [BX],1122H ;将1122H送到EA=BX
;的内存单元中
③通用寄存器之间的传送;
如: MOV BX,AX
;BX=AX
MOV AL,AH
;AL=AH
④通用寄存器和段寄存器之间的传送;
如:MOV DS,AX
;DS=AX
MOV AX,ES
;AX=ES
2020/10/31
2020/10/31
第三章 8086/8088指令系统
15
(1)MOV指令
MOV传送类指令可以实现六种形式的传送:
段寄存器 CS DS ES SS
立即数
存储器
通用寄存器 AX BX CX DX
SI DI SP BP
2020/10/31
第三章 8086/8088指令系统
16
(1)MOV指令
①立即数送寄存器; 如:MOV BX,1122H ;BX=1122H
《微机原理与接口技术》课件——第3章8086指令系统(3-3)
•例如:
• MOV SI,2000H
• MOV DI,3000H
• MOV CX,100 ;CX←传送次数
• CLD ;设置DF=0,实现地址增加
•again: MOVSB ;传送一个字节
• DEC CX ;传送次数减1
• JNZ again ;判断传送次数CX是否为0,不为0,则转
•
移again处执行;
17
§3-3 8086的指令系统 ——字符串处理指令
④DF标志:控制字符串处理的方向。 DF=0为递增方向。DS:SI指向源串首地址,每执行一次 串操作:字节串操作时,SI、DI分别增1;字串操作时,SI 和DI分别增2; DF=1为递减方向。DS:SI指向源串末地址,每执行一次 串操作:字节串操作时减1;字串操作时减2。 STD指令使DF置1,CLD指令将DF清0。 ⑤串长度:要处理的字符串长度(字节或字数)放在CX寄存器 中。
②对于存储器操作,需指明是字还是字节。
注意:指令执行后,对标志位无影响。
例 NOT AX
;AX AX取反
NOT BL
;BL BL取反
NOT BYTE PTR[BX] ;对存储单元字节内容取反
后送回该单元
3
§3-3 8086的指令系统 ——逻辑运算和移位指令
⑵ AND逻辑与指令(Logical AND) 指令格式:AND 目的,源 指令功能:目的目的∧源 有置“0”功能 ⑶ OR逻辑或指令(Logical OR) 指令格式:OR 目的,源 指令功能:目的目的∨源 有置“1”功能。
15
§3-3 8086的指令系统 ——字符串处理指令
四、字符串处理指令
8086CPU提供了串操作指令,使长字符串的处理更快速、
CH3(2) 8086的指令系统
第三章
缩写与符号
意
义
常 用 缩 写 与 符 号 说 明
opr src dst Ac ADDR COUNT DATA MEM MEM/RE ORT RE E A X
操作数 源操作数 目的操作数 累加器。8位用AL,16位用AX 地址。常用标号来表示 计数。1或CL的内容 立即数。8位/16位 存储器操作数 存储器或 存器操作数 /O 号 ~ 存器操作数 用 存器 存器 A X 的内容
至少要有一个opr明确说明传送的是字节还是字 如:MOV [100H],12H MOV WORD PTR[100H],12H
7
第三章
2、堆栈操作指令PUSH、POP PUSH指令 格式:PUSH 源 功能:将源操作数压入堆栈 过程: SP新←SP原-2,(SP新+1,SP新)←源 POP指令 格式:POP 目的 功能:将堆栈中数据弹出至目的操作数 过程:目的←(SP原+1,SP原), SP新←SP原+ 2;
例:MOV CX,6080H MOV AX,CX MOV [1234H],AX
段寄存器 CS,DS,ES,SS
6
第三章
最基本的传送指令 MOV (续) 注意: opr不能为IP 立即数和CS不能作dst 不允许mem←mem 不允许seg←seg 不允许seg←立即数 如:MOV AX,IP MOV CS,AX 用AX作桥梁 如:MOV AX,SS MOV DS,AX
1、下列指令是否有错,错在哪儿? a. MOV BL,CX b. MOV [BX],[DI] c. MOV AL,[BX][SI] d. OUT 20H , BX e. MOV SI,[DX] 2、请为下列每项任务选择一条指令: a. 将BX的内容复制到DX中 b. 将BL的内容复制到CL中 c. 将12H送入AL中 d. 将1000H送入SI中
微机原理第三章 8086的寻址方式和指令系统ppt课件
4、寄存器间接寻址方式 (Register Indirect Addressing)
EA在指定的寄存器中,只能是基址BX、BP,变址SI、 DI四者之一。 MOV AX, [DX] (非法)
默认关系:SS:BP, DS:BX、SI、DI 可进行段超越,如 MOV AX,DS:[BP]
• 根据有效地址EA〔Effective Address〕的构成 方式,存储器寻址分为以下五种:
• 段寄存器使用的基本约定 •
3、直接寻址方式(Direct Addressing) EA就在指令中,默认段寄存器为DS 如:MOV AX,[2000H] 设DS=3000H 则EA=2000H,PA=DS×16+EA=32000H, 操作数来自32000H〔或3000H:2000H处),结果AX=3514H
例如: MOV AX,COUNT[BX][SI] MOV AX,COUNT[BX+SI] MOV AX,[BX+SI+COUNT]
以上三者等价
如 MOV AX,MASK[BX][SI] 设DS=4100H,位移量MASK=0134H,BX=2500H,SI=1200H 则EA=(BX)+(SI)+MASK=3834H,PA= (DS)
• 8086的指令按功能可分为六大类:数据传送指令、 算术运算指令、逻辑运算和移位指令、字符串处 理指令、控制转移指令、处理器控制指令。
一、数据传送指令:负责数据在寄存器、存储器、I/O端口 之间的传递,特点是不影响标志位。
1.通用数据传送指令 (1) MOV 传送指令〔Move) 格式:MOV 目的,源;(源)→(目的)
第三章 8086的指令系统()PPT课件
7、串寻址(String addressing)
串寻址方式仅在8086的串指令中 使用。规定源操作数的逻辑地址为 DS:SI;目的操作数的逻辑地址为 ES:DI。当执行串指令的重复操作时, 根据设定的方向标志(DF),SI和 DI会自动调整。
8、I/O(输入/输出)端口寻址 (I/O port addressing)
2、MOV数据传送指令
其格式为:
MOV 目的操作数,源操作数
目的操作数和源操作数均可采用不 同的寻址方式,但两个操作数的类 型必需一致。
二、寻址方式介绍
1.立即寻址(Immediate addressing) 操作数就在指令中,紧跟在操作码后
面,作为指令一部分存放在内存的代 码段中,这种操作数称为立即数。
1、通用数据传送指令
1)、MOV 传送指令 指令格式为: MOV 目的 ,源
2)PUSH 进栈指令
指令格式为:PUSH 源操作数 其操作过程是: a、SP-1,
指示堆栈中可以存放数据的位置,存源 操作数的高8位; 。
3)POP 出栈指令
指令格式为:POP 目的操作数
一、8086的操作码
指令由操作码和操作数(地址码) 组成。8086的指令长度是可变的,一 条指令一般由1-6个字节组成(加上 前缀字节,最长可为7字节)。
二、8086指令中寄存器的编码
8086指令中通常使用一个或两个 操作数,在少数指令中有隐含的第三 个操作数。
三、指令中的操作数
1、单指令操作数
当操作数在外部设备时,使用I/O指令。 此时有两种不同的寻址方式访问I/O端口。 (1) 直接端口寻址方式。 (2) 采用寄存器间接寻址方式 (3) 输入指令中目的操作数可为AL或
AX;输出指令中源操作数可为AL或AX。 例:
8086算术、逻辑运算及移位指令
8086算术、逻辑运算及移位指令8086是一种基于x86架构的微处理器,具有广泛应用的能力。
它支持多种算术、逻辑运算和移位指令,这些指令为编程人员提供了强大的工具来处理数据和操纵位级操作。
算术指令是8086中非常重要的一部分。
它们允许我们对数据执行各种加减乘除运算。
例如,ADD指令用于对两个数进行加法运算,这通常用于求和操作。
而SUB指令则用于执行减法运算,可用于计算差值。
MUL和DIV指令则用于执行乘法和除法操作,它们对于处理需要大量数值计算的应用程序非常有用。
逻辑运算指令也是8086中的重要组成部分。
它们用于执行与、或、非和异或等逻辑运算。
AND指令用于执行位级与运算,可以对数据的每个位进行逻辑与操作。
OR指令执行逻辑或运算,可以通过将各个位进行逻辑或操作来组合数据。
NOT指令用于执行位级非运算,将数据的每个位取反。
XOR指令执行异或运算,可以对数据的位进行逻辑异或操作。
这些逻辑运算指令非常灵活,可用于编写各种数据处理和逻辑判断的算法。
移位指令允许我们在数据的二进制位级上进行操作。
8086提供了逻辑左移、逻辑右移、算术左移和算术右移指令。
逻辑左移指令将数据在二进制位级上向左移动,相当于乘以2。
逻辑右移指令将数据在二进制位级上向右移动,相当于除以2。
算术左移和算术右移指令与逻辑移位指令类似,但在进行移位时保留了最高位的符号位,以保持有符号整数的正负性。
这些运算和移位指令在编程中起着至关重要的作用。
通过巧妙地组合使用这些指令,我们可以实现各种复杂的计算和逻辑操作。
例如,我们可以使用算术和移位指令来实现高效的乘法和除法算法,减少计算时间和资源消耗。
我们还可以使用逻辑指令来处理数据的位级运算,例如检查某一位是否为1、设置某一位为1或将某一位清零。
为了更好地理解这些指令的功能和用法,编程人员需要深入学习和实践。
通过掌握8086的算术、逻辑和移位指令,我们可以编写更高效和功能强大的程序,提高计算机应用的性能和效率。
2_第3章 8086指令系统_加减运算指令比较指令52
3.4.2 算术运算指令
算术运算指令涉及两种类型数据,即无符号数和有符号数 对加法指令和减法指令而言,无符号和有符号数可采用同
一套指令,其先决条件有两个: 一是参加的操作数必须同为无符号数或同为有符号数 二是要采用不同标志位来检查无符号数和有符号数的 运算结果是否溢出
而乘除运算指令则需要区分无符号数和有符号数
11 11
ADC指令的使用价值
主要用于由于数据较大(多字节),需要多次运算的加法 运算中。 例:有两个4字节的无符号数相加:
2D568F8CH+3C9E489BH=? 设 被加数存放在BUF1开始的存储区内
加数存放在BUF2开始的存储区内 要求和放回BUF1存储区 假设CPU进行8位的加法运算,为此将进行4次加法运算
.386
……
MOVZX AX, A
MOVZX BX, B
ADD
AX, BX
MOVZX BX, C
ADD
AX, BX
MOV
SUM, AX
;取第一个数,扩展0传送 ;取第二个数 ;加第二个数 ;取第三个数 ;加第三个数 ;保存三个数的和
20 20
[例] P,Q,R均为8位有符号数,求它们的和,送入TOTAL
这个问题的另一种方法:
MOV AL, A
;取第一个数
MOV AH, 0
;高8位清零,准备存放和的高8位
ADD AL, B
;加第二个数
ADC AH, 0
;如果有进位,存入AH
ADD AL, C
;加第三个数
ADC AH, 0
;如果有进位,加入AH
MOV SUM, AX ;保存三个数的和
19 19
这个问题的第三种方法:
第3章 8086的指令系统—3.2.3逻辑运算和移位指令
OR AL,71H
;AL=71H ;CF=OF=0,SF=0,ZF=0,PF=1 ;AL=80H ;CF=OF=0,SF=1,ZF=0,PF=0 ;AL=7FH,标志不变
XOR AL,0F1H NOT AL
例2 逻辑运算指令的应用
AND BL,11110110B ;BL中D0和D3清0,其余位不变 OR BL,00001001B ;BL中D0和D3置1,其余位不变 XOR BL,00001001B ;BL中D0和D3求反,其余位不变
AND指令可用于复位某些位(同0相与),不影响其他位 OR指令可用于置位某些位(同1相或),不影响其他位
XOR指令可用于求反某些位(同1相异或),不影响其他位
2. 移位指令
将操作数移动一位或多位,分成逻辑移位 和算术移位,分别具有左移或右移操作 移位指令的第一个操作数是指定的被移位 的操作数,可以是寄存器或存储单元;后 一个操作数表示移位位数:
只有相“与”的两位 都是1,结果才是1;否 则,“与”的结果为0
逻辑或指令OR
对两个操作数执行逻辑或运算,结果送目的操作数 OR dest,src ;dest←dest∨src
只要相“或”的两位 有一位是1,结果就是1; 否则,结果为0
逻辑异或指令XOR
对两个操作数执行逻辑异或运算,结果送目的操作数 XOR dest,src ;dest←dest⊕src
第3章
3.2.3 逻辑运算和移位指令
位操作类指令以二进制位为基本单位进行数据的 操作 当需要对字节或字数据中的各个二进制位操作时, 可以考虑采用位操作类指令 注意这些指令对标志位的影响
1. 逻辑运算指令 AND OR XOR NOT TEST 2. 移位指令 SHL SHR SAR 3. 循环移位指令 ROL ROR RCL RCR
第3章 8086指令系统(2)PPT课件
;暂存于CL
SAL AL,1
;X*4
SAL AL,1
;X*8
ADD AL,CL
;(x*2)十(x*8)
4
2.逻辑右移指令SHR
格式:SHR dst, CL/1 功能:reg/mem右移1/CL位;最高位补0,最低位进入CF 其余同 SAL/SHL
dst
CF
0
SHR
例如: SHR BYTE PRT 100[SI],CL
3)
②(CX)←(CX)-1;
4)
③执行后跟的串操作指令;
5)
④重复①~③。
REP前缀可以理解为:当数据串没有结束(CX≠0),则 继续传送。
13
2) REPE/REPZ 相等/结果为0 (ZF=1)时重复
指令功能:若CX≠0,且ZF=1,重复执行,CX←CX-1,
若CX=0,或 ZF=0,执行下一条指令。
可用于数的移位,或实现简单乘2运算
3
例:用移位指令实现快速乘法:
求y=10x=(2*x)+(8*x)<(255)。
用乘法指令实现,花时间长(70~77时钟周期)。若用移位和 寄存器加指令实现,则使执行时间减少很多。设数X已存于AL中, 其程序段如下:
SAL AL,1
;左移一位,x*2
MOV CL,AL
一般用于比较指令和搜索指令,表示只有当两数相等方可 继续比较;若遇到两数不相等时,则可提前结束串操作。即当 数据串没有结束(CX≠0),并且串相等(ZF=1),则继续比 较.
3.5 移位指令和循环移位指令
3.5.1 移位指令 移位指令:算术左、右移指令SAL、SAR
逻辑左、右移指SHL、SHR。
格式 SHL src,CL1/1 SAL src,CL/1 SAR src,CL/1 SHR src, CL/1
8086的指令系统2
8
例1. MOV AL,’B’ 将字符B的ASCII码(42H)传送到AL寄存器中; 例2. MOV AX,DATA MOV DS,AX 设DATA为数据段的段地址值,这两条指令将数据段 的段地址值DATA送入DS寄存器。
DATA是一个16位立即数,不能被直接送进DS,需要 先送入另一个数据寄存器,然后从该数据寄存器传送 到DS。程序的开始放入上述两条指令后,DS就指向 当前数据段,对数据段所有数据进行存取时,就不用 考虑这些数据所在位置的段地址了。
13
(3)POP 出栈指令 指令格式:POP 目的 指令功能:把当前SP所指向的堆栈顶部的一个 字送到指定的目的操作数中。 出栈过程和入栈过程恰好相反。 具体依次过程: ① 16位操作数弹出堆栈,至目的操作数中 ② SP+2→SP
14
例 设SS=2000H,SP=40H, BX=3120H,AX=25FEH, 依次执行下列指令:PUSH BX PUSH POP AX BX
AREA10000H 经过汇编后,DATA将被赋予一个 AREA20002H 具体的段地址,而各变量将自偏移 地址0000H开始依次存放,各符号 地址也被赋予确定的值,等于它们 在数据段中的偏移量。例如,上述 ARRAY0005H 的数据段经汇编之后占用存储空间 的情况如右图所示。可见, AREAl 的偏移地址为0000H, AREA2 的偏移地址为0002H, ARRAY的偏移地址为0005H等。 STRING****H
19
执行该指令之前,需要先执行两条指令: MOV BX, 事先建立的表的偏移首地址
MOV AL, 待转化码 ;表头地址和要查找项之间位移量
XLAT 将BX和AL中的值相加,得到的值作为地址,然后 将此地址对应的单元中的值取到AL中。 该指令不能单独执行,故有时也称复合指令。
第3章_8086指令系统
EA =
(BX) (BP)
+
(SI)
(DI)
同一组内的寄存器不能同时出现。
寻址的寄存器为BX时,默认的段寄存器为DS ; 寻址的寄存器为 BP时,默认的段寄存器为SS 。 例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
立即数只能作为源操作数
MOV AX,0FA00H MOV 8000H,DX ;正确 ;错误
• 2、寄存器操作数
存放在8个通用寄存器或4个段寄存器中的操作数
AX BX CX DX
AH BH CH DH
AL BL CL DL
可以存放8位或 16位操作数
SI DI BP SP
只能存放16位操作数
CS
DS ES SS
61200
AX AH AL
61200H
44H 33H
数 据 段
寄存器相对寻址
EA=间址寄存器的内容加上一个8/16位的位移量
(BX)
EA =
(BP) (SI) (DI)
+
8位
16位
位移量
寻址的寄存器为BX、SI、DI,默认的段寄存器为DS ;
寻址的寄存器为 BP时,默认的段寄存器为SS 。
例: MOV AX, [BX+8] MOV CX, TABLE[SI] MOV AX, [BP+16H] ;
数 据 段
基址-变址-相对寻址
在基址-变址寻址的基础上再加上一个相对位移量 注意事项同基址-变址寻址
第03章8086的指令系统.
MOV BX,2000H
立即
寄存器
MOV DX,DASS[BX]
基址
寄存器
MOV [DI],BX
寄存器 寄存器间址或变址
SUB AX,[BX][SI]
基址+变址 寄存器
ADD AX,[DI+64H] MOV AX,[BP+10]
变址 基址
寄存器 寄存器
MOV AX,ES:[BX]
带段超越寄存器 寄存器
基址、AL变址的寻址方式,表的起 始地址的偏移量应事先装入BX寄存 器, AL中存放查找对象在表中地址 与表起始地址相差的字节数。
例:以下指令序列把S_TAB表的第10个字节送入AL。
MOV AL,9
;9 AL
MOV BX,OFFSET S_TAB;表首址 BX
XLAT
;[BX+AL] AL
3. 目标地址传送指令
段地址规定为DS段寄 存器的内容。
变址寻址方式常用于 存取表格或一维数组中的 元素。
AX的内容为40000H+2000H+0010H=42010H和42011H单元的
内容,⑺前一基个在址低+8位变,后址一寻个在址高方8位式。
课堂练习: 假设DS=4000H,CS=0000H,SS=2000H, ES=1000H,SI=0010H,DI=0100H,BX=0200H, COUNT=2000H,问下列指令执行后,寄存器AX、 AH的内容如何? MOV AX,COUNT[SI] MOV AH,[BX+DI+1234H]
(1)输入指令IN 格式:IN 累加器,端口 例:IN AL,21H;将端口21H的8位数读到AL中
MOV DX,201H IN AX,DX ;将端口201H和202H的16位数
第3章 8086指令系统
例如:MOV AX , [BX]
默认情况下,数据在DS段或SS段中,由间址寄存器决定; 物理地址PA = (DS) × 16 + (BX/SI/DI)
2017年3月13日星期一
;DS段 ;SS段
19
物理地址PA = (SS) × 16 + (BP)
寄存器间接寻址方式执行示意
地址加法器
该指令源操作数的寻址方式为寄存器相对寻址方式;
有效地址EA=(SI) + 100H =2445H,默认为DS段; 物理地址PA = (DS) × 16 + EA = 1000H ×16 + 2445H = 12445H
……
所以,该指令执行后 (BX) = (12445H) =2715H 12445H 15H
2017年3月13日星期一 5
3、示例指令
数据传送指令
MOV <目的操作数>,<源操作数> 指令功能 使用源操数的值为目的操作数赋值; 指令执行完,目的操作数的值与源操作数一样;
源操作数不变,目的操作数改变;
例如: MOV AX , 2 MOV AX , BX MOV AX , [BX]
∑ PA 20位
AH AL 1200H BH BL CH CL DH DL SP BP SI DI
通用寄存器 CS DS DS SS ES IP 内部暂存器 16位 输入/输出 控制电路 外 部 总 线
主存储器
1234H
16位
……
ALU
执行部 分控制 电路
12 3 4 5 8位 6 指令队列缓冲器
MOV AX , [BX]
第3章 8086指令系统
课件:第3章 8086指令系统_乘除逻辑移位指令59
VERB用DD定义
格式3:IMUL 目的操作数,源操作数1,源操作数2 目的操作数: 16位/32位的寄存器 源操作数1:与目的操作数相同类型的寄存器/存储器 源操作数2:与目的操作数相同类型的立即数 功能: 目的操作数←源操作数1×源操作数2 说明: • 两个N位操作数相乘,得到N位的乘积; • 本指令的操作数不能为8位。 • 对于IMUL指令,除8/16位的单操作数指令外,其余均为 286/386新增的,需要在程序的首部用“.386”加以申明。
CF=OF=1
除法指令
(3)DIV(Unsigned Division):无符号除法
格式:DIV 源操作数
第3章 8086指令系统
3.4 通用指令
1.概述 Intel 8086指令系统共有117条基本指令,按照指令功能, 可分位6类指令: ① 数据传送类指令。 ② 算术运算指令。 ③ 逻辑移位指令。 ④ 串操作指令。 ⑤ 控制转移指令。 ⑥ 处理机控制类指令。
3.4.2 算术运算指令
例:多字节的乘法 编写程序实现无符号数相乘,把缓冲区里存放的一个 24位被乘数和一个8位乘数相乘,结果保存在32位的 存储空间中(24位的数与8位的数的乘积不会超过32 位)。
【例】已知(AX)= 16A5H,(BX)= 0611H,求执行指令 IMUL BL和MUL BX后的乘积值。
IMUL BL ;(AX) (AL)×(BL) ;A5×11 5B×11=060B F9F5 ;(AX) = 0F9F5H CF=OF=1
MUL BX ;(DX, AX) (AX)× (BX) ;16A5×0611=0089 5EF5 ;(DX)=0089H (AX)=5EF5H
第3步:按F10运行此程序,运行到完成MOV DS,AX 指令时,结果如图所示。
第三章8086指令系统
DI
例: MOV AX, COUNT[SI] 或 MOV AX, [COUNT+SI] 假设DS=3000H, SI=2000H, COUNT=3000H 那么 PA = 35000H 指令功能:将35000H开始的两个单元内容送AX
(4)基址变址寻址
BX
有效地址EA
=
BP
SI
+
DI
MOV AX, [BX+SI] ;AX←DS:[BX+SI]
MOV BYTE PTR[SI],50H
MOV BYTE PTR[SI+6],51H
法2:
MOV AX,2000H
MOV DS,AX
MOV BL,50H
MOV BH,51H
MOV DS: [1000H],BL
MOV DS: [1006H],BH
例:交换BUF1和BUF2两单元的内容。
MOV MOV
寄存器间接寻址
寄存器 相对寻址
PA=DS×16+BX或SI或DI
MOV AX, [BX]
仅允许 PA=SS ×16+BP
PA=DS×16+BX或SI或DI+位移量
; (AX)←((DS)×16+(BX)) MOV AL, MESS[SI]
PA=SS×16+BP+位移量
;AL←(DS×16+SI+OFFS ET MESS)
§3-2 数据传送类指令
• 通用数据传送指令 • 地址传送指令 • 标志寄存器传送指令
一、通用数据传送指令
提供方便灵活的通用传送操作
有4种指令
MOV
PUSH POP
XCHG
第3章 8086指令系统(2)
8086/8088指令系统按其功能分为以下类型:数 据传送指令、地址传送指令、标志寄存器传送 指令、算术运算指令、逻辑运算指令、移位指 令、控制转移指令、串操作指令、中断指令和 处理器控制指令。
一.数据传送指令
数据传送指令用于寄存器、存储单元、或输入
输出端口之间传送数据或地址。8086/8088有14
CMP AL,100
29
CMP指令执行后对标志位的影响
操作数类型
带符号的 二进制
CF ZF SF OF
两操作数的关系
01 0 0
等于
-010
小于
- 0 0 1 目的操作数 小于 源操作数
-000
大于
-011
大于
不带符号的 二进制
01 0 0
等于
10 -
- 目的操作数 低于 源操作数
00 -
-
高于
举例: n=8 bit 带符号数(-128~127), 无符号数(0~255)
PUSH AX
PUSH DX
78H
POP AX
56H
POP DX
34H
12H
9
(4)XCHG指令 格式:XCHG OP1,OP2 操作:源、目的操作数之间交换一个字节 或字的数据。源操作数或目的操作数只能 取通用寄存器或通用寄存器与存储器 例: XCHG AX,CX
XCHG AL,BL XCHG AX,[BP+DI]
中的数相乘,结果放在累加器中
乘积为双字节长时,结果放在AX中;乘积为双 字长时,分别放在DX(乘积的高16位)和AX中。 该指令的运行结果只影响标志位CF和OF 例:MOV AL,FIRST
MUL SECOND MOV THIRD,AX (2)IMUL指令 格式:IMUL SRC 该指令为带符号数相乘指令
微机原理第三章 8086寻址和指令系统
4、查表转换指令 XLAT 指定表首地址→BX;表元素号→AL 查表结果((BX)+(AL)) →AL 例:若十进制数字0~9 的 LED七段显示码对照表已存放在内存中, 表格的首地址为TABLE,用 XLAT 指令求数字5的七段显示码 值程序如下: TABLE DB 40H, 79H, 24H, 30H, 19H ; 建立七段显示码表格 DB 12H, 02H, 78H, 00H, 18H OFFSET是运算符 MOV AL,5 ; AL 5 MOV BX,OFFSET TABLE ; BX 表格首地址 XLAT ; AL 12H
AAA
非压缩十进制加法BCD调整(8bit) CF、OF、PF、SF、ZF
8bit(0×) 加 法 后 , AL 中 的 非 压 缩 BCD 码 → AH(0+ 拾 位)AL(0+个位)。 例: MOV BL,09H MOV AL,05H ADD AL,BL AAA ;非压缩BCD码 ; ;(AX)=0104H 09 05 (AL)=0 EH AAA调整 (AX)=0 1 0 4H
指令
基址寄存器
disp
&
EA 内存 操作数
基址 (BX) (SI) (DI) (BP)
EA=
+disp 段寄存器DS(即操作数在数据段)
+disp 段寄存器SS (即操作数在堆栈段)
指令
基址寄存器
disp
&
EA
内存 操作数
基址
EA=
(BX) (SI) (DI) (BP)
+disp 段寄存器DS(即操作数在数据段) +disp 段寄存器SS (即操作数在堆栈段)
第三章 8086寻址和指令系统
第3章 8086指令系统3-算术运算指令
1、加法指令
1、加法指令
(1)不带进位位的加法指令 ADD(Addition) ADD OPRD1,OPRD2 操作:OPRD1 OPRD1+OPRD2 例如: ADD AL,50H ADD CX,1000H ADD DI,SI ADD [BX+DI],AX ADD 20H[BX] , 30H
4
IMUL OPRD e.g: IMUL CL IMUL CX IMUL BYTE PTR [DI] IMUL WORD PTR [SI]
22
第3章 8086指令系统
3、乘法指令
说明:
两个8位操作数相乘(其中一个在AL中): 结果为16位AX; 两个16位操作数相乘(其中一个在AX中): 结果为32 位 AX,DX;其中 DX看成是 AX的扩展, 结果的高16位放入DX中,低 中 低16位放在AX中
19
第3章 8086指令系统 ………..
2、减法指令
MOV BX,OFFSET BLOCK MOV AX,[BX] INC BX INC BX MOV CX,99 AGAIN:CMP AX,[BX] JNC NEXT MOV AX,[BX] NEXT: INC BX INC BX DEC CX JNZ AGAIN MOV MAX,AX ;MAX单元存放最大值
…… 20
第3章 8086指令系统
3、乘法指令
3、乘法指令
(1)无符号数的乘法指令 MUL(Multiply (M lti l accumulator l t
by register-or-memory;unsigned)
MUL OPRD 操作 AX=AL*OPRD(字节),DX:AX=AX*OPRD 操作: DX:AX=AX*OPRD(字)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
乘法例: 设(AL) = FAH(-06H=-6),(BL) = 11H(+11H=+17)
看成补码的值 看成补码的值
(1)
IMUL BL
(2)
MUL BL
; (AX) (AL)×(BL) ; FAH×11 H -6×+17=-102 FF9AH ; 结果 (AX) = FF9AH CF=OF=0 ; (AX) (AL)×(BL) ; FAH×11 H 250×17= 425 01A9H ;结果(AX) = 01A9H CF=OF=1
ADD (02H),(00H) ADD (02H),(01H) MOV AL,[00H] ADD AL,[01H]
MOV [02H],AL
问题: ADD AL,1 与 INC AL指令有何异同点? 同:都是AL内容加1,除CF外对其他的标志影响相同。 异:ADD 对CF有影响,指令代码长、执行慢,可产生进位; 而INC 对CF没影响,指令代码短、执行快,适合循环计数。
p.88 [例](6条加指令样例)→
Increment 增量、增加;
[3.3.2]
1. 加法指令
[例]: • ADD AX , 500H • ADD [BX+SI] ,AX • ADC AX , BX • ADC DX,[BX] • INC BX • INC BYTE PTR [BX]
执行后,AH及有关标志是什么?
; 取 Z ;扩展 Z →(DX,AX) ; (x*y)+z →(BX,CX) ;
CX, AX BX, DX
CX, 540 ; (x*y+z)-540 →(BX,CX) BX, 0
IDIV
X
; (x*y+z-540)/x→(AX) 余数→(DX)
[3.3.2]
5. 十进制调整指令 •对于BCD码采用二进制运算存在每四位间逢十进一 与逢十六进一的差异,需要进行调整后才能得到规格 相同的BCD码结果
汇编 功能说明 格式 DAA 对AL中压缩BCD码加法结果调整,最高位进位记CF DAS 对AL中压缩BCD码减法结果调整,最高位借位记CF AAA 对AL中非压缩BCD码加法结果调整,D3进位对AH加1 AAS 对AL中非压缩BCD码减法结果调整,D3借位对AH减1 AAM 对AL中非压缩BCD码乘法结果调整,十位送AH 二进制积拆成字 AAD 对AX中非压缩BCD码被除数调整为二进制,再DIV得00~09 •参算的BCD码规格必须相同,且运算结果为字节在AL中; •运算与调整指令之间状态标志不得被改变; •由于数字0~9的ASCII码可按非压缩BCD码运算调整
Divide 除
算术运算综合例: x , y , z 均为16位带符号数,计算(x*y + z – 540 ) / x
MOV IMUL AX, X Y ; x*y →(DX,AX) ;
MOV MOV
MOV CWD ADD ADC SUB SBB
CX, AX BX, DX
AX, Z
;部分积→(BX,CX)
BCD码调整原理:
0000 +0000 0001 这个1代表了16, +0000 而实际上仅应为 10,即多进了6, 0001
应该补6。
计算8+9 见右式
1000 计算8+4 1001 0001 = 11? 0110 0111 = 17
0000 +0000 0000 +0000 0001
1000 0100 1100 加6促其 0110 逢10进一 0010 =12
加法例3:将7000H:10H与7000H:20H中的连续四个单元 中的四字节数内容相加存放到7000H:30H起始的单元中。 MOV AX,7000H ;设数据段寄存器 MOV DS,AX MOV BX,10H ;设地址指针 MOV SI,20H MOV DI,30H MOV AX,[BX] ;低二字节相加并保存 ADD AX,[SI] MOV [DI],AX MOV AX,[BX+2] ;高二字节及低字的进位相加并保存 ADC AX,[SI+2] MOV [DI+2],AX MOV AX ,0 ADC AX , 0 MOV [DI+4],AX ;获得最高位的进位并保存于第五单元
3.3 8086指令系统
—— 3.3.2 算术运算指令
加、减、乘、除四种及相 关调整指令
3.3.2 算术运算指令
1. 加法指令(加、带进位加、加1)
ADD、 ADC 、INC
2. 减法指令(减、带进位减、减1 )
SUB、SUBB、DEC、NEG、CMP
3. 乘法指令(无符号数、带符号数乘法)
MUL、IMUL
乘法指令对CF/OF的影响:(表征有效乘积超半长)
( 对其余状态位的影响不确定)
MUL指令: CF/OF =
0/0 1/1
乘积的高一半为零 否则(无符号数的积超半长) 乘积的高一半是低一半的符号扩展 否则(补码的积超半长)
0/0 IMUL指令: CF/OF = 1/1
Multiplication 乘法、相乘
;
;
(x+y+24)-z
结果存入W, W+2字单元
[3.3.2]
3.乘法指令
;字节则 (AX)(AL)×(SRC) ;字则 (DX, AX) (AX)×(SRC) MUL imm/mem/reg 隐含操作数
无符号数乘法: MUL SRC
带符号数乘法: IMUL SRC ; (同MUL) (补码乘法) IMUL imm/ mem/reg
例: 08 × 09 ÷4= MOV AL,08H MOV BL,09H MUL BL ; (AX)=(AL)×(BL)=08 × 09=72=48H AAM ; (AL)/0AH= 48H /0AH→ 07H余02H MOV BL,4 AAD ; (AX) →(AH) ×0AH+(AL)=48H DIV BL ; (AL) = (AX)/(BL)=48H/4=12H ;超单字节非压缩的BCD码,商为二进制 AAM ; 利用AAM调整得双字节非压缩的BCD码 ;(AL)/0AH=12H/0AH=01H余08H
BCD码调整规则: BCD码加/减运算某四位组结果 出现A~F或向上有进/借位 则应对该四位组进行加/减6调整
p.94-96 [例]X4 1、3 简
BCD调整例1: 实现ASCII码相加:‘5’+‘9’ 程序段如下: MOV AH,0 ;(AH)=00H MOV AL, ‘5’ ;(AL)=35H ADD AL,‘9’ ;(AL)=35H+39H=6EH,AF=0 AAA ;调整(AH)=01H,(AL)=04H
4. 除法指令(无符号数、带符号数除法,补码扩展)
DIV、IDIV、CBW、CWD
5. 十进制调整指令(BCD码加法、减法结果调整)
DAA、DAS,AAA、AAS、AAM、AAD
(3-1)
(3-2)
(3-3)
[3.3.2]
1. 加法指令
加法:ADD DST, SRC ;(DST) (DST) + (SRC) ADD acc , imm ADD mem/reg , imm ADD mem/reg1 , reg2 / mem 带进位加:ADC DST, SRC ; (DST) (DST) + (SRC) + CF (类同ADD) 加最低位 加1指令: INC OPR ; (OPR) (OPR) + 1 (增量指令) INC mem/reg •除INC指令不影响CF标志外,均对状态标志位有影响; •可8位或16位运算,两操作数类型要匹配。
[3.3.2]
2. 减法指令
减法:SUB DST, SRC ;(DST) (DST) - (SRC) SUB acc , imm SUB mem/reg , imm SUB mem/reg1, reg2 / mem 减借位加:SBB DST, SRC ; (DST) (DST) - (SRC) - CF (类同SUB) 最低位减 减 1 指令:DEC OPR ; (OPR) (OPR) - 1 (减量指令) DEC mem/reg 求补指令: NEG OPR ; (OPR) 0 - (OPR) (求反加一) NEG mem/reg 比较指令: CMP DST, SRC ;(DST) - (SRC),不存,只产生标志 (类同SUB) •除INC指令不影响CF标志,两操作数类型(8b/16b)要匹配。 •对字节-128求补或对字-32768求补时OF=1,否则OF=0。
3.3.3-3.3.4 逻辑运算和移位指令
1. 逻辑运算指令(按位逻辑运算)
AND、 OR 、NOT、XOR、TEST 逻辑运算指令用于测试并判断数据位的情况。
无符号数除法: DIV SRC
带符号数除法: IDIV SRC ; (同DIV) (补码除法) IDIV imm/ mem/reg
字节补码扩展: CBW 字补码扩展: CWD ; AL符号扩展到AH ; AX符号扩展到DX
•若除数为零或AL中商大于FFH(或AX中商大于FFFFH),则 CPU产生一个类型0的内部中断(Divide overflow ) ; •除法指令对所有状态标志位均无定义。
例:把3AH转换成等值的非压缩的BCD码。 MOV AL,3AH ;58 AAM ;调整:58/10=05余08 ;结果(AH)=05H,(AL)=08H
ห้องสมุดไป่ตู้
BCD调整例3:按十进制除法计算55÷7=? 程序段如下: MOV AX, 0505H ;(AX)=55BCD MOV CL, 07H ;(CL)= 7 AAD ;(AX)=0037H(调整成二进制于AL) DIV CL ;余数(AH)=6,商(AL)=7 所得结果为非压缩的BCD码(商7余6)。