微机原理与接口技术(3-3).ppt_第1页
微机原理与接口技术(3-3).ppt_第2页
微机原理与接口技术(3-3).ppt_第3页
微机原理与接口技术(3-3).ppt_第4页
微机原理与接口技术(3-3).ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,朱亚萍 杭州电子科技大学自动化学院,微机原理与接口技术,2,3-3 8086的指令系统 逻辑运算和移位指令,三、逻辑运算和移位指令,指令的种类 逻辑运算 算术逻辑移位 循环移位,3,3-3 8086的指令系统 逻辑运算和移位指令,1逻辑运算指令(Logical Operations) NOT取反指令(Logical Not) 指令格式:NOT 目的 指令功能:目的 目的取反 操作数要求: 可以是8位或16位寄存器、存储器。 对于存储器操作,需指明是字还是字节。 注意:指令执行后,对标志位无影响。 例 NOT AX ;AX AX取反 NOT BL;BL BL取反 NOT BYTE PTRBX

2、;对存储单元字节内容取反后送回该单元,4,3-3 8086的指令系统 逻辑运算和移位指令, AND逻辑与指令(Logical AND) 指令格式:AND 目的,源 指令功能:目的目的源 主要用于使操作数的某些位保留(和“1”相与),而使某些位清除(和“0”相与)。 OR逻辑或指令(Logical OR) 指令格式:OR 目的,源 指令功能:目的目的源 主要用于使操作数的某些位保留(和“0”相或),而使某些位置位(和“1”相或)。 例 MOV AX, 3538H AND AX, 0F0FH ; AX 0508H OR AX,3030H;AX 3538H,5,3-3 8086的指令系统 逻辑运算和

3、移位指令, XOR异或操作指令(Exclusive OR) 指令格式:XOR 目的,源 指令功能:目的目的 源 主要用于使操作数的某些位保留(和“0”相异或),而使某些位取反(和“1”相异或) TEST测试指令(Test) 指令格式:TEST 目的,源 指令功能:目的源 逻辑与操作,并修改标志位,但不回送结果,两个操作数都不变。,6,3-3 8086的指令系统 逻辑运算和移位指令,对AND 、 OR 、XOR和TEST指令的说明: 源操作数可以是8位或16位立即数、寄存器、存储器; 目的操作数只能是寄存器、存储器,两操作数不能同时为存储器; 指令执行后,均将CF和OF清零,ZF、SF和 PF反

4、映操作结果,AF未定义。 例 设AL寄存器中存有报警标志。若D71,表示温度报警,程序要转到温度报警处理程序T_ ALARM;D61,则转压力报警程序P_ALARM。用TEST指令来实现这种功能。 解:TEST AL,80H;查AL的D71? JNZ T_ALARM;是1(非零),则转温度报警程序 TEST AL,40H;D70,D61? JNZ P_ALARM;是1,转压力报警,7,3-3 8086的指令系统 逻辑运算和移位指令,2算术逻辑移位指令(Shift Arithmetic and Shift Logical) 这类指令可对寄存器、存储器中的字或字节的各位进行算术移位或逻辑移位,移位

5、的次数由指令中的计数值决定。 移位指令的操作示意图如下:,8,3-3 8086的指令系统 逻辑运算和移位指令, SAL算术左移指令(Shift Arithmetic Left) 指令格式:SAL 目的,计数值 SHL逻辑左移指令(Shift Logic Left) 指令格式:SHL 目的,计数值 指令功能:以上两条指令的功能完全相同,均将寄存器或存储器中的目的操作数的各位左移,每移一次,最低有效位LSB补0,而最高有效位MSB进入标志位CF。 例 MOV AH,06H;AH=60H SAL AH,1;将AH的内容左移1次,AH=0CH MOV CL,03H SHL DI,CL;将DI的内容左移

