微机原理第三章5_第1页
微机原理第三章5_第2页
微机原理第三章5_第3页
微机原理第三章5_第4页
微机原理第三章5_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 8086/8088指令系统微型计算机系统原理及应用微型计算机系统原理及应用Institute of Electrical Engineering3.3.3 逻辑运算和移位指令逻辑运算和移位指令11、逻辑运算指令、逻辑运算指令 NOT OPRD (逻辑非运算逻辑非运算) AND OPRD1, OPRD2 (逻辑与运算逻辑与运算) OR OPRD1, OPRD2 (逻辑或运算逻辑或运算) XOR OPRD1, OPRD2 (异或运算异或运算) TEST OPRD1, OPRD2 (位检测运算位检测运算)2逻辑运算指令特点逻辑运算指令特点 以上五种逻辑运算指令中,以上五种逻辑运算指令中,NO

2、T不允许使用立即不允许使用立即数数,其它,其它4条指令的源操作数可以是立即数。此条指令的源操作数可以是立即数。此外,至少有一个操作数必须存放在寄存器中,另外,至少有一个操作数必须存放在寄存器中,另一个操作数则可以使用任意寻址方式。一个操作数则可以使用任意寻址方式。 它们对标志位的影响情况是,它们对标志位的影响情况是,NOT指令不影响标指令不影响标志位,志位,其它其它4种指令将使种指令将使CF和和OF为为0,AF位无定位无定义,而义,而SF、ZF和和PF则根据运算结果设置。则根据运算结果设置。 这些逻辑运算指令对处理操作数的某些位很有用,这些逻辑运算指令对处理操作数的某些位很有用,例如可屏蔽某些

3、位(将这些位置例如可屏蔽某些位(将这些位置0),或使某些),或使某些位置位置1或测试某些位等。或测试某些位等。 3逻辑运算举例逻辑运算举例 NOT指令指令 NOT BX NOT AH NOT BYTE PTRBX AND指令指令 假设假设DX中存有数字中存有数字6和和9的的ASCII码,即码,即DX3639H,要将它们转换成非压缩的,要将它们转换成非压缩的BCD码,并且码,并且把结果存回把结果存回DX。 用如下指令实现:用如下指令实现:AND DX, 0F0FH ; DX3639H 0F0FH 将将DH和和DL中的高中的高4位用全位用全0屏蔽掉,截取低屏蔽掉,截取低4位,位,最后在最后在DX中

4、得到中得到6和和9的的BCD码码0609H。4逻辑运算举例逻辑运算举例 OR指令指令 假设假设AX中存有两个中存有两个BCD数数0508H,要将它们分别,要将它们分别转换成转换成ASCII码,结果仍在码,结果仍在AX中,则可用如下指令中,则可用如下指令实现:实现:OR AX, 3030H ; AX3538H5 XOR指令指令 若若AL中存有某外设端口的状态信息,其中中存有某外设端口的状态信息,其中Dl位控制位控制扬声器发声,要求该位在扬声器发声,要求该位在0、l之间来回变化,原来之间来回变化,原来是是1变成变成0,原来是,原来是0变成变成1,其余各位保留不变。,其余各位保留不变。 可以用以下指

5、令实现:可以用以下指令实现:XOR AL, 00000010BTEST指令的用法说明指令的用法说明 指令格式:指令格式:TEST dst, src 指令功能:对两个操作数进行逻辑与操指令功能:对两个操作数进行逻辑与操作、并修改标志位,但不回送结果,即作、并修改标志位,但不回送结果,即指令执行后,两个操作数都不变。指令执行后,两个操作数都不变。 用途:用途: 它常用在要检测某些条件是否满足,它常用在要检测某些条件是否满足,但又不希望改变原有操作数的情况之但又不希望改变原有操作数的情况之下。紧跟在这条指令后面的往往是一下。紧跟在这条指令后面的往往是一条条件转移指令,根据测试结果产生条条件转移指令,

