第3章-指令系统(位操作指令)-2_第1页
第3章-指令系统(位操作指令)-2_第2页
第3章-指令系统(位操作指令)-2_第3页
第3章-指令系统(位操作指令)-2_第4页
第3章-指令系统(位操作指令)-2_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-11 汇编语言汇编语言 程序设计程序设计 汇编语言程序设计汇编语言程序设计 (第三章)(第三章) 辽宁石油化工大学计算机与通信工程学院辽宁石油化工大学计算机与通信工程学院 主讲:王晓虹主讲:王晓虹 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-12 汇编语言汇编语言 程序设计程序设计 三、三、位操作指令 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-13 汇编语言汇编语言 程序设计程序设计 三、

2、三、位操作指令 80868086提供的位操作指令包括逻辑运算指令和移位指令,这类指令可直接对提供的位操作指令包括逻辑运算指令和移位指令,这类指令可直接对 寄存器或存储器中的位进行操作。寄存器或存储器中的位进行操作。 1 1逻辑运算指令逻辑运算指令 逻辑运算指令包括:逻辑运算指令包括:ANDAND指令、指令、OROR指令、指令、XORXOR指令、指令、TESTTEST指令和指令和NOTNOT指令,指令, 其中前四种指令是双操作数指令,符合双操作数指令的一般规律,其中前四种指令是双操作数指令,符合双操作数指令的一般规律,这四条指这四条指 令执行后将使令执行后将使CFCF和和OFOF位为位为0 0,

3、AFAF位不确定,而位不确定,而SFSF、ZFZF和和PFPF位则根据运算结果设位则根据运算结果设 置;置;NOTNOT指令是单操作数指令,符合单操作数指令的一般规律,它的执行不影指令是单操作数指令,符合单操作数指令的一般规律,它的执行不影 响标志位。响标志位。 (1 1)逻辑与指令)逻辑与指令 格式:格式:AND OPDAND OPD,OPSOPS 功能:将目的操作数与源操作数按位相与,结果送目的操作数。功能:将目的操作数与源操作数按位相与,结果送目的操作数。 即:即:OPDOPD(OPDOPD)(OPSOPS)。)。 说明:说明: “ “与与”的运算原则是:的运算原则是:11=111=1,

4、01=001=0,10=010=0,00=000=0。 AND AND指令常用于指令常用于: : (a) (a)使一个操作数中的若干位保持不变,而若干位清为使一个操作数中的若干位保持不变,而若干位清为0 0的场合。的场合。 (b b)某一操作数,自己和自己相)某一操作数,自己和自己相“与与”,操作数不变,但可以使进,操作数不变,但可以使进 位标志位标志CFCF清清0 0。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-14 汇编语言汇编语言 程序设计程序设计 【例】将【例】将ALAL中第中第3 3位和第位和第7 7位清零。位清零。 MOVMO

5、V ALAL,0FFH 0FFH AND AND ALAL,77H 77H 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-15 汇编语言汇编语言 程序设计程序设计 (2 2)逻辑或指令)逻辑或指令 格式:格式:OR OPDOR OPD,OPSOPS 功能:将目的操作数与源操作数按位相或,结果送目的操作数。功能:将目的操作数与源操作数按位相或,结果送目的操作数。 即:即:OPDOPD(OPDOPD)(OPSOPS)。)。 说明:说明: “ “或或”操作的运算原则是:操作的运算原则是:11=111=1,01=101=1,10=110=1,00=0

6、00=0。 OR OR指令常用于:指令常用于: (a) (a) 使一个操作数中的若干位保持不变,而另外若干位置使一个操作数中的若干位保持不变,而另外若干位置1 1的的 场合。这时,要保持不变的这些位与场合。这时,要保持不变的这些位与“0”0”相或;而要置相或;而要置1 1 的这些位与的这些位与“1”1”相或。相或。 (b) (b) 某一操作数,自己和自己相某一操作数,自己和自己相“或或”,操作数不变,但可以,操作数不变,但可以 使进位标志使进位标志CFCF清清0 0。 【例】将【例】将AL寄存器中第寄存器中第3位和第位和第7位置位置1。 MOVAL,0 OR AL,88H 单击此处编辑母版标题