6、3次 SAL BYTE PTRBX;将内存单元的字节左移1位,9,3-3 8086的指令系统 逻辑运算和移位指令,注意: 移动一次,相当于将目的操作数乘以2; 计数值就是所要移位的次数。 若移位一次,直接将计数值置1; 移位次数大于1,将移位次数送进CL,再把CL放在计数值位置上。 对标志位的影响: 移位次数为1时,若移位后最高位的值被改变,OF置1,否则OF清0。多次移位时,OF的值不确定。 不论移多少次,CF总是等于目的操作数最后被移出去的值。SF和ZF将根据指令执行后目的操作数的状态来决定,PF只有当目的操作数在AL中时才有效,AF不定。,10,3-3 8086的指令系统 逻辑运算和移位

7、指令, 逻辑右移指令(Shift Logic Right) 指令格式:SHR 目的,计数值 指令功能:各位进行右移。每移一次,低位进入CF,最高位补0。 注意:若目的操作数为无符号数,每右移一次,目的操作数除以2,余数被丢掉。 例 用右移的方法作除法1338165。 解: MOV AL,1000 0101B;AL133 MOV CL,03H ;CL移位次数 SHR AL,CL ;右移3次 指令执行后,AL10H16,余数5被丢失。标志位CF、AF不定。,11,3-3 8086的指令系统 逻辑运算和移位指令, SAR算术右移指令(Shift Arithmetic Right) 指令格式:SAR

8、目的,计数值 指令功能:各位右移。每移位一次,最低位进入CF,但最高位(即符号位)保持不变。 注意:每移一次,相当于对带符号数进行除2操作。 例 用SAR指令计算128816。 解:MOV AL,1000 0000B ;AL128 MOV CL,03H ;右移次数3 SAR AL,CL ;算术右移3次后,AL0F0H16,12,3-3 8086的指令系统 逻辑运算和移位指令,3循环移位指令(Rotate) 算术逻辑移位指令,移出操作数的数位均被丢失;循环移位指令把操作数从一端移到另一端,移出的位不丢失。循环移位指令共四条:操作如图所示。 ROL循环左移指令(Rotate Left) 指令格式:

9、ROL 目的,计数值 ROR循环右移指令(Rotate Right) 指令格式:ROR 目的,计数值 RCL通过进位位循环左移(Rotate through Carry Left) 指令格式:RCL 目的,计数值 RCR通过进位位循环右移(Rotate through Carry Right) 指令格式:RCR 目的,计数值,13,3-3 8086的指令系统 逻辑运算和移位指令,循环移位指令操作示意图:,14,3-3 8086的指令系统 逻辑运算和移位指令,注意: 循环移位后:结果目的操作数。 目的操作数可以是8/16位的寄存器、存储器,移位的次数可以是1,也可以由CL寄存器的值指定。 关于标

10、志位:,ROL和ROR指令没有把进位标志CF包含在循环中;而RCL和RCR指令把CF作为整个循环的一部分,一起参加循环移位。 CF的值总是由最后一次被移出的值决定。 OF位只有在移位次数为1的时候才有效。在移位后最高有效位发生变化(由1变0或由0变1)时,则OF置1,否则OF置0。在多位循环移位时,OF值不确定。,15,3-3 8086的指令系统 逻辑运算和移位指令,例 ROL BX,CL;BX中的内容不带进位位左移CL中规定的次数 ROR WORD PTRSI,1 ;DS16SI单元的字不带进位移1次 例 设CF1,AL1011 0100B 若执行ROL AL,1;则AL0110 1001B

11、,CF1,OF1 若执行ROR AL,1;则AL0101 1010B,CF0,OF1 若执行RCR AL,1;则AL1101 1010B,CF0,OF0 若执行MOV CL,3 RCL AL,CL;则AL1010 0110B,CF1,OF不确定,16,3-3 8086的指令系统 字符串处理指令,相关概念 字符串:一系列存放在存储器中的字或字节数据,不管它们是不是ASCII码。字符串长度可达64K字节。 字符串元素:组成字符串的字节或字。每种字符串指令对字符串元素只进行同一种操作。 字符串操作指令:对字符串进行的传送、比较、扫描、存储及装入等5种操作。,四、字符串处理指令,17,3-3 8086

