第三章_8086的寻址方式和指令系统[3-3.1]
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令格式:SAL 目的,计数值
(2)SHL逻辑左移指令(Shift Logic Left)
指令格式:SHL 目的,计数值
指令功能:以上两条指令的功能完全相同 ,均将寄存器或存储器中的目 的操作数的各位左移,每移一次,最低有效位LSB补0,而最高有效位
MSB进入标志位CF。
例: MOV AH,06H SAL AH,1 ;AH=06H ;将AH的内容左移1次,AH=?,CF=? ;将DI的内容左移3次 ;将内存单元的字节左移1位
例1: 使AX的CF和OF标志位清0
AND AX, AX 例2:设AL寄存器中存有报警标志。若D7=1,表示温度报警,程序要转到温度
报警处理程序T_ ALARM;D6=1,则转压力报警程序P_ALARM。用TEST指
令来实现这种功能。 解:TEST AL,80H JNZ JNZ T_ALARM P_ALARM TEST AL,40H ;查AL的D7=1? ;是1(非零),则转温度报警程序 ;D7=0,D6=1? ;是1,转压力报警
指令格式:SAR 目的,计数值
指令功能:各位右移。每移位一次,最高位(即符号位)保持不 变,最低位进入CF 。 注意:每移一次,相当于对带符号数进行除2操作。
例:用SAR指令计算-128/8=-16。 解:MOV AL,1000 0000B ;AL=-128 MOV CL,03H SAR AL,CL ;右移次数3 ;算术右移3次后,AL=11110000B=0F0H=-16
共需70~77个T(周期)。 (2)采用移位和加法指令: SAL MOV SAL SAL ADD AL, 1 BL, AL AL, 1 AL, 1 AL, BL ; 2T ; 2T ; 2T ; 2T ; 3T
21
只需11个T(周期),仅相当于乘法的1/7。
§3-3 8086的指令系统
例1:将AL的高4位与低4位互换。
5
§3-3 8086的指令系统
例3: 测试AL的bit7,bit5,bit2是否都是1。 AND AL, 10100100B ;保留bit7,bit5,bit2 CMP AL, 10100100B ;AL与数0A4H比较(CMP的用法) JZ YES ;结果为0,则跳转 …… ;不都是1 YES: … …
指令功能:目的∧源 逻辑与操作,并修改标志位,但不回送结果,两个操作数都不变
指令用途: 常用于位测试,与条件转移指令一起用。
注意: TEST与AND指令的差别 TEST AL, 80H; TEST AX, 0FFFFH ;
AND AL, 80H;
AND AX, 0FFFFH ;
例:测试AL的内容是否为负数。 TEST AL, 80H ;检查AL中D7=1?
解:MOV AL,1000 0101B
MOV CL,03H SHR 运行结果: AL,CL
;AL=133
;CL=移位次数
;右移3次
指令执行后,AL=00010000B=10H=16,余数5被丢失。 标志位CF=1,ZF=0,SF=0,PF=0,OF和AF不定。
15
§3-3 8086的指令系统
(4)SAR算术右移指令(Shift Arithmetic Right)
10
(其中:JNZ为条件转移指令,表示结果不为零则转移)
§3-3 8086的指令系统
2.算术逻辑移位指令(Shift Arithmetic and Shift Logical)
这类指令可对寄存器、存储器中的字或字节的各位进行算术移位或 逻辑移位,移位的次数由指令中的计数值决定。
算术左移指令 SAL(Shift Arithmetic Left)
说明:如果是逻辑右移,除法是无符号的;如果是算术右移,则除法是
带符号的(保持最高位不变,并做符号的扩展)
16
§3-3 8086的指令系统
结果未溢出时:
左移1位≡操作数*2
右移1位≡操作数/2
例: 把AL中的数x乘10(求10x) 10=8+2=23+21
解: SAL AL, 1
; 将AL中数左移1位,得2x
逻辑运算(5条)
NOT
取反
逻辑乘(与) 逻辑加(或) 异或 测试
三、逻辑运算和移位指 令
指令的种类:
(1)逻辑运算 (2)算术逻辑移位 (3)循环移位
AND OR XOR TEST
算术逻辑移位(4条)
SHL/SAL 逻辑/算术左移 SHR SAR ROL ROR 逻辑右移 算术右移
循环移位(4条)
循环左移 循环右移
MOV CL, 4
ROL AL, CL
例2:ROL BX,CL
;BX中的内容不带进位位左移CL中规定的次数
ROR WORD PTR[SI], 1 ;DS×16+SI单元的字不带进位移1次
SAL AL, CL
11
§3-3 8086的指令系统
2.算术逻辑移位指令(Shift Arithmetic and Shift Logical)
移位指令的操作示意图:
CF MSB LSB
0
SHL/SAL 算术/逻辑左移
CF
MSB
LSB
SHR逻辑右移
0
CF
MSB
LSB
SAR算术右移
逻辑移位:把操作数作为无符号数进行移位。右移时,最高位补0;左移时,最
低位补0.
算术移位:把操作数作为有符号数进行移位。右移时,最高位保持不变;左移时,
最低位补0(左移1位时,若最高位(即符号位)发生改变(0→1或1 → 0),则OF=1;未发生改变时,OF =0 ).
12
§3-3 8086的指令系统
(1)SAL算术左移指令(Shift Arithmetic Left)
4
§3-3 8086的指令系统
(2)AND逻辑与指令(Logical AND)
指令格式:AND 目的,源
指令功能:目的目的∧源 指令用途:主要用于使操作数的某些位保留(和“1”相与)
,而使某些位清除(和“0”相与)。
例1:保留AL中低4位,高4位清0。保留AX中低8位,高8位清0? AND AL, 0FH 例2:AL中有字符’a’~’z’, 将其转换成大写。 MOV AL, ‘a’ ; ‘a’~’z’: 61H~7AH AND AL, 01011111B; ‘A’~’Z’:41H~5AH
19
§3-3 8086的指令系统
注意:
循环移位后:结果→目的操作数。
目的操作数可以是8/16位的寄存器、存储器,移位的次数可以 是1,也可以由CL寄存器的值指定。 关于标志位:
(1)ROL和ROR指令没有把进位标志CF包含在循环中;而RCL和RCR指令
把CF作为整个循环的一部分,一起参加循环移位。
例2:把AL的第5位置为1 OR AL, 00100000B
7
§3-3 8086的指令系统
(4)XOR异或操作指令(Exclusive OR)
指令格式:XOR 目的,源
指令功能:目的目的⊕源 指令用途:主要用于使操作数的某些位保留(和“0”相异或),而使某些
位取反(和“1”相异或)。对寄存器清零(自身异或)。
6
§3-3 8086的指令系统
(3)OR逻辑或指令(Logical OR)
指令格式:OR 目的,源
指令功能:目的目的∨源 指令用途:主要用于使操作数的某些位保留(和“0”相或),而使某些位 置位(和“1”相或)。
例1: MOV AX, 3538H AND OR AX, 0F0FH AX,3030H ; AX 0508H ; AX 3538H
JNZ
…… MINUS:
MINUS ;是1(负数),转MINUS (JNZ为条件转移指令,表示ZF=0则转移)
;否则为正数
9
§3-3 8086的指令系统
对AND 、 OR 、XOR和TEST指令的说明:
源操作数可以是8位或16位立即数、寄存器、存储器;
目的操作数只能是寄存器、存储器,两操作数不能同时为存储器; 指令执行后,均将CF和OF清零,ZF、SF和 PF反映操作结果,AF未定义。
算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令 SHL(Shift Logic Left) 逻辑右移指令 SHR(Shift Logic Right)
这4条指令的格式相同,以SAL为例:
SAL mem/reg,
CL
1
;移位位数大于1时
;移位位数等于1时
例: MOV CL, 05H
第三章 8086的寻址方式和指令系统
内容提要
8086的寻址方式
微机系统指令的机器码表示方法
8086的指令系统
1
§3-3 8086的指令系统
6类指令系统:
数据传送指令 算术运算指令 逻辑运算和移位指令 字符串处理指令
控制转移指令
处理器控制指令
2
§3-3 8086的指令系统
13
MOV CL,03H
SHL DI,CL SAL BYTE PTR[BX],1
§3-3 8086的指令系统
注意:ห้องสมุดไป่ตู้
每左移一次,相当于将目的操作数乘以2;
计数值就是所要移位的次数: 若移位一次,直接将计数值置1;
移位次数大于1,将移位次数送进CL,再把CL放在计数值位置上
对标志位的影响: 移位次数为1时,若移位后最高位的值被改变,OF置1,否则OF清 0;而多次移位时,OF的值不确定。 不论移多少次,CF总是等于目的操作数最后被移出去的值。 SF和ZF将根据指令执行后目的操作数的状态来决定,PF只有当目 的操作数在AL中时才有效,AF不定。
例1:把AX寄存器清零。 ① MOV AX, 0
② XOR AX, AX
③ AND AX, 0 ④ SUB AX, AX
例2:把DH的bit4, bit3变反 XOR DH, 00011000B ;即 XOR DH,18H
8
§3-3 8086的指令系统
(5)TEST测试指令(Test)
指令格式:TEST 目的,源
RCL
RCR
通过进位的循环左移
通过进位的循环右移
3
§3-3 8086的指令系统
1、逻辑运算指令(Logical Operations)
(1)NOT取反指令(Logical Not)
指令格式:NOT 目的 指令功能:目的 目的取反 操作数要求: ①可以是8位或16位寄存器、存储器。 ②对于存储器操作,需指明是字还是字节。 注意:指令执行后,对标志位无影响。 例: NOT AX NOT BL NOT BYTE PTR[BX] ;AX AX取反 ;BL BL取反 ;对存储单元字节内容取反后送回该单元
14
§3-3 8086的指令系统
(3)逻辑右移指令(Shift Logic Right)
指令格式:SHR 目的,计数值
指令功能:各位进行右移。每移一次,低位进入CF,最高位补0。 注意:目的操作数为无符号数,每右移一次,目的操作数除以2,余数
被丢掉。
例:用右移的方法作除法133/8=16…5。
MOV BL, AL ; 2x保存到BL,作为加数 MOV CL, 2 ; 移位次数送入CL
SAL AL, CL ; 2x左移2位,得8x ADD AL, BL ; 8x+2x = 10x
17
§3-3 8086的指令系统
3.循环移位指令(Rotate)
算术逻辑移位指令,移出操作数的数位均被丢失。循环移位指令把操 作数从一端移到另一端,移出的位不丢失。循环移位指令共四条: ⑴ ROL循环左移指令(Rotate Left) 指令格式:ROL 目的,计数值 ⑵ ROR循环右移指令(Rotate Right) 指令格式:ROR 目的,计数值 ⑶ RCL通过进位位循环左移(Rotate through Carry Left) 指令格式:RCL 目的,计数值 ⑷ RCR通过进位位循环右移(Rotate through Carry Right) 指令格式:RCR 目的,计数值
18
§3-3 8086的指令系统
循环移位指令操作示意图
CF MSB LSB ROL 循环左移
CF
MSB
LSB
ROR 循环右移
CF
MSB
LSB
RCL 通过进位位的 循环左移
CF
MSB
LSB
RCR 通过进位位 的循环右移
格式同非循环移位指令。
移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中
(2)CF的值总是由最后一次被移出的值决定。 (3)OF位只有在移位次数为1的时候才有效。在移位后最高有效位发生变化
(由1变0或由0变1)时,则OF置1,否则OF置0。在多位循环移位时,OF值不
确定。
20
§3-3 8086的指令系统
用移位操作代替乘除法可提高运算速度:
例:前例中计算x*10。 (1)采用乘法指令: MOV MUL BL, 10 BL
(2)SHL逻辑左移指令(Shift Logic Left)
指令格式:SHL 目的,计数值
指令功能:以上两条指令的功能完全相同 ,均将寄存器或存储器中的目 的操作数的各位左移,每移一次,最低有效位LSB补0,而最高有效位
MSB进入标志位CF。
例: MOV AH,06H SAL AH,1 ;AH=06H ;将AH的内容左移1次,AH=?,CF=? ;将DI的内容左移3次 ;将内存单元的字节左移1位
例1: 使AX的CF和OF标志位清0
AND AX, AX 例2:设AL寄存器中存有报警标志。若D7=1,表示温度报警,程序要转到温度
报警处理程序T_ ALARM;D6=1,则转压力报警程序P_ALARM。用TEST指
令来实现这种功能。 解:TEST AL,80H JNZ JNZ T_ALARM P_ALARM TEST AL,40H ;查AL的D7=1? ;是1(非零),则转温度报警程序 ;D7=0,D6=1? ;是1,转压力报警
指令格式:SAR 目的,计数值
指令功能:各位右移。每移位一次,最高位(即符号位)保持不 变,最低位进入CF 。 注意:每移一次,相当于对带符号数进行除2操作。
例:用SAR指令计算-128/8=-16。 解:MOV AL,1000 0000B ;AL=-128 MOV CL,03H SAR AL,CL ;右移次数3 ;算术右移3次后,AL=11110000B=0F0H=-16
共需70~77个T(周期)。 (2)采用移位和加法指令: SAL MOV SAL SAL ADD AL, 1 BL, AL AL, 1 AL, 1 AL, BL ; 2T ; 2T ; 2T ; 2T ; 3T
21
只需11个T(周期),仅相当于乘法的1/7。
§3-3 8086的指令系统
例1:将AL的高4位与低4位互换。
5
§3-3 8086的指令系统
例3: 测试AL的bit7,bit5,bit2是否都是1。 AND AL, 10100100B ;保留bit7,bit5,bit2 CMP AL, 10100100B ;AL与数0A4H比较(CMP的用法) JZ YES ;结果为0,则跳转 …… ;不都是1 YES: … …
指令功能:目的∧源 逻辑与操作,并修改标志位,但不回送结果,两个操作数都不变
指令用途: 常用于位测试,与条件转移指令一起用。
注意: TEST与AND指令的差别 TEST AL, 80H; TEST AX, 0FFFFH ;
AND AL, 80H;
AND AX, 0FFFFH ;
例:测试AL的内容是否为负数。 TEST AL, 80H ;检查AL中D7=1?
解:MOV AL,1000 0101B
MOV CL,03H SHR 运行结果: AL,CL
;AL=133
;CL=移位次数
;右移3次
指令执行后,AL=00010000B=10H=16,余数5被丢失。 标志位CF=1,ZF=0,SF=0,PF=0,OF和AF不定。
15
§3-3 8086的指令系统
(4)SAR算术右移指令(Shift Arithmetic Right)
10
(其中:JNZ为条件转移指令,表示结果不为零则转移)
§3-3 8086的指令系统
2.算术逻辑移位指令(Shift Arithmetic and Shift Logical)
这类指令可对寄存器、存储器中的字或字节的各位进行算术移位或 逻辑移位,移位的次数由指令中的计数值决定。
算术左移指令 SAL(Shift Arithmetic Left)
说明:如果是逻辑右移,除法是无符号的;如果是算术右移,则除法是
带符号的(保持最高位不变,并做符号的扩展)
16
§3-3 8086的指令系统
结果未溢出时:
左移1位≡操作数*2
右移1位≡操作数/2
例: 把AL中的数x乘10(求10x) 10=8+2=23+21
解: SAL AL, 1
; 将AL中数左移1位,得2x
逻辑运算(5条)
NOT
取反
逻辑乘(与) 逻辑加(或) 异或 测试
三、逻辑运算和移位指 令
指令的种类:
(1)逻辑运算 (2)算术逻辑移位 (3)循环移位
AND OR XOR TEST
算术逻辑移位(4条)
SHL/SAL 逻辑/算术左移 SHR SAR ROL ROR 逻辑右移 算术右移
循环移位(4条)
循环左移 循环右移
MOV CL, 4
ROL AL, CL
例2:ROL BX,CL
;BX中的内容不带进位位左移CL中规定的次数
ROR WORD PTR[SI], 1 ;DS×16+SI单元的字不带进位移1次
SAL AL, CL
11
§3-3 8086的指令系统
2.算术逻辑移位指令(Shift Arithmetic and Shift Logical)
移位指令的操作示意图:
CF MSB LSB
0
SHL/SAL 算术/逻辑左移
CF
MSB
LSB
SHR逻辑右移
0
CF
MSB
LSB
SAR算术右移
逻辑移位:把操作数作为无符号数进行移位。右移时,最高位补0;左移时,最
低位补0.
算术移位:把操作数作为有符号数进行移位。右移时,最高位保持不变;左移时,
最低位补0(左移1位时,若最高位(即符号位)发生改变(0→1或1 → 0),则OF=1;未发生改变时,OF =0 ).
12
§3-3 8086的指令系统
(1)SAL算术左移指令(Shift Arithmetic Left)
4
§3-3 8086的指令系统
(2)AND逻辑与指令(Logical AND)
指令格式:AND 目的,源
指令功能:目的目的∧源 指令用途:主要用于使操作数的某些位保留(和“1”相与)
,而使某些位清除(和“0”相与)。
例1:保留AL中低4位,高4位清0。保留AX中低8位,高8位清0? AND AL, 0FH 例2:AL中有字符’a’~’z’, 将其转换成大写。 MOV AL, ‘a’ ; ‘a’~’z’: 61H~7AH AND AL, 01011111B; ‘A’~’Z’:41H~5AH
19
§3-3 8086的指令系统
注意:
循环移位后:结果→目的操作数。
目的操作数可以是8/16位的寄存器、存储器,移位的次数可以 是1,也可以由CL寄存器的值指定。 关于标志位:
(1)ROL和ROR指令没有把进位标志CF包含在循环中;而RCL和RCR指令
把CF作为整个循环的一部分,一起参加循环移位。
例2:把AL的第5位置为1 OR AL, 00100000B
7
§3-3 8086的指令系统
(4)XOR异或操作指令(Exclusive OR)
指令格式:XOR 目的,源
指令功能:目的目的⊕源 指令用途:主要用于使操作数的某些位保留(和“0”相异或),而使某些
位取反(和“1”相异或)。对寄存器清零(自身异或)。
6
§3-3 8086的指令系统
(3)OR逻辑或指令(Logical OR)
指令格式:OR 目的,源
指令功能:目的目的∨源 指令用途:主要用于使操作数的某些位保留(和“0”相或),而使某些位 置位(和“1”相或)。
例1: MOV AX, 3538H AND OR AX, 0F0FH AX,3030H ; AX 0508H ; AX 3538H
JNZ
…… MINUS:
MINUS ;是1(负数),转MINUS (JNZ为条件转移指令,表示ZF=0则转移)
;否则为正数
9
§3-3 8086的指令系统
对AND 、 OR 、XOR和TEST指令的说明:
源操作数可以是8位或16位立即数、寄存器、存储器;
目的操作数只能是寄存器、存储器,两操作数不能同时为存储器; 指令执行后,均将CF和OF清零,ZF、SF和 PF反映操作结果,AF未定义。
算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令 SHL(Shift Logic Left) 逻辑右移指令 SHR(Shift Logic Right)
这4条指令的格式相同,以SAL为例:
SAL mem/reg,
CL
1
;移位位数大于1时
;移位位数等于1时
例: MOV CL, 05H
第三章 8086的寻址方式和指令系统
内容提要
8086的寻址方式
微机系统指令的机器码表示方法
8086的指令系统
1
§3-3 8086的指令系统
6类指令系统:
数据传送指令 算术运算指令 逻辑运算和移位指令 字符串处理指令
控制转移指令
处理器控制指令
2
§3-3 8086的指令系统
13
MOV CL,03H
SHL DI,CL SAL BYTE PTR[BX],1
§3-3 8086的指令系统
注意:ห้องสมุดไป่ตู้
每左移一次,相当于将目的操作数乘以2;
计数值就是所要移位的次数: 若移位一次,直接将计数值置1;
移位次数大于1,将移位次数送进CL,再把CL放在计数值位置上
对标志位的影响: 移位次数为1时,若移位后最高位的值被改变,OF置1,否则OF清 0;而多次移位时,OF的值不确定。 不论移多少次,CF总是等于目的操作数最后被移出去的值。 SF和ZF将根据指令执行后目的操作数的状态来决定,PF只有当目 的操作数在AL中时才有效,AF不定。
例1:把AX寄存器清零。 ① MOV AX, 0
② XOR AX, AX
③ AND AX, 0 ④ SUB AX, AX
例2:把DH的bit4, bit3变反 XOR DH, 00011000B ;即 XOR DH,18H
8
§3-3 8086的指令系统
(5)TEST测试指令(Test)
指令格式:TEST 目的,源
RCL
RCR
通过进位的循环左移
通过进位的循环右移
3
§3-3 8086的指令系统
1、逻辑运算指令(Logical Operations)
(1)NOT取反指令(Logical Not)
指令格式:NOT 目的 指令功能:目的 目的取反 操作数要求: ①可以是8位或16位寄存器、存储器。 ②对于存储器操作,需指明是字还是字节。 注意:指令执行后,对标志位无影响。 例: NOT AX NOT BL NOT BYTE PTR[BX] ;AX AX取反 ;BL BL取反 ;对存储单元字节内容取反后送回该单元
14
§3-3 8086的指令系统
(3)逻辑右移指令(Shift Logic Right)
指令格式:SHR 目的,计数值
指令功能:各位进行右移。每移一次,低位进入CF,最高位补0。 注意:目的操作数为无符号数,每右移一次,目的操作数除以2,余数
被丢掉。
例:用右移的方法作除法133/8=16…5。
MOV BL, AL ; 2x保存到BL,作为加数 MOV CL, 2 ; 移位次数送入CL
SAL AL, CL ; 2x左移2位,得8x ADD AL, BL ; 8x+2x = 10x
17
§3-3 8086的指令系统
3.循环移位指令(Rotate)
算术逻辑移位指令,移出操作数的数位均被丢失。循环移位指令把操 作数从一端移到另一端,移出的位不丢失。循环移位指令共四条: ⑴ ROL循环左移指令(Rotate Left) 指令格式:ROL 目的,计数值 ⑵ ROR循环右移指令(Rotate Right) 指令格式:ROR 目的,计数值 ⑶ RCL通过进位位循环左移(Rotate through Carry Left) 指令格式:RCL 目的,计数值 ⑷ RCR通过进位位循环右移(Rotate through Carry Right) 指令格式:RCR 目的,计数值
18
§3-3 8086的指令系统
循环移位指令操作示意图
CF MSB LSB ROL 循环左移
CF
MSB
LSB
ROR 循环右移
CF
MSB
LSB
RCL 通过进位位的 循环左移
CF
MSB
LSB
RCR 通过进位位 的循环右移
格式同非循环移位指令。
移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中
(2)CF的值总是由最后一次被移出的值决定。 (3)OF位只有在移位次数为1的时候才有效。在移位后最高有效位发生变化
(由1变0或由0变1)时,则OF置1,否则OF置0。在多位循环移位时,OF值不
确定。
20
§3-3 8086的指令系统
用移位操作代替乘除法可提高运算速度:
例:前例中计算x*10。 (1)采用乘法指令: MOV MUL BL, 10 BL