7、样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-16 汇编语言汇编语言 程序设计程序设计 (3)逻辑异或指令)逻辑异或指令 格式:格式:XOR OPD,OPS 功能:将目的操作数与源操作数按位相异或,结果送目的操作数。功能:将目的操作数与源操作数按位相异或,结果送目的操作数。 即:即:OPD(OPD) (OPS)。)。 说明:说明: “异或异或”操作的运算原则是:操作的运算原则是:1 1=0,0 0=0,0 1=1,1 0=1。 XOR指令常用于:指令常用于: (a) 使一个操作数中的若干位保持不变,而另外若干位取反的场合。这时,使一个操作数中的若干位保持不变,而

8、另外若干位取反的场合。这时, 要保持不变的这些位与要保持不变的这些位与“0”相异或;而要取反的那些位与相异或;而要取反的那些位与“1”相异或。相异或。 (b) 使某一操作数清使某一操作数清0。由于一个操作数自身做。由于一个操作数自身做“异或异或”时,每一位都相同,时,每一位都相同, “异或异或”结果必为结果必为0,且使进位标志也为,且使进位标志也为0。因此这是使操作数的初值置。因此这是使操作数的初值置0的常用的常用 的有效的方法。的有效的方法。 如指令如指令XOR AX,AX ;AX清清0。 (c) 测试某一操作数是否与另一确定的操作数相等。这种操作在检查地址是测试某一操作数是否与另一确定的操