12、的指令系统 字符串处理指令,字符串操作指令的类型和格式,18,3-3 8086的指令系统 字符串处理指令,说明: 每种指令都有3种格式。有两种方法用以说明是字节操作还是字操作。 方法一:用指令中的源串和目的串名(即操作数)来表明是字节还是字; 方法二:在指令助记符后加B说明是字节,加W说明是字操作。,19,3-3 8086的指令系统 字符串处理指令,关于隐合约定: 源串:起始地址(或末地址)为DS:SI。源串允许使用段超越前缀来修改段地址。 目的串:起始地址(或末地址)为ES:DI。目的串不允许使用段超越前缀修改ES。如果要在同一段内进行串运算,必须使DS和ES指向同一段。 指针:每执行一次字

13、符串指令,指针SI和DI会自动修改,以指向下一个待操作单元。,20,3-3 8086的指令系统 字符串处理指令,DF标志:控制字符串处理的方向。 DF0为递增方向。DS:SI指向源串首地址,每执行一次串操作:字节串操作时,SI、DI分别增1;字串操作时,SI和DI分别增2; DF1为递减方向。DS:SI指向源串末地址,每执行一次串操作:字节串操作时减1;字串操作时减2。 STD指令使DF置1,CLD指令将DF清0。 串长度:要处理的字符串长度(字节或字数)放在CX寄存器中。,21,3-3 8086的指令系统 字符串处理指令,关于重复前缀: 功能 在基本指令前加重复前缀,可加快串运算指令的执行速

14、度。每重复执行一次,地址指针SI和DI按方向标志自动修改,CX的值自动减1。 类型与格式 REP:无条件重复(Repeat),常与MOVS连用,连续传送字符串。直到传送完毕,即CX0为止。 REPE/REPZ:相等/结果为零则重复(Repeat while Equal/Zero),常与CMPS连用,连续比较字符串。当两个字符串相等(ZF1)和CX0时,则重复进行比较,直到ZF0或CX0为止。,22,3-3 8086的指令系统 字符串处理指令,REPNE/REPNZ:不相等/结果非零则重复(Repeat while Not Equal/Not Zero),常与SCAS连用,当结果非0(ZF0)和

15、CX0时,重复进行扫描,直到ZF1或CX0为止。 带有重复前缀的串指令执行过程中允许有中断进入。,23,3-3 8086的指令系统 字符串处理指令,1MOVS字符串传送指令(Move String),指令格式:MOVS 目的串,源串 指令功能:SI作指针的源串中的一个字节或字DI作指针的目的串;自动修改指针SI和DI。 应用: 解决MOV指令不能直接在存储单元间进行数据传送的问题。 若使用重复前缀,还可以利用一条指令传送一批数据。 例 要求把数据段中以SRC_MESS为偏移地址的一串字符“HELLO!”,传送到附加段中以NEW_LOC开始的单元中。,24,3-3 8086的指令系统 字符串处理

16、指令,DATA SEGMENT;数据段 SRC_MESS DB HELLO!;源串 DATA ENDS EXTRA SEGMENT;附加段 NEW_LOC DB 6 DUP(?) ;存放目的串 EXTRA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:EXTRA START: MOV AX,DATA MOV DS,AX ;DS数据段段址 MOV AX,EXTRA MOV ES,AX ;ES附加段段址,25,3-3 8086的指令系统 字符串处理指令,LEA SI,SRC_MESS;SI指向源串偏移地址 LEA DI,NEW_LOC;DI指向目的串偏

17、移地址 MOV CX,6;CX作串长度计数器 CLD;清方向标志,地址增量 REP MOVSB ;重复传送串中各字节,直到CX=0 其中“REP MOVSB”指令可用以下几条指令代替: AGAIN:MOVS NEW_LOC, SRC_MESS DEC CX JNZ AGAIN,26,3-3 8086的指令系统 字符串处理指令,2CMPS字符串比较指令(Compare String) 指令格式:CMPS 目的串,源串 指令功能:SI作指针的源串减去DI作指针的目的串数据,结果反映在标志位上;两个数据串的原始值不变;源串和目的串指针自动修改,指向下一对待比较的串。 加重复前缀: REPE/REPZ