6、根据测试结果产生分支,转向不同的处理程序。分支,转向不同的处理程序。6例例1:若要检测:若要检测AL中的最低位是否为中的最低位是否为1,若为,若为1则转移。则转移。 TEST AL,01H JNZ THERE THERE:例例2:若要检测:若要检测AX中的最高位是否为中的最高位是否为1,若为,若为1则转移。则转移。 例例3:若要检测:若要检测CX中的内容是否为中的内容是否为1,若为,若为0则转移。则转移。 TEST AX,8000H JNZ THERE THERE: TEST CX,0FFFFH JZ THERE THERE:72、移位指令、移位指令 非循环移位指令非循环移位指令 SAL 算术

7、左移算术左移 SHL 逻辑左移逻辑左移 SAR 算术右移算术右移 SHR 逻辑右移逻辑右移8SAL/SHL指令的执行指令的执行 SAL指令格式:指令格式:SAL OPR, CNT SHL指令格式:指令格式:SHL OPR, CNT 这两条指令的功能完全相同,均为左移这两条指令的功能完全相同,均为左移CNT位。位。911 算术左移指 令: SAL OPRD,1 SAL OPRD,CL 逻辑左移指 令: SHL OPRD,1 SHL OPRD,CL有符号数有符号数无符号数无符号数 移动次数为1的情况下,若移位之后操作数的最高位与CF标志位状态不相同,则OF=1,否则OF=0。这可用于判断移位前后的

8、符号位是否一致。10例例 MOV CL, 2 SHL SI, CL 如指令执行前如指令执行前: (SI)=1450H 则则指令执行后指令执行后: (SI)=5140H,CF=0 相当于相当于5200*4d=20800d11SHR指令的执行指令的执行 SHR指令格式:指令格式:SHR OPR, CNT 功能:逻辑右移功能:逻辑右移CNT位位 每右移一位,相当于对无符号数进行除每右移一位,相当于对无符号数进行除2操作。操作。CFD15或D7D00SHR指令的逻辑右移操作示意图12 移动次数为1的情况下,若移位之后操作数的最高位与次高位不相同,则OF=1,否则OF=0。SAR指令的执行指令的执行 S

9、AR指令格式:指令格式:SAR OPR, CNT 功能:算术右移功能:算术右移CNT位位 每右移一位,相当于对带符号数进行除每右移一位,相当于对带符号数进行除2操作。操作。CFD15或D7D0SAR指令的算术右移操作示意图13例例 已知已知(AL)=0B4H=10110100B,(CF)=1。 试分析下列指令分别执行后对试分析下列指令分别执行后对AL和和CF的影响。的影响。(1)SAL AL, 1(2)SAR AL, 1(3)SHL AL, 1(4)SHR AL, 129 已知已知(AL)=0B4H=10110100B,(CF)=1。(1)SAL AL, 1 ;移位后移位后(AL)= 68H=

10、01101000B, CF=1(2)SAR AL, 1 ;移位后移位后(AL)=0DAH=11011010B, CF=0(3)SHL AL, 1 ;移位后移位后(AL)= 68H=01101000B, CF=1(4)SHR AL, 1 ;移位后移位后(AL)= 5AH=01011010B, CF=0例例 已知变量已知变量Y中为一无符号字节数,请用移位中为一无符号字节数,请用移位指令完成指令完成(Y)*10计算,积放在计算,积放在AX中。中。30 MOV AL, Y ;(Y)AL MOV AH, 0 ;0AH SHL AX, 1 ;(Y)*2 MOV BX, AX ;(AX)BX SHL AX,