9、作数相等。这种操作在检查地址是 否匹配时是常用的。否匹配时是常用的。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-17 汇编语言汇编语言 程序设计程序设计 (4 4)测试指令)测试指令 格式:格式:TEST OPDTEST OPD,OPSOPS 功能:目的操作数与源操作数按位相与,结果反映在标志位上,功能:目的操作数与源操作数按位相与,结果反映在标志位上, 但不送回目的操作数。但不送回目的操作数。 即:(即:(OPDOPD)(OPSOPS)。)。 【例】按位加运算。【例】按位加运算。 MOVAL,45H;(;(AL)=45H XORAL,3

10、1H;(;(AL)=? ;(;(AL)=74H 说明:说明: 该指令完成与该指令完成与ANDAND指令相同的操作,但指令相同的操作,但TESTTEST指令不改变目的操指令不改变目的操 作数的值。作数的值。 TEST TEST指令常用于:在不希望改变原有的操作数的情况下,用来指令常用于:在不希望改变原有的操作数的情况下,用来 检测某一位或某几位的条件是否满足。编程时常与条件转移指检测某一位或某几位的条件是否满足。编程时常与条件转移指 令一起使用,可在令一起使用,可在TESTTEST指令后面加上条件转移指令,来测试操指令后面加上条件转移指令,来测试操 作数某位是否为作数某位是否为1 1,或者是否为

11、,或者是否为0 0。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-18 汇编语言汇编语言 程序设计程序设计 【例】测试【例】测试AX中的第中的第12位是否为位是否为0,不为,不为0则转则转L。 TESTAX,_ JNEL 1000H (5)逻辑非指令)逻辑非指令 格式:格式:NOT OPD 功能:将目的操作数各位取反,结果送目的操作数。功能:将目的操作数各位取反,结果送目的操作数。 即:即:OPD(OPD)。)。 说明:若将整个操作数取反,则应使用说明:若将整个操作数取反,则应使用NOT指令,若只需将操作数指令,若只需将操作数 的一部分位取

12、反,则应使用的一部分位取反,则应使用XOR指令。指令。 【例】逻辑非运算。【例】逻辑非运算。 MOVAX,878AH;(;(AX)=878AH NOTAX ;(;(AX)=7875H 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-19 汇编语言汇编语言 程序设计程序设计 - AND指令对一个数据的指定位清指令对一个数据的指定位清0。例如,。例如,AND AL,0FH指令就实现将高指令就实现将高4 位清位清0。 - OR- OR指令常常用来对一些指定位置指令常常用来对一些指定位置1 1。例如,指令。例如,指令OR ALOR AL,0202实现对

13、累加器中实现对累加器中 的的D1D1位置位置1 1。 -XORXOR指令常常用在一些程序的开头使某个寄存器清指令常常用在一些程序的开头使某个寄存器清0 0,以配合初始化工作,以配合初始化工作 的完成。例如,的完成。例如,XOR AXXOR AX,AXAX,使累加器清,使累加器清0 0。 - NOT- NOT指令常用来将某个数据取成反码,再加上指令常用来将某个数据取成反码,再加上1 1,便得到补码。,便得到补码。 -TESTTEST指令一般用来检测指定位是指令一般用来检测指定位是1 1还是还是0 0,而这个指定位往往对应一个物,而这个指定位往往对应一个物 理量。理量。 例如,某一个状态寄存器的最

14、低位反映一种状态,为例如,某一个状态寄存器的最低位反映一种状态,为1 1时,说明状态信号时,说明状态信号 满足要求,于是,就可以先将状态寄存器的内容读到满足要求,于是,就可以先将状态寄存器的内容读到ALAL中,再用中,再用TEST ALTEST AL, 0101指令,此后就可以通过对指令,此后就可以通过对ZFZF的判断来了解此状态位是否为的判断来了解此状态位是否为1 1。如果。如果ZFZF 1 1,说明结果为,说明结果为0 0,即最低位为,即最低位为0 0,条件不满足;如果,条件不满足;如果ZFZF0 0,说明结果不,说明结果不 为为0 0,即最低位不为,即最低位不为0 0,而为,而为1 1,

15、所以条件满足。,所以条件满足。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-110 汇编语言汇编语言 程序设计程序设计 对一个位串,对一个位串,ANDAND可以屏蔽(清可以屏蔽(清0 0)某些位,)某些位,OROR可以置位可以置位( (置置1)1)某些位,某些位, XORXOR可以取反某些位,可以取反某些位,XORXOR可以检查两个位串是否匹配。可以检查两个位串是否匹配。 AND AX,0AND AX,0;AXAX清清0 0 AND CL,0FHAND CL,0FH;屏蔽;屏蔽CLCL的高的高4 4位位 OR BH,00111100BOR

16、BH,00111100B;将;将BHBH的中间的中间4 4位置位位置位 XOR BL,0F0HXOR BL,0F0H;将;将BLBL高高4 4位变反位变反 NOTNOT指令执行不影响状态标志,其他逻辑指令执行后将重新设置指令执行不影响状态标志,其他逻辑指令执行后将重新设置SFSF、 ZFZF、PFPF的状态,而总使的状态,而总使CF=0CF=0、OF=0OF=0,AFAF状态不确定。状态不确定。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-111 汇编语言汇编语言 程序设计程序设计 屏蔽若干位。屏蔽若干位。 (常用指令)(常用指令) AND

17、 AL,01H;屏蔽;屏蔽AL的的D7D1,保留,保留D0 AND AL,0FH;屏蔽;屏蔽AL高高4位,保留低位,保留低4位位 使若干位置使若干位置1 (常用指令)(常用指令) OR BL,0F0H;使;使BL高高4位置位置1,低,低4位不变位不变 清除清除CF、OF 或或 设置标志设置标志 AND AL,AL (AND AL,0FFH;OR BL,BL;) ;类似指令没有改变目的操作数,但使类似指令没有改变目的操作数,但使CF=OF=0,也,也 可能纯粹以设置其他标志(可能纯粹以设置其他标志(ZF)为目的。)为目的。 总结总结 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第

18、三级 第四级 第五级 2021-7-112 汇编语言汇编语言 程序设计程序设计 求反求反 NOT AL / NOT WORD PTRBX+DI 对指定位求反对指定位求反 XOR AL,0FH;AL高高4位不变,低位不变,低4位求反位求反 XOR CL,55H;CL偶数位求反,奇数位不变偶数位求反,奇数位不变 清除寄存器及清除寄存器及CF(常用指令)(常用指令) XOR AX,AX / XOR BX,BX XOR BYTE PTRBX,BYTE PTRBX X 0=X X 1=X 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-113 汇编语言汇

19、编语言 程序设计程序设计 不改变操作数,测试操作数或操作数的指定位不改变操作数,测试操作数或操作数的指定位 TEST AL,0FFH;由;由ZF标志判断标志判断AL是否为零是否为零 ;也可以用;也可以用CMP指令。指令。 TEST AL,01;由;由ZF标志判断标志判断AL的的D0是否为零,是否为零, ;ZF=1,则,则AL.D0=0 ;ZF=0,则,则AL.D0=1 AND AL,01 ;也可完成上述功能,但是改变了目;也可完成上述功能,但是改变了目 ;的操作数;的操作数 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-114 汇编语言汇编语

20、言 程序设计程序设计 2 2 移位指令移位指令 移位指令包括算术移位指令、逻辑移位指令和循环移位指移位指令包括算术移位指令、逻辑移位指令和循环移位指 令,分别进行左移和右移操作。这些指令均有统一的语句格式:令,分别进行左移和右移操作。这些指令均有统一的语句格式: 标号:标号: 操作符操作符OPDOPD,1 1或或 标号:标号: 操作符操作符OPDOPD,CLCL 其功能为将目的操作数的所有位按操作符规定的方式移动其功能为将目的操作数的所有位按操作符规定的方式移动 1 1位或按寄存器位或按寄存器CLCL规定的次数(规定的次数(0-2550-255)移动,结果送入目的)移动,结果送入目的 地址。目

21、的操作数是地址。目的操作数是8 8位(或位(或1616位)的寄存器数据或存储器数位)的寄存器数据或存储器数 据。据。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-115 汇编语言汇编语言 程序设计程序设计 (1 1)逻辑左移指令)逻辑左移指令 格式:格式:SHL OPDSHL OPD,COUNTCOUNT 功能:将目的操作数向左移动功能:将目的操作数向左移动COUNTCOUNT指定的位数,每左移一位,最低位指定的位数,每左移一位,最低位 补补0 0,最高位送,最高位送CFCF。 (2 2)逻辑右移指令)逻辑右移指令 格式:格式:SHR OP

22、DSHR OPD,COUNTCOUNT 功能:将目的操作数向右移动功能:将目的操作数向右移动COUNTCOUNT指定的位数,每右移一位,最高位指定的位数,每右移一位,最高位 补补0 0,最低位送,最低位送CFCF。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-116 汇编语言汇编语言 程序设计程序设计 (3 3)算术左移指令)算术左移指令 格式:格式:SAL OPDSAL OPD,COUNTCOUNT 功能:功能:SALSAL指令与指令与SHLSHL指令的功能完全相同。指令的功能完全相同。 (4 4)算术右移指令)算术右移指令 格式:格式:

23、SAR OPDSAR OPD,COUNTCOUNT 功能:将目的操作数向右移动功能:将目的操作数向右移动COUNTCOUNT指定的位数,每右移一位,最高指定的位数,每右移一位,最高 位均保持不变,最低位送位均保持不变,最低位送CFCF。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-117 汇编语言汇编语言 程序设计程序设计 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-118 汇编语言汇编语言 程序设计程序设计 【例】算术右移运算。【例】算术右移运算。 MOVMOV BHBH,0F4H0F

24、4H;(;(BHBH)=0F4H=0F4H MOVMOV CLCL, 2 2 ;(;(CLCL)=2=2 SARSAR BHBH, CLCL;(;(BHBH)=0FDH=0FDH,(,(CFCF)=0=0 该例语句该例语句“SARSARBHBH,CL”CL”实际上完成了(实际上完成了(BHBH)BHBH的运算,的运算, 所以,用所以,用SARSAR指令可以实现对有符号数除指令可以实现对有符号数除2n2n的运算(的运算(n n为移位次数)。为移位次数)。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-119 汇编语言汇编语言 程序设计程序设计

25、(5 5)循环左移指令)循环左移指令ROLROL 格式:格式:ROL OPDROL OPD,COUNTCOUNT 功能:将目的操作数向左循环移位功能:将目的操作数向左循环移位COUNTCOUNT指定的位数,每左移一位,指定的位数,每左移一位, 左移前的最高送最低位以及左移前的最高送最低位以及CFCF。 (6 6)循环右移指令)循环右移指令RORROR 格式:格式:ROR OPDROR OPD,COUNTCOUNT 功能:将目的操作数向右循环移位功能:将目的操作数向右循环移位COUNTCOUNT指定的位数,每右移一位,指定的位数,每右移一位, 右移前的最低送最高位以及右移前的最低送最高位以及CF

26、CF。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-120 汇编语言汇编语言 程序设计程序设计 (7)带进位的循环左移指令)带进位的循环左移指令RCL 格式:格式:RCL OPD,COUNT 功能:将目的操作数连同功能:将目的操作数连同CF位一起向左循环移位位一起向左循环移位COUNT指定的位数,指定的位数, 每左移一位,左移前的每左移一位,左移前的CF送最低位,左移前的最高位送送最低位,左移前的最高位送CF。 (8)带进位的循环右移指令)带进位的循环右移指令RCR 格式:格式:RCR OPD,COUNT 功能:将目的操作数连同功能:将目的

27、操作数连同CF位一起向右循环移位位一起向右循环移位COUNT指定的位数,指定的位数, 每右移一位,右移前的每右移一位,右移前的CF送最高位,右移前的最低送送最高位,右移前的最低送CF。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-121 汇编语言汇编语言 程序设计程序设计 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-122 汇编语言汇编语言 程序设计程序设计 例:将例:将DXDX和和AXAX中的低中的低8 8位拼成一个位拼成一个1616位数放在位数放在DXDX中,要求原中,要求原DXDX

28、中的低中的低8 8 位置于位置于1616位数中的高位。位数中的高位。 MOV CL,8MOV CL,8 SHL DX,CLSHL DX,CL AND AX,0FFHAND AX,0FFH OR DX,AX OR DX,AX 例如,下面的程序段将例如,下面的程序段将ALAL中的数乘以中的数乘以1010: SALSALALAL,1 1,;,; 将将ALAL中数左移中数左移1 1位,得位,得2X2X MOVMOVBLBL,ALAL; 2X2X保存在保存在BLBL中中 MOVMOVCLCL,2 2; 移位次数置入移位次数置入CLCL中中 SALSALALAL,CLCL; 2X2X左移左移2 2位,得位

29、,得8X8X ADDADDALAL,BLBL; 2X2X加上加上8X8X,所以,所以ALAL中为中为10X10X 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-123 汇编语言汇编语言 程序设计程序设计 例:分析以下程序段。例:分析以下程序段。 MOV AX MOV AX ,1234H 1234H ;(;(AXAX) 0001001000110100B0001001000110100B MOV CL MOV CL ,8 8 ROL AX ROL AX ,CL CL 将将AXAX内容循环左移内容循环左移8 8位(位(AXAX) 00110100

30、00010010B0011010000010010B,CFCF0 0 执行程序段以后,(执行程序段以后,(AXAX)3412H3412H,相当于将高,相当于将高8 8位与低位与低8 8位位 交换。交换。 由此可见,循环移位指令可以改变操作数中原有位的位置。由此可见,循环移位指令可以改变操作数中原有位的位置。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-124 汇编语言汇编语言 程序设计程序设计 例:将例:将AXAX中的最高位移至中的最高位移至BXBX的最低位的最低位. . RCL AX RCL AX ,1 1 ;将;将AXAX中的最高位移至

31、中的最高位移至CFCF中中 RCL BX RCL BX ,1 1 ;将;将CFCF的内容移至的内容移至BXBX的最低位的最低位 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-125 汇编语言汇编语言 程序设计程序设计 四、四、处理器控制指令 1 1 标志位操作指令标志位操作指令 (1 1)清除进位标志指令)清除进位标志指令 (2 2)进位标志置位指令)进位标志置位指令 CLC CLC ;置;置CFCF0 STC 0 STC ;置;置CFCF1 1 (3 3)进位标志取反指令)进位标志取反指令 CMC CMC ;CFCF取反取反 (4 4)清除

32、方向标志指令)清除方向标志指令 (5 5)方向标志置位指令)方向标志置位指令 CLD CLD ;置;置DFDF0 STD 0 STD ;置;置DFDF1 1 (6 6)清除中断标志指令)清除中断标志指令 (7 7)中断标志置位指令)中断标志置位指令 CLI CLI ;置;置IFIF0 STI 0 STI ;置;置IFIF1 1 2 2 处理器控制指令处理器控制指令 (1 1)空操作指令)空操作指令 格式:格式:NOP NOP 功能:功能:CPUCPU执行一次空操作执行一次空操作 。 (2 2) 暂停指令暂停指令 格式:格式:HLT HLT 功能:使功能:使CPUCPU进入暂停状态,不进行任何操