18、 CMPS ;直至CX0(比完了)或ZF0(两串不相等)时停止操作。 REPNE/REPNZ CMPS;直至CX0(比完了)或ZF1(两串相等)时停止比较。,27,3-3 8086的指令系统 字符串处理指令,例 比较两个字符串,一个是程序中设定的口令串PASSWORD,另一个是从键盘输入的字符串IN_WORD,若输入串与口令串相同,程序将开始执行。否则,程序驱动PC机的扬声器发声,警告用户口令不符,拒绝往下执行。,这可以用CMPS指令来实现,有关程序段如下: DATA SEGMENT;数据段 PASSWORD DB750424LI;口令串 IN_WORD DB750424LE;从键盘输入的串

19、COUNT EQU 8;串长度 DATA ENDS ,28,3-3 8086的指令系统 字符串处理指令,MOVCX, COUNT;串长度 CLD;地址增量 REPZCMPSB;CX0且串相等时重复比较 JNESOUND;若不相等,转发声程序 OK:;比完且相等,往下执行 SOUND:;使PC机扬声器发声 ;并退出 CODEENDS,CODESEGMENT;代码段 LEASI, PASSWORD;源串指针 LEADI, IN_WORD;目的串指针,29,3-3 8086的指令系统 字符串处理指令,3. SCAS字符串扫描指令(Scan String) 指令格式:SCAS 目的串指令功能:AL/A

20、X(字节/字操作)内容减去ES:DI中的串元素,结果反映在标志位上,源操作数不变,操作后目的串指针会自动修改,指向下一个待搜索的串元素。应用: 利用SCAS指令,可在内存中搜索关键字。指令执行前,必须事先将关键字存在AL(字节)或AX(字)中,才能用SCAS指令进行搜索。 SCAS指令可以加重复前缀。,30,3-3 8086的指令系统 字符串处理指令,例 在某一字符串中搜寻是否有字符A,若有,则把搜索次数记下来,送到BX寄存器中,若没有查到,则将BX寄存器清0。设字符串起始地址STRING的偏移地址为0,字符串长度为CX。 解: MOV DI,OFFSET STRING;DI字符串偏移地址 M

21、OV CX,COUNT;CX字符串长度 MOV AL,A;AL关键字A的A5CII码 CLD;清标志方向 REPNE SCASB ;CX0和ZF=0时重复 JZ FIND;若ZF=1,表示已搜到,转出 MOV DI,0;若ZF=0,表示没搜到,DI 0 FIND:MOV BX,DI;BX搜索次数 HLT,31,3-3 8086的指令系统 字符串处理指令,说明: DI初值存起始地址偏移量0,搜索一次后,DI自动加1,使DI的值等于1; 每执行一次搜索操作,DI自动增1; 因此可用DI的值表示搜索次数。,32,3-3 8086的指令系统 字符串处理指令,4LODS数据串装入指令(Load Stri

22、ng) 指令格式:LODS 源串 指令功能:DS:SI中的串元素 AL/AX(字节/字操作)中,修改SI,以指向串中的下一个元素,修改量遵守隐含约定。 注:该指令加重复前缀意义不大,因为重复传送只能保留最后写入的数据。 5STOS数据串存储指令(Store string) 指令格式:STOS 目的串 指令功能:AL/AX(字节/字操作)的一个字节或字ES:DI所指的目的串;修改DI,以指向串中的下一个单元。 关于重复前缀:“REP STOS” ,可用累加器中的常数,对数据串初始化。如初始化为全0串。,33,3-3 8086的指令系统 字符串处理指令,例 若在数据段中有一个数据块,起始地址为BLOCK,数据块中的数为8位带符号数,要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论