1 / 150

微型计算机原理

及接口技术. 微型计算机原理. 授课教师:. 3 . 3 .3 逻辑运算与移位指令. 8086/8088CPU 的指令系统提供 8 位和 16 位的逻辑运算与移位指令有 3 组. 逻辑运算指令 AND/OR/XOR/NOT/TEST 移位指令 SHL/SHR/SAL/SAR 循环移位指令 ROL/ROR/RCL/RCR. 3 . 3 .3 逻辑运算与移位指令. 一、逻辑运算指令. 8086/8088CPU 的逻辑运算指令有 AND 、 OR 、 XOR 、 TEST 、 NOT 5 条指令。

ima
Download Presentation

微型计算机原理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 及接口技术 微型计算机原理 授课教师:

  2. 3.3.3逻辑运算与移位指令 8086/8088CPU的指令系统提供8位和16位的逻辑运算与移位指令有3组 • 逻辑运算指令 AND/OR/XOR/NOT/TEST • 移位指令 SHL/SHR/SAL/SAR • 循环移位指令 ROL/ROR/RCL/RCR

  3. 3.3.3逻辑运算与移位指令 一、逻辑运算指令 8086/8088CPU的逻辑运算指令有AND 、OR、XOR、TEST、NOT 5条指令。 以上5条除NOT对标志位不产生影响; 其余均产生影响:这些指令根据各自逻辑运算的结果都将影响SF、ZF、和PF,同时AF的值不确定。

  4. 注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF、PF,对AF无定义。注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF、PF,对AF无定义。 3.3.3逻辑运算与移位指令 一、逻辑运算指令 1、与运算指令AND 指令格式及操作 AND DST ,SRC;(DST) ( DST )Λ(SRC)

  5. 3.3.3逻辑运算与移位指令 AND的指令可以屏蔽某些不关心的位(该位置0),保留一些有用的位。为了做到这一点,只需把要屏蔽位和“0”进行逻辑位,而将保留的位与“1”进行逻辑与即可。

  6. 3.3.3逻辑运算与移位指令 2、或运算指令OR OR DST ,SRC; (DST) ( DST )V(SRC) 注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF、PF,对AF无定义。

  7. 3.3.3逻辑运算与移位指令 OR常见用途:把某些特定的位 置1。方法:把要置1的位与1按位逻辑或;不改变的位与0按位逻辑或。

  8. 3.3.3逻辑运算与移位指令 OR与AND的共性:如果寄存器与其自身内容进行逻辑与操作,或进行逻辑或操作,寄存器内容不变,但逻辑运算结果影响SF、ZF、PF标志位,且将CF清0。 利用这个特性,可以在数据传送指令之后,进行逻辑运算以影响标志位,然后可以判断数据的正负、是否为0,以及数据的奇偶性等。

  9. 3.3.3逻辑运算与移位指令 3、异或运算指令XOR 指令格式及操作 XOR DST ,SRC; (DST) ( DST )⊕(SRC) 注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF、PF,对AF无定义。

  10. 3.3.3逻辑运算与移位指令 XOR常见用途一:寄存器某些特定的位“求反”,而使其余的位不变。因此‘求反’的位与1‘异或’;不变的位与0进行“异或”。 MOV AL ,0FFH ; XOR AL,55H; AL=10101010B, 55H=01010101B

  11. 3.3.3逻辑运算与移位指令 XOR常见用途二:寄存器内容清0 XOR AX,AX; XOR BX ,BX;在初始化时,将寄存器清0 如: 0010 1001B = AX XOR)0010 1001B = AX 0000 0000B

  12. 3.3.3逻辑运算与移位指令 XOR常见用途三:用来测试某一操作数是否与另操作数相等,例如检查AX的内容是否等于0F00H,若相等则转MATCH去执行,否则顺序执行。程序段如下: XOR AX,0F00H; JZ MATCH ;JZ为跳转指令 表示AX为0时转移 :

  13. 3.3.3逻辑运算与移位指令 4、测试指令TEST 指令格式及操作 TEST DST ,SRC; ( DST ) &(SRC) DST:可以为寄存器操作数、存储器操作数 SRC:可以为寄存器操作数、存储器操作数、立即数 指令功能:目标操作数与源操作数按位“逻辑与”运算,结果不送回目标操作数。置CF=0,OF=0;对其他标志没有定义。

  14. 3.3.3逻辑运算与移位指令 TEST指令用于位的测试,它与条件转移指令一起,共同完成对特定位的状态的判断,并实现相应程序的的转移。 与CMP有些类似,CMP比较两个操作数,TEST比较特定的位。 测试方法:要测试操作数的的某些位是否为0,只需要把TEST的源操作数设置成一个立即数,其中需要测试的位设为1。

  15. 3.3.3逻辑运算与移位指令 MOV AL,40H; TEST AL, 0AH ; JNZ NEST;JNZ为跳转指令 表示ZF=0时转移 : NEST:…..

  16. 3.3.3逻辑运算与移位指令 5、取反指令 NOT 指令格式及操作 NOT OPR ; (OPR) (OPR) OPR:除了立即数以外的各种寻址方式 的操作数、寄存器。 指令功能:对操作数按位取反。NOT指令是一条逻辑“非”指令,只有一个操作数,可以是8位,也可以是16位的存储器或寄存器。 对标志位没有影响。

  17. 3.3.3逻辑运算与移位指令 分析指令功能 NOT AL ; NOT DX NOT BYTE PTR 0002H[BX ] NOT WORD PTR [BX+SI]

  18. 3.3.3逻辑运算与移位指令 二、移位指令(shift) 对应同一条机器指令 8086/8088 CPU有4条移位指令。 算术左移指令SAL逻辑左移指令SHL 算术右移指令SAR 逻辑右移指令SHR 功能:用来实现对寄存器或存储单元的8位或16位数据的移位,指令移位操作可以是向左或向右移一位,也可以是多位,移多位时,规定移位的次数必须放在CL寄存器中。

  19. 3.3.3逻辑运算与移位指令 1、逻辑左移指令 SHL /算术左移指令 SAL 指令格式: SHL(SAL) OPR,CNT; 只影响CF、OF两个标志位。 OPR:通用寄存器或存储器操作数 CNT:可为1,或CL,CL中放移位的次数。 指令功能:操作数左移1位或CL规定的位数,最低位补0, 最高位进CF。

  20. 3.3.3逻辑运算与移位指令 逻辑左移指令 SHL /算术左移指令 SAL D15/D7 D0 CF MSB LSB 0 SHL/SAL指令示意图 SHL/SAL功能完全一样,因为对一个无符号数乘以2和对一个有符号数乘以2没有什么区别。 在左移位数为1的情况下,如果最高位与CF不同,则溢出标志OF=1,这对带符号数可以判断移位前后的符号位不同;反之,如果最高位与CF相同,则溢出标志OF=0,这表示移位前后符号位没有改变。 在移位次数为多次,则OF值不确定。

  21. 3.3.3逻辑运算与移位指令 分析指令功能 SHL AL ; SHL CL; SHL WORD PTR [BX+100],1 左移1位相当于乘2,因此可以代替某些常数的运算,并且速度很快。 分析170书中例3.11

  22. 3.3.3逻辑运算与移位指令 2、逻辑右移指令 SHR 指令格式: SHR OPR,CNT; 只影响CF、OF两个标志位。 OPR:通用寄存器或存储器操作数 CNT:可为1,或CL,CL中放移位的次数。 指令功能:操作数右移1位或CL规定的位数,最低位进CF。 最高位补0,

  23. 3.3.3逻辑运算与移位指令 逻辑右移指令 SHR D15/D7 D0 0 MSB LSB CF SHR指令示意图 在右移位数为1的情况下,移位后如果最高位与次高位不相等,则溢出标志OF=1,否则0F=0,这表示符号位在移位前后有没有改变。 在移位次数为多次,则OF值不确定。

  24. 3.3.3逻辑运算与移位指令 分析指令功能 SHR AL ,1 ; SHR AX,CL; SHR BYTE PTR[BX+SI]; SHR WORD PTR BUFFER,CL 逻辑右移1位相当于无符号数除以2,因此可以代替某些常数的运算,并且采用移位指令比除法指令时执行速度要快得多。

  25. 3.3.3逻辑运算与移位指令 [例3.12 ]将一个16位无符号数除以512,结果仍放回原单元。该数原来存放在以TDATA 为首地址的两个连续的存储单元中。 分析: TDATA 512=( TDATA 2 ) 256 因此用逻辑右移完成上述除法运算。编程如下: MOV AX,TDATA SHR AX,1 XCHG AL,AH;右移8位,商放AL中。 AND AX, 00FFH MOV TDATA ,AX HLT

  26. 3.3.3逻辑运算与移位指令 4、算术右移指令 SAR D15/D7 D0 CF MSB LSB SAR指令示意图

  27. 3.3.3逻辑运算与移位指令 SAR AL ,1 SAR AX, CL SAR WORD PTR 100[SI],1 SAR BYTE PTR DATA[SI+BX],CL 算术右移1位,相当于带符号数除以2 MOV AX,0064H SAR AX,1

  28. 3.3.3逻辑运算与移位指令 三、循环移位指令( rotate shift) 8086/8088 CPU有4条循环移位指令。 不带进位标志CF的左循环移位指令ROL 不带进位标志CF的右循环移位指令ROR 带进位的左循环移位指令RCL 带进位的右循环移位指令RCR 循环移位指令的操作数与移位指令相同。

  29. 3.3.3逻辑运算与移位指令 1、循环左移指令ROL(rotate left) 只影响CF、OF两个标志位。 指令格式: ROL OPR,CNT; 指令功能:操作数向左循环移1位或CL规定的位数,最高位移进CF,同时最高位移进最低位形成循环,进位标志不在循环回路之内。

  30. CF MSB LSB ROL指令操作示意图 ROL指令影响CF、OF两个标志位。 在循环移位为1的情况下,移位后如果最高位与CF不相等,则溢出标志OF=1,否则OF=0,因此OF的值表示符号位在移位前后有没有改变。 在移位次数为多次,则OF值不确定。

  31. 分析指令功能 ROL AH ,1 ROL BX ,CL ROL WORD PTR[DI],CL ROL BYTE PTR [BX],1

  32. 3.3.3逻辑运算与移位指令 2、循环右移指令ROR(rotate right) 只影响CF、OF两个标志位。 指令格式: ROR OPR,CNT; 指令功能:操作数向右循环移1位或CL规定的位数,最低位移进CF,同时最低位移进最低位形成循环,进位标志不在循环回路之内。

  33. CF MSB LSB 3.3.3逻辑运算与移位指令 2、循环右移指令ROR(rotate right) ROR指令操作示意图 ROR指令影响CF、OF两个标志位。 在循环移位为1的情况下,移位后如果新的最高位与次高位不等,则溢出标志OF=1,否则OF=0。 在移位次数为多次,则OF值不确定。

  34. 分析指令功能 ROR BX,1 ROR AX, CL ROR BYTE PTR [BX],1 ROR WORD PTR[DI],CL

  35. CF MSB LSB RCL指令操作示意图 3.3.3逻辑运算与移位指令 3、带进位循环左移指令RCL(rotate left through carry) 指令格式: RCL OPR,CNT; 指令功能:将目标操作数连同进位标志CF一起向左循环移动一位或由CL寄存器指定的位数。最高位移入进位标志CF ,而CF移入最低位。

  36. 3.3.3逻辑运算与移位指令 3、带进位循环左移指令RCL(rotate left through caary) RCL AX,1 RCL AH,,CL RCL WORD PTR[DI],1 RCL BYTE PTR [SI+BP],CL 分析指令功能 RCL指令影响CF、OF两个标志位。 在循环移位次数为1的情况下,左移位后如果新的最高位与CF不等,则溢出标志OF=1,否则OF=0。 在移位次数为多次,则OF值不确定。

  37. CF MSB LSB RCR指令操作示意图 3.3.3逻辑运算与移位指令 4、带进位循环左移指令RCR(rotate right through caary) 指令格式: RCR OPR,CNT; 指令功能:将目标操作数连同进位标志CF一起向右循环移动一位或由CL寄存器指定的位数。最低位移入进位标志CF ,而CF移入最高位。

  38. 3.3.3逻辑运算与移位指令 RCR AH,1 RCR DI,CL RCR BYTE PTR[BX],1 RCR WORD PTR [SI+BX],CL 分析指令功能

  39. 3.3.3逻辑运算与移位指令 4条循环移位指令rotate与 4条移位指令shift比较 1、循环移位指令,使得各个位的信息不丢失,只是移动到其他位或进位标志CF上,必要时可以恢复。 2、利用循环移位指令可以对任何一位进行测试。 例如:测试AL的第6位是0还是1? MOV CL, 2 ROL AL,CL JNC ZERO ;CF=0,转ZERO : ZERO :

  40. 3.3.4 串操作指令 数据串(数据块):在内存区域内连续存放着若干个字节(或若干个字)数据(或字符的ASCII码),这样的一组数据称为数据串(数据块)。 字节串:若每个数组元素是字节型,则为字节串。 字串:若给个数组元素是字型,则称字串。

  41. 3.3.4 串操作指令 8086/8088 CPU有一组十分有用的串操作指令,这些指令的操作对象不只是单个字节或字,而是内存中地址连续的字节串或字串。每次操作后能自动修改地址为下一次操作作好准备。 串操作指令有8条,其中5条为基本操作指令,3条为重复前缀串操作指令。

  42. 3.3.4 串操作指令 串操作指令格式各不相同,但有以下共同特点: (1)可以对字节串进行操作,也可以对字串进行操作。 (2)串操作指令用SI寄存器寻址源操作数,用DI寻址目标操作数,源操作数的隐含段寄存器为DS,但允许但超越;目标操作数隐含的段寄存器ES,但不允许段超越。 (3)每一次操作后修改地址指针是增还是减量取决于方向标志DF。DF=0,地址指针自动增量修改,DF=1,地址指针自动减量修改。因此每次串操作指令执行前都要设置DI、SI,并把数组元素的个数设置在CX中。

  43. 3.3.4 串操作指令 (4)有的串操作指令可以加重复前缀REP,可使串操作重复进行到结束,重复循环的次数由寄存器CX决定,其执行过程相当于一个循环程序的运行,重复执行后DI、SI都被自动修改。但指令指针IP仍保持指向前缀的地址,直至寄存器CX的内容为0,则退出串操作指令。 (5)串操作汇编指令的格式可以 写上操作数,也可以在指令操作数后加字母‘B’或“W”。加上字母“B”“W”后指令助记符后面不允许写操作数。 (6)串操作指令可以与重复前缀指令结合,进行多次重复操作。

  44. 3.3.4 串操作指令 一、串传送指令 MOVS (MOVE string ) 指令格式及操作: MOVS DST ,SCR;(ES:DI) (DS:SI) DF=0,增址; DF=1,减址; 指令功能:将一个字节串或字串从DS段由SI指向存储器某一区域传送到位于ES由DI所指向存储器的另一个区域,然后根据方向DF自动修改地址指针SI和DI。

  45. 3.3.4 串操作指令 MOVSB ;字节传送操作,( (ES:DI) (DS:SI) SI SI + 1,DI DI +1 ) MOVSW ;字节传送操作,( (ES:DI) (DS:SI) SI SI + 1,DI DI +1 ) 若方向标志位DF=0,取“+”号;DF=1,取“—”号。 该指令不影响标志位

  46. 90H 78H 56H 34H 12H 00H 00H 00H 00H 00H 3.3.4 串操作指令 一、串传送指令 MOVS (MOVE string )

  47. 3.3.4 串操作指令 一、串传送指令 MOVS (MOVE string ) 第一种方法

  48. 3.3.4 串操作指令 二、存储数据串指令 STOS (store string) 指令格式及操作: STOS SCR;(ES:DI) AX/AL 也可以表示为字节或字存储形式: STOSB ;字节存储数据串指令及操作: (ES:DI) AL,DI DI+1 STOSW ;字存储数据串指令及操作: (ES:DI) AX,DI DI+2

  49. 3.3.4 串操作指令 指令功能:将累加器AX或AL的值送到ES段由DI所指字符串的内存单元中,并且自动修改地址指针。若方向标志DF=0,取“+”号;DF=1,取“—”号。 注释:1)经常用来初始化一段内存区域。 2)串为目的操作数。 3)不影响标志。

  50. 3.3.4 串操作指令

More Related