11、 1 ;(Y)*4 SHL AX, 1 ;(Y)*8 ADD AX, BX ;(Y)*10循环移位指令循环移位指令 循环移位指令循环移位指令 ROL OPRD, CNT (循环左移循环左移) ROR OPRD, CNT (循环右移循环右移) RCL OPRD, CNT (带进位循环左移带进位循环左移) RCR OPRD, CNT (带进位循环右移带进位循环右移)31指令格式、对操作数的要求与非循环移位指令相同指令格式、对操作数的要求与非循环移位指令相同循环位移指令图解循环位移指令图解CFD15或D7D0CFD15或D7D0ROL指令的循环左移操作ROR指令的循环右移操作32通过进位的循环指令图

12、解通过进位的循环指令图解CFD15或D7D0CFD15或D7D0RCL指令的带进位循环左移操作RCR指令的带进位循环右移操作33例例 如如AX0012H,BX=0034H,要求把它们装配在一,要求把它们装配在一起形成起形成AX=1234H。 可利用移位指令实现上述要求,程序如下:可利用移位指令实现上述要求,程序如下:MOV AX,0012H ;设置;设置AX初值初值MOV BX,0034H ;设置;设置BX初值初值MOV CL,8 ;设置移位次数;设置移位次数ROL AX,CL ;把;把AL内容移入内容移入AHADD AX,BX ;使;使AX=1234H 执行执行ROL指令后,指令后,AX12

13、00H,执行,执行ADD指令指令后,后,AX=1234H。 当然当然ADD指令也可用指令也可用OR AX, BX代替,起到同代替,起到同样效果。样效果。34例例 循环指令举例循环指令举例ROL BX,CL ;将将BX中的内容不带进位循环左移中的内容不带进位循环左移CL中规定中规定的次数的次数ROR WORD PTRSI,1 ;将物理地址为将物理地址为DS*16+SI单元的字不带进位循单元的字不带进位循环右移环右移1次次 35例例 设设CF1, AL = 1011 0100B = 0B4H 若执行指令若执行指令ROL AL, 1 ;则则AL=? CF=?, OF=?若执行指令若执行指令ROR A

14、L, 1 ;则则AL= ? CF=?, OF=?若执行指令若执行指令RCR AL, 1 ;则则AL=? CF=?, OF=?若执行指令若执行指令MOV CL, 3 RCL AL, CL ;则则AL=?, CF=?, OF=?36 设设CF1, AL = 1011 0100B = 0B4H 若执行指令若执行指令ROL AL, 1 ;则则AL=0110 1001B, CF=1, OF=1若执行指令若执行指令ROR AL, 1 ;则则AL=0101 1010B, CF=0, OF=1若执行指令若执行指令RCR AL, 1 ;则则AL=1101 1010B, CF=0, OF=0若执行指令若执行指令M

15、OV CL, 3 RCL AL, CL ;则则AL=1010 0110B, CF=1, OF不确定不确定循环移位指令的应用循环移位指令的应用 用于对某些位状态的测试;用于对某些位状态的测试; 高位部分和低位部分的交换;高位部分和低位部分的交换; 与非循环移位指令一起组成与非循环移位指令一起组成3232位或更位或更长字长数的移位。长字长数的移位。P124例例3-34P124例例3-35例:由ASCII码转换为BCD码 若在内存的输入缓冲区中,已有若干个用ASCII码表示的十进制数码,则每个存储单元只存放一位十进制数码。要求把它们转换为相应的BCD码,且把两个相邻存储单元的十进制数码的BCD码合并

16、在一个存储单元中,且地址高的放在前4位,以此节省一半存储单元。分析:要把十进制数码的ASCII码的个数有可能是偶数,但也可能是奇数。若是奇数,则把地址最低的一个转换为BCD码(高4位为0),然后把剩下的偶数个按统一的方法处理。MOV SI, OFFSET ASCBUF; 加载源地址MOV DI, OFFSET BCDBUF; 加载目标地址MOV CX, COUNT ; 加载要转换的ASCII个数 ROR CX, 1 ; 右移CX(除2)并把最低位移入进位标志JNC NEXT ;进位为0,CX为偶数,转至NEXT处理ROL CX, 1 ;恢复CXMOV AL, SI ;取出第一个ASCII数IN

