第三章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
- 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)。