《微机原理与接口技术》课件——第3章8086指令系统(3-3)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•例如:
• 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提供了串操作指令,使长字符串的处理更快速、
方便。共有5条串操作指令和3条重复前缀指令。
➢字符串操作指令的类型和格式
指令名称
字节/字操作
MOVS 目的串,源 字符串传送 串
字符串比较 CMPS 目的串,源 字符串扫描 串 字符串装入 SCAS 目的串
微机原理与接口技术
1
§3-3 8086的指令系统 ——逻辑运算和移位指令
三、逻辑运算和移位指令
指令的种类
逻辑运算 算术逻辑移位 循环移位
逻辑运算
NOT
取反
AND
逻辑乘(与)
OR
逻辑加(或)
XOR
异或
TEST 测试
算术逻辑移位
SHL/SAL 逻辑/算术左移
SHR
逻辑右移
SAR
算术右移
循环移位
ROL
循环左移
例 MOV AX, 3538H AND AX, 0F0FH OR AX,3030H
; AX 0508H ;AX 3538H
4
§3-3 8086的指令系统 ——逻辑运算和移位指令
⑷ XOR异或操作指令(Exclusive OR) 指令格式:XOR 目的,源 指令功能:目的目的∨ 源 有取反功能(和“1”相异或)
•若移位一次,直接将计数值置1; •移位次数大于1,将移位次数送进CL,再把CL放在计数值 位置上。
9
§3-3 8086的指令系统 ——逻辑运算和移位指令
⑶ 逻辑右移指令(Shift Logic Right)
指令格式:SHR 目的,1/CL
指令功能:各位进行右移。每移一次,低位进入CF,最高位
补0。
令共四条:操作如图所示。
⑴ ROL循环左移指令(Rotate Left)
指令格式:ROL 目的,1/CL
⑵ ROR循环右移指令(Rotate Right)
指令格式:ROR 目的,1/CL
⑶ RCL通过进位位循环左移(Rotate through Carry Left)
指令格式:RCL 目的,1/CL
⑴ SAL算术左移指令(Shift Arithmetic Left)
指令格式:SAL 目的,1/CL
⑵ SHL逻辑左移指令(Shift Logic Left)
指令格式:SHL 目的,1/CL
指令功能:以上两条指令的功能完全相同,均将寄存器或
存储器中的目的操作数的各位左移,每移一次,最低有效
位LSB补0,而最高有效位MSB进入标志位CF。
字节操 作
字操作
MOVSB MOVSW CMPSB CMPSW SCASB SCASW LODSB LODSW16
§3-3 8086的指令系统 ——字符串处理指令
➢ 关于隐合约定: ①源串:起始地址(或末地址)为DS:SI。源串允许使用段超
越前缀来修改段地址。 ②目的串:起始地址(或末地址)为ES:DI。目的串不允许使 用段超越前缀修改ES。如果要在同一段内进行串运算,必 须使DS和ES指向同一段。 ③指针:每执行一次字符串指令,指针SI和DI会自动修改, 以指向下一个待操作单元。
SI±1/2→SI DI±1/2→DI
例如:比较从逻辑地址2000H:100H开始的10个字节与逻辑地址4000H: 200H开始的10个字节是否对应相等,相等则设置00h标记,否则设置FFH 标记。 • MOV DS,2000H • MOV ES,4000H • MOV SI,100H ; • MOV DI,200H; • MOV CX,10 • CLD • again: CMPSB ;比较两个字符 • JNZ unmat ;有不同字符,转移到unmat • DEC CX • JNZ again ;进行下一个字符的比较 • MOV AL,0 ;字符串相等,设置00h标记 • JMP output ;转向output •Unmat : MOV AL,0FFH ;设置FFH标记
⑷ RCR通过进位位循环右移(Rotate through Carry Right)
指令格式:RCR 目的,1/CL
12
§3-3 8086的指令系统 ——逻辑运算和移位指令
循环移位指令操作示意图:
CF
MSB
LSB
ROL 算 算 算 算
CF
MSB
LSB
ROR 算 算 算 算
CF
MSB
LSB
CF
MSB
•
。。。 否则Байду номын сангаас继续。
2.CMPS字符串比较指令(Compare String)
格式: CMPSB CMPSW
功能: CMPSB是将DS:SI逻辑地址所指存储单元的字节与 ES:DI逻辑地址所指的存储单元中的字节相比较, 当DF=0,SI和DI均增1;当DF=1,SI和DI均减1。
CMPSW是将DS:SI逻辑地址所指存储单元的字与 ES:DI逻辑地址所指的存储单元中的字相比较,当 DF=0,SI和DI均增2;当DF=1,SI和DI均减2。 即:[DI] -[SI]
Equal/Zero),常与CMPS连用,连续比较字符串。当两个字 符串相等(ZF=1)和CX≠0时,则重复进行比较,直到ZF=0 或CX=0为止。
19
§3-3 8086的指令系统 ——字符串处理指令
REPNE/REPNZ:不相等/结果非零则重复(Repeat while Not Equal/Not Zero),常与SCAS连用,当结果非0(ZF=0) 和CX≠0时,重复进行扫描,直到ZF=1或CX=0为止。
解:MOV AL,1000 0000B ;AL=-128
MOV CL,03H
;右移次数3
SAR AL,CL ;算术右移3次后,AL=0F0H=-16
11
§3-3 8086的指令系统 ——逻辑运算和移位指令
3.循环移位指令(Rotate)
算术逻辑移位指令,移出操作数的数位均被丢失;循环移位
指令把操作数从一端移到另一端,移出的位不丢失。循环移位指
这类指令可对寄存器、存储器中的字或字节的各位进行算 术移位或逻辑移位,移位的次数由指令中的计数值决定。
移位指令的操作示意图如下:
CF
MSB
LSB
0 SHL/SAL 算 算 / 算 算 算 算
CF
0
MSB
LSB
SHR算 算 算 算
CF
MSB
LSB
SAR算 算 算 算
7
§3-3 8086的指令系统 ——逻辑运算和移位指令
3. SCAS字符串扫描指令(Scan String)
格式:SCASW SCASB
功能:SCASB /SCASW在字符串中查找一个与已知数值相同 或 不同的元素。 SCASB将AL中的字节与逻辑地址ES:DI所指单元中的字 节相比较。当DF=0,DI增1;当DF=1,DI减1。 SCASW将AX中的字与逻辑地址ES:DI所指单元中的字 相 比较,当DF=0,DI增2;当DF=1,DI减2。 该两条指令都是通过影响标志位AF、CF、OF、PF、SF 和ZF来反映比较结果,不改变被比较的两个操作数。
⑸ TEST测试指令(Test) 指令格式:TEST 目的,源 指令功能:目的∧源 逻辑与操作,并修改标志位,但不回送结果,两个操作数都 不变。
5
§3-3 8086的指令系统 ——逻辑运算和移位指令
例 设AL寄存器中存有报警标志。若D7=1,表示温度报警, 程序要转到温度报警处理程序T_ ALARM;D6=1,则转压力 报警程序P_ALARM。用TEST指令来实现这种功能。
注意:若目的操作数为无符号数,每右移一次,目的操作数
除以2,余数被丢掉。
例 用右移的方法作除法133/8=16…5。
解: MOV AL,1000 0101B
;AL=133
MOV CL,03H
;CL=移位次数
SHR AL,CL
;右移3次
指令执行后,AL=10H=16,余数5被丢失。标志位CF、
AF不定。
LSB
RCL 算 算 算 算 算 算算算算算
RCR 算 算 算 算 算 算算算算算
13
§3-3 8086的指令系统 ——逻辑运算和移位指令
注意: 循环移位后:结果→目的操作数。 目的操作数可以是8/16位的寄存器、存储器,移位的次数可 以是1,也可以由CL寄存器的值指定。
14
例如:计算a×3+b×7 MOV SI,a SHL SI,1 ADD SI,a MOV DX,b MOV CL,03h SHL DX,CL ADD DX,b ADD DX,SI 请分析! 该程序段有错吗?
ROR
循环右移
RCL
通过进位的循环左移
RCR
通过进位的循环右移
2
§3-3 8086的指令系统 ——逻辑运算和移位指令
1.逻辑运算指令(Logical Operations)
⑴ NOT取反指令(Logical Not)
指令格式:NOT 目的
指令功能:目的 目的取反
操作数要求:
①可以是8位或16位寄存器、存储器。
10
§3-3 8086的指令系统 ——逻辑运算和移位指令
⑷ SAR算术右移指令(Shift Arithmetic Right) 指令格式:SAR 目的,1/CL 指令功能:各位右移。每移位一次,最低位进入CF, 但最高位(即符号位)保持不变。 注意:每移一次,相当于对带符号数进行除2操作。
例 用SAR指令计算-128/8=-16。
18
§3-3 8086的指令系统 ——字符串处理指令
➢ 关于重复前缀: ①功能 在基本指令前加重复前缀,可加快串运算指令的执行速度。 每重复执行一次,地址指针SI和DI按方向标志自动修改, CX的值自动减1。 ②类型与格式 REP:无条件重复(Repeat),常与MOVS连用,连续传 送字符串。直到传送完毕,即CX=0为止。 REPE/REPZ:相等/结果为零则重复(Repeat while
带有重复前缀的串指令执行过程中允许有中断进入。
20
1.MOVS字符串传送指令(Move String)
格式:MOVSB MOVSW
功能:MOVSB是将DS:SI逻辑地址所指存储单元的字节传送到 ES:DI逻辑地址所指的存储单元中,当DF=0,SI和DI均增 1;当DF=1,SI和DI均减1。 MOVSW是将DS:SI逻辑地址所指存储单元的字传送到 ES:DI逻辑地址所指的存储单元中,当DF=0,SI和DI均增 2;当DF=1,SI和DI均减2。 即:[SI] →[DI] SI±1/2→SI DI±1/2→DI
解:TEST AL,80H ;查AL的D7=1? JNZ T_ALARM ;是1(非零),则转温度报警程序 TEST AL,40H ;D7=0,D6=1? JNZ P_ALARM ;是1,转压力报警
6
§3-3 8086的指令系统 ——逻辑运算和移位指令
2 . 算 术 逻 辑 移 位 指 令 ( Shift Arithmetic and Shift Logical)
例 MOV AH,06H ;AH=60H
SAL AH,1
;将AH的内容左移1次,AH=0CH
MOV CL,03H
SHL DI,CL
;将DI的内容左移3次
SAL BYTE PTR[BX] ;将内存单元的字节左移1位8
§3-3 8086的指令系统 ——逻辑运算和移位指令
注意: ▲移动一次,相当于将目的操作数乘以2; ▲计数值就是所要移位的次数。