33、作进入暂停状态,不进行任何操作 。 (3 3)等待指令)等待指令 格式:格式:WAITWAIT 功能:使功能:使CPUCPU处于等待状态处于等待状态 。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-126 汇编语言汇编语言 程序设计程序设计 五 串操作指令 串操作指令就是用一条指令实现对一串字符或数据的操作。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-127 汇编语言汇编语言 程序设计程序设计 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021

34、-7-128 汇编语言汇编语言 程序设计程序设计 80868086的串操作指令有如下特点:的串操作指令有如下特点: (1) (1) 通过加重复前缀来实现串操作。通过加重复前缀来实现串操作。 (2) (2) 可以对字节串进行操作,也可以对字串进行操作。可以对字节串进行操作,也可以对字串进行操作。 (3) (3) 所有的串操作指令都用寄存器所有的串操作指令都用寄存器SISI对源操作数进行间接寻址,对源操作数进行间接寻址, 并且假定是在并且假定是在DSDS段中;此外,所有的串操作指令都用寄存器段中;此外,所有的串操作指令都用寄存器DIDI 为目的操作数进行间接寻址,并且假定是在为目的操作数进行间接寻

35、址,并且假定是在ESES段中。串操作指段中。串操作指 令是唯一的一组源操作数和目的操作数都在存储单元的指令。令是唯一的一组源操作数和目的操作数都在存储单元的指令。 (4) (4) 串操作时,地址的修改往往与方向标志串操作时,地址的修改往往与方向标志DFDF有关,当有关,当DFDF1 1时,时, SISI和和DIDI作自动减量修改,当作自动减量修改,当DFDF0 0时,时,SISI和和DIDI作自动增量修改。作自动增量修改。 (5) (5) 在同一个段内实现字符串传送时,应该将数据段基址和附加在同一个段内实现字符串传送时,应该将数据段基址和附加 段基址设置成同一数值,即段基址设置成同一数值,即(

36、DS)(DS)(ES)(ES),此时,仍由,此时,仍由SISI和和DIDI分分 别指出源串操作数和目的操作数的偏移地址。别指出源串操作数和目的操作数的偏移地址。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-129 汇编语言汇编语言 程序设计程序设计 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-130 汇编语言汇编语言 程序设计程序设计 流程图总结了串操作的过程。 图图 串操作流程图串操作流程图 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-