17、C SI ;源指针指向下一个AND AL ,0FH ;把ASCII转换为BCDMOV DI, AL ;存入目标区INC DI ;目标指针指向下一个DEC CX ;个数减1ROR CX , 1 ;把CX除2NEXT: MOV AL, SI ;取入ASCII数 INC SI ;源指针指向下一个 AND AL, 0FH ;把ASCII转换为BCD MOV BL, AL ;暂存至BL MOV AL, SI ; 取下一个ASCII数 INC SI ;源指针指向下一个 PUSH CX ;暂存CX MOV CL,4 ; 设移位次数 SAL AL,CL ;第二个ASCII数左移4位 POP CX ;恢复CX

18、ADD AL, BL ;把两个BCD数组和 MOV DI, AL ;存至目标区 INC DI ;目标指针指向下一个 DEC CX ;CX减一 JNZ ;若不为0,继续循环 HLT 3.3.4 串操作指令串操作指令 串操作指令串操作指令 : 数据传送类指令每次只能传送一个数据,若要传数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时送大批数据就需要重复编程,这样就浪费了大量的时间和空间。间和空间。 为此为此8086提供了一组处理主存中连续存放数据串提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。的指令,这就是串操作指令。 针对数据块或字符串的操作

19、;针对数据块或字符串的操作;可实现存储器到存储器的数据传送;可实现存储器到存储器的数据传送;待操作的数据串称为源串,目标地址称为目标串。待操作的数据串称为源串,目标地址称为目标串。1 1、串操作指令的共同特点、串操作指令的共同特点 源串默认在数据段(DS),偏移地址由SI指定。允许段重设; 目标串必须在附加段,偏移地址由DI指定; 指令自动修改地址指针,修改方向由DF决定。 DF=0 DF=1 数据块长度值由CX指定 可增加自动重复前缀以实现自动修改CX内容。增地址方向;增地址方向;减地址方向;减地址方向;2 2、重复操作前缀、重复操作前缀(1)REP REP前缀用在前缀用在MOVS、STOS

