第三章2 8086指令系统(算术逻辑移位)

合集下载

第3章 8086指令系统2PPT课件

第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)

《微机原理与接口技术》课件——第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的指令系统

CH3(2) 8086的指令系统
2
第三章
缩写与符号


常 用 缩 写 与 符 号 说 明
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课件

微机原理第三章 8086的寻址方式和指令系统ppt课件
①寻址方式不同; ②用DW定义,COUNT单元中的内容可修改,用EQU定义, COUNT为常数。
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课件

第三章 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算术、逻辑运算及移位指令8086是一种基于x86架构的微处理器,具有广泛应用的能力。

它支持多种算术、逻辑运算和移位指令,这些指令为编程人员提供了强大的工具来处理数据和操纵位级操作。

算术指令是8086中非常重要的一部分。

它们允许我们对数据执行各种加减乘除运算。

例如,ADD指令用于对两个数进行加法运算,这通常用于求和操作。

而SUB指令则用于执行减法运算,可用于计算差值。

MUL和DIV指令则用于执行乘法和除法操作,它们对于处理需要大量数值计算的应用程序非常有用。

逻辑运算指令也是8086中的重要组成部分。

它们用于执行与、或、非和异或等逻辑运算。

AND指令用于执行位级与运算,可以对数据的每个位进行逻辑与操作。

OR指令执行逻辑或运算,可以通过将各个位进行逻辑或操作来组合数据。

NOT指令用于执行位级非运算,将数据的每个位取反。

XOR指令执行异或运算,可以对数据的位进行逻辑异或操作。

这些逻辑运算指令非常灵活,可用于编写各种数据处理和逻辑判断的算法。

移位指令允许我们在数据的二进制位级上进行操作。

8086提供了逻辑左移、逻辑右移、算术左移和算术右移指令。

逻辑左移指令将数据在二进制位级上向左移动,相当于乘以2。

逻辑右移指令将数据在二进制位级上向右移动,相当于除以2。

算术左移和算术右移指令与逻辑移位指令类似,但在进行移位时保留了最高位的符号位,以保持有符号整数的正负性。

这些运算和移位指令在编程中起着至关重要的作用。

通过巧妙地组合使用这些指令,我们可以实现各种复杂的计算和逻辑操作。

例如,我们可以使用算术和移位指令来实现高效的乘法和除法算法,减少计算时间和资源消耗。

我们还可以使用逻辑指令来处理数据的位级运算,例如检查某一位是否为1、设置某一位为1或将某一位清零。

为了更好地理解这些指令的功能和用法,编程人员需要深入学习和实践。

通过掌握8086的算术、逻辑和移位指令,我们可以编写更高效和功能强大的程序,提高计算机应用的性能和效率。

2_第3章 8086指令系统_加减运算指令比较指令52

2_第3章 8086指令系统_加减运算指令比较指令52
4
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逻辑运算和移位指令

第3章 8086的指令系统—3.2.3逻辑运算和移位指令
;CF=OF=0, SF=0,ZF=0,PF=1
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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)。
相关文档
最新文档