37、7-131 汇编语言汇编语言 程序设计程序设计 1 1传送指令传送指令MOVSMOVS 语句格式:语句格式: MOVSB MOVSB字节串传送字节串传送 MOVSW MOVSW字串传送字串传送 功能:将以功能:将以SISI为指针的源串中的一个字节(或字)存储单为指针的源串中的一个字节(或字)存储单 元中的数据传送至以元中的数据传送至以DIDI为指针的目的地址中去,并自动修为指针的目的地址中去,并自动修 改指针,使之指向下一个字节(或字)存储单元。改指针,使之指向下一个字节(或字)存储单元。 即:即:(DSDS:SISI)ESES:DIDI。 当当DF=0DF=0时,(时,(SISI)和()和(

38、DIDI)增量。)增量。 当当DF=1DF=1时,(时,(SISI)和()和(DIDI)减量。)减量。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-132 汇编语言汇编语言 程序设计程序设计 2 2串比较指令串比较指令CMPS CMPS 语句格式:语句格式: CMPSB CMPSB字节串比较字节串比较 CMPSW CMPSW字串比较字串比较 功能:将功能:将SISI所指的源串中的一个字节(或字)存储单元中所指的源串中的一个字节(或字)存储单元中 的数据与的数据与DIDI所指的目的串中的一个字节(或字)存储单元所指的目的串中的一个字节(或字)

39、存储单元 中的数据相减,并根据相减的结果设置标志,但结果并不中的数据相减,并根据相减的结果设置标志,但结果并不 保存。保存。 即:即:(SISI)()(DIDI)。)。 修改串指针,使之指向串中的下一个元素。修改串指针,使之指向串中的下一个元素。 当当DF=0DF=0时,(时,(SISI)和()和(DIDI)增量。)增量。 当当DF=1DF=1时,(时,(SISI)和()和(DIDI)减量。)减量。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-133 汇编语言汇编语言 程序设计程序设计 3 3串搜索指令串搜索指令SCASSCAS 语句格式:

40、语句格式: SCASB SCASB字节串搜索字节串搜索 SCASW SCASW字串搜索字串搜索 功能:功能:ALAL(字节)或(字节)或AXAX(字)中的内容与(字)中的内容与DIDI所指的目的串所指的目的串 中的一个字节(或字)存储单元中的数据相减,根据相减中的一个字节(或字)存储单元中的数据相减,根据相减 结果设置标志位,结果不保存,结果设置标志位,结果不保存, 即:即: 字节操作:(字节操作:(ALAL)()(DIDI),), 字操作:(字操作:(AXAX)()(DIDI)。)。 修改指针使之指向串中的下一个元素。修改指针使之指向串中的下一个元素。 当当DF=0DF=0时,(时,(DID

41、I)增量。)增量。 当当DF=1DF=1时,(时,(DIDI)减量。)减量。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-134 汇编语言汇编语言 程序设计程序设计 4 4从源串中取数指令从源串中取数指令LODSLODS 语句格式:语句格式: LODSB LODSB从字节串中取数从字节串中取数 LODSW LODSW从字串中取数从字串中取数 功能:将功能:将SISI所指的源串中的一个字节(或字)存储单元所指的源串中的一个字节(或字)存储单元 中的数据取出来送入中的数据取出来送入ALAL(或(或AXAX)中。)中。 即:即: 字节操作:(字节

42、操作:(SISI)ALAL, 字操作:(字操作:(SISI)AXAX。 修改指针修改指针SISI,使它指向串中的下一个元素。,使它指向串中的下一个元素。 当当DF=0DF=0时,(时,(SISI)增量。)增量。 当当DF=1DF=1时,(时,(SISI)减量。)减量。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-135 汇编语言汇编语言 程序设计程序设计 5 5往目的串中存数指令往目的串中存数指令STOSSTOS 语句格式:语句格式: STOSB STOSB往字节串中存数往字节串中存数 STOSW STOSW往字串中存数往字串中存数 功能:

43、将功能:将ALAL或或AXAX中的数据送入中的数据送入DIDI所指的目的串中的字节(或所指的目的串中的字节(或 字)存储单元中。字)存储单元中。 即:即: 字节操作:(字节操作:(ALAL)DIDI, 字操作:(字操作:(AXAX)DIDI。 修改指针修改指针DIDI,使之指向串中的下一个元素。,使之指向串中的下一个元素。 当当DF=0DF=0时,(时,(DIDI)增量)。)增量)。 当当DF=1DF=1时,(时,(DIDI)减量。)减量。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-136 汇编语言汇编语言 程序设计程序设计 6 6重复前

44、缀指令重复前缀指令REP REPZ REPNZREP REPZ REPNZ (1 1)REP (REP (无条件重复无条件重复) ) REPREP前缀用在前缀用在MOVSMOVS、STOS STOS 、LODSLODS指令前。指令前。 功能:每执行一次串指令(功能:每执行一次串指令(CXCX)1 1,直到(,直到(CXCX)=0=0,重复执行,重复执行 结束。结束。 (2 2)REPZ (REPZ (当相等当相等/ /为零时重复为零时重复) ) 该指令一般用在该指令一般用在CMPCMP、SCASSCAS指令前。指令前。 功能:每执行一次串指令(功能:每执行一次串指令(CXCX)1 1,并判断,

45、并判断ZFZF标志是否为标志是否为0 0, 只要(只要(CXCX)=0=0或或ZF=0ZF=0,则重复执行结束。,则重复执行结束。 (3 3)REPNZ (REPNZ (当不等当不等/ /不为零时重复不为零时重复) ) 该指令一般用在该指令一般用在CMPSCMPS、SCAS SCAS 指令前。指令前。 功能:每执行一次串指令(功能:每执行一次串指令(CXCX)1 1,并判断,并判断ZFZF标志是否为标志是否为0 0, 只要(只要(CXCX)=0=0或或ZF=1ZF=1,则重复执行结束。,则重复执行结束。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 202

46、1-7-137 汇编语言汇编语言 程序设计程序设计 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-138 汇编语言汇编语言 程序设计程序设计 例例: 使使0404H开始的开始的256个单元清个单元清0。程序如下:。程序如下: CLDCLD; 清除方向标志清除方向标志DFDF LEALEADIDI,04040404; 将目的地址将目的地址0404H0404H送送DIDI MOVMOVCXCX,0080H0080H; 共有共有128128个字个字 XORXORAXAX,AXAX; AXAX清清0 0 REPREPSTOSWSTOSW; 将将256

47、256个字节清个字节清0 0 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-139 汇编语言汇编语言 程序设计程序设计 例例: :在某字符串中查找是否存在在某字符串中查找是否存在“”字符。若存在,则将字符。若存在,则将 “”字符所在地址送入字符所在地址送入BXBX寄存器中,否则将寄存器中,否则将BXBX寄存器清寄存器清 “0”0”。程序如下:。程序如下: CLD CLD ;清除方向标志;清除方向标志DFDF MOVMOVDIDI,0100H0100H;送目标串首元素偏移地址;送目标串首元素偏移地址 MOVMOVALAL,;关键字;关键字ALA

48、L REPNEREPNESCASBSCASB ;找关键字;找关键字 ANDANDCXCX,0FFH0FFH JZJZZERZER DECDECDIDI MOVMOVBXBX,DIDI;关键字所在地址;关键字所在地址BXBX JMPJMPST0ST0 ZERZER: MOVMOVBXBX,0 0;未找到,;未找到,0BX0BX ST0ST0:HLTHLT 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-140 汇编语言汇编语言 程序设计程序设计 例例: : 检验一段被传送过的数据是否与源串完全相同检验一段被传送过的数据是否与源串完全相同. . 若

49、相同,若相同,BXBX置置0 0,否则,将第一个不相同数据的地,否则,将第一个不相同数据的地 址和内容分别送到址和内容分别送到BXBX和和ALAL中。中。 ANDCX,0FFH JZEQQ DECSI MOVBX,SI;第一个不相同字节偏移地址;第一个不相同字节偏移地址BX MOVAL,SI;第一个不相同字节内容;第一个不相同字节内容AL JMPSTOP EQQ: MOVBX,0;两串完全相同,;两串完全相同,BX0 STOP:HLT CLD MOV CX,100初始化初始化 MOV SI,2400H MOV DI,1200H; REPECMPSB;串比较,直到;串比较,直到ZF0或或CX0

50、单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-141 汇编语言汇编语言 程序设计程序设计 六、控制转移类指令六、控制转移类指令 1 1 无条件转移指令无条件转移指令 2 2 条件转移指令条件转移指令 3 3 循环控制指令循环控制指令 4 4 子程序调用指令子程序调用指令 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-142 汇编语言汇编语言 程序设计程序设计 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-143 汇编语言汇编语言 程序设计程

51、序设计 1 1 无条件转移指令无条件转移指令 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-144 汇编语言汇编语言 程序设计程序设计 JMP STATJMP STAT(段内直接转移)(段内直接转移) JMP BX JMP BX (段内间接转移)(段内间接转移) JMP FAR PRT ADD2JMP FAR PRT ADD2(段间直接转移)(段间直接转移) JMP DWOD PTRBX+ADDR3JMP DWOD PTRBX+ADDR3(段间间接转移)(段间间接转移) 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四

52、级 第五级 2021-7-145 汇编语言汇编语言 程序设计程序设计 2 2 条件转移指令条件转移指令 (1 1)简单条件转移指令)简单条件转移指令 (2 2)无符号数条件转移指令)无符号数条件转移指令 (3 3) 有符号数条件转移指令有符号数条件转移指令 它们都有通用的语句格式和功能。它们都有通用的语句格式和功能。 语句格式:语句格式: 标号:标号: 操作符操作符 短标号短标号 功能:功能: 如果条件满足,则(如果条件满足,则(IPIP)位移量)位移量IPIP。 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-146 汇编语言汇编语言 程序设

53、计程序设计 (1 1)简单条件转移指令)简单条件转移指令 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-147 汇编语言汇编语言 程序设计程序设计 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-148 汇编语言汇编语言 程序设计程序设计 (2 2)无符号数条件转移指令)无符号数条件转移指令 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-149 汇编语言汇编语言 程序设计程序设计 【例】比较无符号数大小,将较大的数存【例】比较无符号数大小,将

54、较大的数存 放放AXAX寄存器。寄存器。 CMP AX, BX ;(;(AX)()(BX) JNB NEXT ;若;若AX=BX,转移到,转移到NEXT XCHGAX,BX ;若;若AX=BXAX=BX,转移到,转移到NEXTNEXT XCHG XCHGAXAX,BXBX;若;若AXBXAXBX,交换,交换 NEXTNEXT: 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-152 汇编语言汇编语言 程序设计程序设计 3 3 循环指令循环指令 (1 1)循环指令)循环指令LOOPLOOP (2 2)相等)相等/ /为零循环指令为零循环指令LOO

55、PELOOPE (3 3)不相等)不相等/ /不为零循环指令不为零循环指令LOOPNE LOOPNE (4 4)CXCX为零转移指令为零转移指令JCXZJCXZ 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-153 汇编语言汇编语言 程序设计程序设计 (1 1)循环指令)循环指令LOOPLOOP 语句格式:语句格式: LOOP LOOP 短标号短标号 功能:(功能:(CXCX)1 01 0,则程序转移(循,则程序转移(循 环);否则,顺序执行。环);否则,顺序执行。 说明:使用说明:使用LOOPLOOP指令可代替两条指令:指令可代替两条指令: DEC CXDEC CX JNE JNE 短标号短标号 单击此处编辑母版标题样式 单击此处编辑母版文本样式 第二级 第三级 第四级 第五级 2021-7-154 汇编语言汇编语言 程序设计程序设计 (2 2)相等)相等/ /为零循环指令为零循环指令LOOPELOOPE 语句格式:语句格式: LOOPE LOOPE 短标号短标号 LOOPZ LOOPZ 短标号短标号 功能:(功能:(CXCX)1 01 0且且ZF=1ZF=1,则程序转移(循环);,则程序转移(循环); 否则,

温馨提示

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

评论

0/150

提交评论