20、 、LODS指令前。指令前。功能:每执行一次串指令(功能:每执行一次串指令(CX)1,直到(,直到(CX)=0,重复执行结束。,重复执行结束。 当当(CX)0, (CX) (CX)-1 , 执行执行REP后的串指令。后的串指令。 当当(CX)= 0 ,结束结束REP,执行下一条指令。执行下一条指令。( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行REP后的串执行REP后的串指令指令N NREP 执行流程图执行流程图(2)REPE/ REPZ 该指令一般用在该指令一般用在CMPS、SCAS指令前。指令前。 功能:每执行一次串指令(

21、功能:每执行一次串指令(CX)1,并判断,并判断ZF标志标志是否为是否为0,只要(,只要(CX)=0或或ZF=0,则重复执行结束。,则重复执行结束。(3) REPNE/REPNZ 该指令一般用在该指令一般用在CMPS、SCAS 指令前。指令前。 功能:每执行一次串指令(功能:每执行一次串指令(CX)1,并判断,并判断ZF标志标志是否为是否为0,只要(,只要(CX)=0或或ZF=1,则重复执行结束。,则重复执行结束。 无条件重复 REP 条件重复 REPE 相等重复 REPZ 为零重复 REPNE 不相等重复 REPNZ 不为零重复CX0 ZF=1CX0 ZF=0CX0 重复重复串操作指令流程(

22、以传送操作为例)取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?NY设操作方向设操作方向1串传送指令串传送指令MOVS语句格式:语句格式: MOVS OPRD1, OPRD2 MOVSB字节串传送字节串传送 MOVSW字串传送字串传送功能:将以功能:将以SI为指针的源串中的一个字节(或字)为指针的源串中的一个字节(或字)存储单元中的数据传送至以存储单元中的数据传送至以DI为指针的目的地址中为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)去,并自动修改指针,使之指向下一

23、个字节(或字)存储单元。存储单元。即:(即:(DS:SI)ES:DI。 当当DF=0时,(时,(SI)和()和(DI)增量。)增量。 当当DF=1时,(时,(SI)和()和(DI)减量。)减量。3 3、串操作指令、串操作指令 归纳起来。执行串操作前准备工作:归纳起来。执行串操作前准备工作:(1)CLD/STD(2)源串首地址)源串首地址 SI(3)目的串首地址)目的串首地址 DI(4)字串长度)字串长度 CX2串比较指令串比较指令CMPS 语句格式:语句格式: CMPS OPRD1, OPRD2 CMPSB字节串比较字节串比较 CMPSW字串比较字串比较功能:将功能:将SI所指的源串中的一个字

24、节(或字)存储所指的源串中的一个字节(或字)存储单元中的数据与单元中的数据与DI所指的目的串中的一个字节(或所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。置标志,但结果并不保存。即:(即:(DS:SI)()(ES:DI)。)。 修改串指针,使之指向串中的下一个元素。修改串指针,使之指向串中的下一个元素。 当当DF=0时,(时,(SI)和()和(DI)增量。)增量。 当当DF=1时,(时,(SI)和()和(DI)减量。)减量。例例1 CMPS指令举例指令举例 比较两个字符串,一个是操作员在程序中设定的比

25、较两个字符串,一个是操作员在程序中设定的口令串口令串PASSWORD(常量串取名为:常量串取名为:PSWD),另,另一个是从键盘输入的字符串一个是从键盘输入的字符串IN-WORD(变量串取变量串取名为:名为:IPSWD),若输入串与口令串相同,程序,若输入串与口令串相同,程序将开始执行。否则,程序驱动将开始执行。否则,程序驱动PC机的扬声器发声,机的扬声器发声,警告用户口令不符,拒绝往下执行。警告用户口令不符,拒绝往下执行。 这一处理逻辑可以用这一处理逻辑可以用CMPS指令来实现。请参看指令来实现。请参看下面的程序段。下面的程序段。例 程序清单DATASEGMENT;数据段PSWDDB,750

26、430LI;口令串IPSWD DB,750424LE;从键盘输入的串COUNT EQU8;串长度DATAENDSCODESEGUENT;代码段ASSUMEDS:DATA, ES:DATALEASI,PSWD;源串指针LEADI,IPSWD;目的串指针MOVCX,COUNT;串长度CLD;地址增量REPZCMPSB;CX0 且 串相等时重复比较JNESOUND;若不相等转发声程序OK:;比较完毕且相等则往下执行SOUND:;使P C机 扬声器发声;并退出CODEENDS例例2 比较两个串是否完全一致(比较两个串是否完全一致(100个字节)若有不同,将地址送个字节)若有不同,将地址送入入BX,内容

27、送入,内容送入AL,若相同,将,若相同,将0送入送入BX。 CLD MOV CX, 100 MOV SI, 2400H MOV DI, 1200H REPE CMPSB AND CX, 0FFFFH JZ EQQ DEC SI MOV BX, SI MOV AL, SI JMP STOP EQQ: MOV BX, 0 STOP: HLT3串搜索指令串搜索指令SCAS语句格式:语句格式: SCAS DOPRD SCASB字节串搜索字节串搜索 SCASW字串搜索字串搜索功能:功能:AL(字节)或(字节)或AX(字)中的内容与(字)中的内容与DI所指所指的目的串中的一个字节(或字)存储单元中的数据的

28、目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,相减,根据相减结果设置标志位,结果不保存,即:即: 字节操作:(字节操作:(AL)()(ES:DI),), 字操作:(字操作:(AX)()( ES:DI)。)。 修改指针使之指向串中的下一个元素。修改指针使之指向串中的下一个元素。 当当DF=0时,(时,(DI)增量。)增量。 当当DF=1时,(时,(DI)减量。)减量。例例 SCAS指令示例程序指令示例程序 在某一字符串中搜寻是否有字符在某一字符串中搜寻是否有字符A,若有,若有,则把搜索次数记下来,送到则把搜索次数记下来,送到BX寄存器中。寄存器中。若没有查到

29、,则将若没有查到,则将BX寄存器清寄存器清0。 请参看下面的程序段。请参看下面的程序段。 字符串起始地址字符串起始地址STRING的偏移地址为的偏移地址为0 字符串长度存入字符串长度存入CX寄存器。寄存器。 例例 程序清单程序清单 MOV DI, OFFSET STRING ; DI=字符串偏移地址 MOV CX, COUNT ;CX=字符串长度 MOV AL, A ; AL=关键字A的ASCII码 CLD ; 清方向标志 REPNE SCASB ; CX0(没查完)和ZF=(不相等)时重复 JZ FIND ; 若ZF=1,表示已经搜索到,转移出去。 MOV DI, 0 ;若CX=0但ZF0,

30、表示没搜到,DI=0 JMP DONEFIND: DEC DI ;执行完串扫描后,DI已自动加1 MOV BX, DI ;BX=搜索次数DONE: HLT ;停机4从源串中取数指令从源串中取数指令LODS语句格式:语句格式: LODS SOPRD LODSB从字节串中取数从字节串中取数 LODSW从字串中取数从字串中取数功能:将功能:将SI所指的源串中的一个字节(或字)存储所指的源串中的一个字节(或字)存储单元中的数据取出来送入单元中的数据取出来送入AL(或(或AX)中。一般不加)中。一般不加重复前缀。重复前缀。即:即: 字节操作:(字节操作:(DS:SI)AL, 字操作:(字操作:(DS:S

31、I)AX。 修改指针修改指针SI,使它指向串中的下一个元素。,使它指向串中的下一个元素。当当DF=0时,(时,(SI)增量。当)增量。当DF=1时,(时,(SI)减量。)减量。 例例 LODSW指令执行示意图指令执行示意图(AX)=?(AX)=?(DS)=7000H70000H08H11H70100H70101H70102H(SI)=0100HDF=0LODSW指令执行前LODSW指令执行前(AX)=1108H(AX)=1108H(DS)=7000H70000H08H11H70100H70101H70102H(SI)=0102HDF=0LODSW指令执行后LODSW指令执行后 5往目的串中存数

32、指令往目的串中存数指令STOS 语句格式:语句格式: STOS DOPRD STOSB往字节串中存数往字节串中存数 STOSW往字串中存数往字串中存数 功能:将功能:将AL或或AX中的数据送入中的数据送入DI所指的目的串中的所指的目的串中的字节(或字)存储单元中。字节(或字)存储单元中。 即:即: 字节操作:(字节操作:(AL)ES:DI, 字操作:(字操作:(AX)ES:DI。 修改指针修改指针DI,使之指向串中的下一个元素。,使之指向串中的下一个元素。 当当DF=0时,(时,(DI)增量。)增量。 当当DF=1时,(时,(DI)减量。)减量。例例 如果要把附加段中的五个字节缓冲区置为如果要把附加段中的五个字节缓冲区置为20H值值(ASCII码空格,码空格,Space),则可根据串处理指,则可根据串处理指令的要求预置指针及方向标志令的要求预置指针及方向标志, 并用含有重复前并用含有重复前缀的缀的REP STOSB指令执行。指令执行。 指令行如下:指令行如下:MOV AL, 20HMOV CX, 5CLDREP STOSB 此例的图解参看下页。此例的图解参看下页。例例 STOSB指令执行图解指令执行图解REP STOSB指令执行后REP STOSB指令执行后(ES)=1000H10000H(DI)=0505H20H20H20H20H20H10500H D

温馨提示

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

评论

0/150

提交评论