1、汇编语言课件05其他指令串操作指令串操作指令n串操作串操作:对内存中一个连续区域的数据对内存中一个连续区域的数据(如如数组、字符串等数组、字符串等)进行传送、比较等操作。进行传送、比较等操作。n为了更好地支持这种数据串类型的操作,为了更好地支持这种数据串类型的操作,80868086设计了串操作指令,同时还有重复前设计了串操作指令,同时还有重复前缀可以实现循环。缀可以实现循环。n串操作指令采用了特殊的寻址方式串操作指令采用了特殊的寻址方式n源操作数用寄存器源操作数用寄存器SISI间接寻址,段址在数据段间接寻址,段址在数据段DSDS中,目的操作数用寄存器中,目的操作数用寄存器DIDI间接寻址,段址
2、间接寻址,段址在附加段在附加段ESES中中n每执行一次串操作,源地址指针每执行一次串操作,源地址指针 SISI和目的地和目的地址指针址指针DIDI将自动修改:将自动修改:1 1或或2 2对于以字节为单位的数据串(指令助记符用对于以字节为单位的数据串(指令助记符用 B B结尾)结尾)操作,地址指针应该操作,地址指针应该1 1 对于以字为单位的数据串(指令助记符用对于以字为单位的数据串(指令助记符用 W W结尾)结尾)操作,地址指针应该操作,地址指针应该2 2n当当DFDF0,0,指针自动加指针自动加(可用可用CLDCLD指令清标志指令清标志),),当当DFDF1,1,指针自动减指针自动减(可用可
3、用STDSTD指令置标志指令置标志)数据串传送指令数据串传送指令n这组串操作指令实现对数据串的传送这组串操作指令实现对数据串的传送 MOVSMOVS、存储、存储STOSSTOS和读取和读取LODSLODS,可以配合,可以配合REPREP重重复前缀,它们不影响标志。复前缀,它们不影响标志。n串传送指令串传送指令MOVSMOVS将数据段中的一个字节或字数将数据段中的一个字节或字数据,传送至附加段的主存单元。据,传送至附加段的主存单元。MOVSBMOVSB;字节串传送字节串传送:ES:DIDS:SIES:DIDS:SI;然后:然后:SISISISI1 1,DIDIDIDI1 1MOVSWMOVSW;
4、字串传送字串传送:ES:DIDS:SIES:DIDS:SI;然后:然后:SISISISI2 2,DIDIDIDI2 2n串存储指令串存储指令STOSSTOS将将ALAL或或AXAX的内容存入附加的内容存入附加段的主存单元:段的主存单元:STOSBSTOSB;字节串存储:字节串存储:ES:DIALES:DIAL;然后:然后:DIDIDIDI1 1STOSWSTOSW;字串存储:字串存储:ES:DIAXES:DIAX;然后:然后:DIDIDIDI2 2n串读取指令串读取指令LODSLODS将数据段中的一个字节将数据段中的一个字节或字数据读到或字数据读到 ALAL或或AXAX寄存器:寄存器:LODS
5、BLODSB;字节串读取:字节串读取:ALDS:SIALDS:SI;然后:然后:SISISISI1 1LODSWLODSW;字串读取:字串读取:AXDS:SIAXDS:SI;然后:然后:SISISISI2 2n复前缀指令复前缀指令REPREP用在用在MOVSMOVS,STOSSTOS,LODSLODS指指令前,利用计数器令前,利用计数器 CXCX保存数据串长度,保存数据串长度,可以理解为可以理解为“当数据串没有结束当数据串没有结束(CX0CX0),则继续传送),则继续传送”:nREPREP ;每执行一次串指令,每执行一次串指令,CXCX减减1 1;直到;直到CXCX0 0,重复执行结束重复执行
6、结束n注意注意,串操作指令本身仅进行一个数据,串操作指令本身仅进行一个数据的操作,利用重复前缀才能实现连续操的操作,利用重复前缀才能实现连续操作作,实际上与实际上与LODSLODS联用不多。联用不多。例:将数据例:将数据段的段的sbufsbuf指示的指示的1KB1KB数据传送到数据传送到附加段的附加段的dbufdbuf缓冲区缓冲区movmov cx,1024 cx,1024;;设置数据串长度(循环次数):设置数据串长度(循环次数):mov si,offset sbufmov si,offset sbuf ;SI;SI指向数据段源缓冲区开始指向数据段源缓冲区开始mov di,offset dbu
7、fmov di,offset dbuf ;DI;DI指向附加段目的缓冲区开始指向附加段目的缓冲区开始cldcld ;规定规定DFDF0 0,进行地址增量,进行地址增量rep movsbrep movsb;重复字节传送:重复字节传送:ES:DIDS:SIES:DIDS:SI;如果设置如果设置CXCX512512,则用,则用REP MOVSWREP MOVSW例例:将附加段将附加段 64KB64KB主存区全部设置为主存区全部设置为 0 0cldcldmovmov di,0 di,0movmov ax,0 ax,0movmov cx,32 cx,32*10241024;CX;CX传送次数传送次数re
8、p stoswrep stosw;重复字传送:重复字传送:ES:DI0ES:DI0思考思考:如果不要如果不要cld 行不行行不行?串比较和串搜索指令串比较和串搜索指令n这组串操作指令实现对数据串的比较这组串操作指令实现对数据串的比较 CMPSCMPS和扫描(查找)和扫描(查找)SCASSCAS。由于串比较和。由于串比较和扫描的实质是进行减法运算,所以它们像扫描的实质是进行减法运算,所以它们像减法指令一样影响标志。这两个串操作指减法指令一样影响标志。这两个串操作指令可以配合重复前缀令可以配合重复前缀REPE/REPZREPE/REPZ和和REPNE/REPNZREPNE/REPNZ,通过,通过Z
9、FZF标志说明两数是否相标志说明两数是否相等。等。n串比较指令串比较指令CMPSCMPS用源数据串减去目的数据用源数据串减去目的数据串,以比较两者间的关系:串,以比较两者间的关系:CMPSBCMPSB;字节串比较:字节串比较:DS:SIDS:SIES:DIES:DI;然后:然后:SISISISI1 1,DIDIDIDI1 1CMPSWCMPSW;字串比较字串比较:DS:SIDS:SIES:DIES:DI;然后:然后:SISISISI2 2,DIDIDIDI2 2n串扫描指令串扫描指令SCASSCAS用用AL/AXAL/AX内容减去目的数内容减去目的数据串,以比较两者间的关系:据串,以比较两者间
10、的关系:SCASBSCASB;字节串扫描字节串扫描:ALALES:DIES:DI;然后然后:DIDIDIDI1 1 SCASWSCASW;字串扫描字串扫描:AXAXES:DIES:DI;然后:然后:DIDIDIDI2 2时间:时间:15+1 15+1/(rep)9+15/rep+1/rep(rep)9+15/rep+1/repn重复前缀指令重复前缀指令REPEREPE(或(或REPZREPZ)用在)用在CMPSCMPS、SCASSCAS指令前,利用计数器指令前,利用计数器 CXCX保存数据串保存数据串长度,同时判断比较是否相等,可以理长度,同时判断比较是否相等,可以理解为解为“当数据串没有结束
11、(当数据串没有结束(CX0),CX0),并且并且串相等(串相等(ZFZF1 1),则继续比较),则继续比较”。REPEREPE/REPZREPZ;每执行一次串指令,每执行一次串指令,CXCX减减1 1;当;当CXCX0 0或或ZFZF0 0,不再重复执行,不再重复执行n重复前缀指令重复前缀指令REPNEREPNE(或(或REPNZREPNZ)用在)用在CMPSCMPS、SCASSCAS指令前,利用计数器指令前,利用计数器CXCX保存保存数据串长度,同时判断比较是否不相等,数据串长度,同时判断比较是否不相等,可以理解为可以理解为“当数据串没有结束当数据串没有结束(CX0CX0),并且串不相等()
12、,并且串不相等(ZFZF0 0),),则继续比较则继续比较”。REPNEREPNE/REPNZREPNZ;每执行一次串指令,每执行一次串指令,CXCX减减1 1;只要;只要CXCX0 0或或ZFZF1 1,不再重复执行,不再重复执行例例 比较两个等长的字符串是否相同比较两个等长的字符串是否相同n假设一个字符串假设一个字符串 string1string1在数据段,另一个字符在数据段,另一个字符串串string2string2在附加段,都具有在附加段,都具有 countcount字符个数。字符个数。mov si,offsetmov si,offset string1;string1;lea si,
13、string1lea si,string1mov di,offsetmov di,offset string2;string2;lea si,string2lea si,string2mov cx,countmov cx,countcldcld repzrepzcmpsbcmpsb;比较两个字符比较两个字符n;最后判断最后判断ZF,ZF,若若ZF=1ZF=1,表示两个字符串相同;若,表示两个字符串相同;若ZF=0ZF=0,表示两个字符串不同,表示两个字符串不同,SI-1SI-1的值即为第一的值即为第一个不同字符所在单元的地址。个不同字符所在单元的地址。例例 在字符串中查找字符在字符串中查找字符
14、ii lea di,string lea di,string mov al,i mov al,i mov cx,count mov cx,count;count;count中是字符串的长度中是字符串的长度 cldcld repnz scasb repnz scasb 最后判断最后判断ZF,ZF,若若ZF=1ZF=1,表示找到字符,此时,表示找到字符,此时,SI-1SI-1的值即为字符所在单元的地址偏移;的值即为字符所在单元的地址偏移;ZF=0ZF=0,表示没找到,表示没找到,中断中断 中断:使中断:使CPU暂时中断正执行的程序,去暂时中断正执行的程序,去处理特殊事件的操作,处理完成后应该能处理
15、特殊事件的操作,处理完成后应该能继续以前(被中断的)操作。继续以前(被中断的)操作。中断源中断源:发出中断请求,引起:发出中断请求,引起CPU中断的中断的事件、来源。事件、来源。中断传送方式是中断传送方式是CPU与外设之间通信的一与外设之间通信的一种有效方法,避免了种有效方法,避免了CPU反复查询状态、反复查询状态、等待外设,提高了等待外设,提高了CPU的利用率,也提高的利用率,也提高了计算机处理各种突发事件或外部事件的了计算机处理各种突发事件或外部事件的能力。能力。例:有例:有n个字符通过串行口个字符通过串行口1(com1)送到调制)送到调制/解调器解调器查询方式发送:查询方式发送:cx=0
16、si=数据区开始地址(缓冲区)数据区开始地址(缓冲区)cx=n?结束结束com1口空?口空?是是否否是是否否lodsbout com1口,口,alinc cx例:有例:有n个字符通过串行口个字符通过串行口1(com1)送到调制)送到调制/解调器解调器中断方式发送:中断方式发送:com1口空?口空?中断部分中断部分数据准备数据准备结束结束是是否否否否第一个数据送第一个数据送com1口口数据传输完?数据传输完?后续数据送后续数据送com1口口计数加计数加1中断返回中断返回是是传送结束工作传送结束工作外部设备中断处理过程概述外部设备中断处理过程概述n每当外部设备准备好接受每当外部设备准备好接受/提供
17、数据时:提供数据时:1)向向CPU发出中断请求;发出中断请求;2)CPU暂停执行当前的程序(响应中断);暂停执行当前的程序(响应中断);3)转去执行输入)转去执行输入/输出操作(中断服务);输出操作(中断服务);4)输入)输入/输出完成后返回原程序继续执行(中输出完成后返回原程序继续执行(中断返回)。断返回)。80X86处理器计算机系统的中断源处理器计算机系统的中断源n软件中断:软件中断:由执行处理器指令引起的中断,也称由执行处理器指令引起的中断,也称内部中断。内部中断。n硬件中断:硬件中断:由计算机故障、异常事件、外部设备由计算机故障、异常事件、外部设备的的I/O请求引起的中断,也称外部中断
18、请求引起的中断,也称外部中断。n中断优先级中断优先级:根据各中断源的重要性(轻重缓急):根据各中断源的重要性(轻重缓急)给中断请求赋予的等级编号。当有多个中断请求给中断请求赋予的等级编号。当有多个中断请求发生时,按中断优先级顺序响应中断请求发生时,按中断优先级顺序响应中断请求。n80X86处理处理256种类型的中断,编号为种类型的中断,编号为0255,称,称为中断类型号。不同的中断类型号标识了不同的为中断类型号。不同的中断类型号标识了不同的中断源。中断源。IBM PC 的中断源的中断源(P143)中断的分类中断的分类 外部中断:非外部中断:非CPUCPU内部原因产生的中断内部原因产生的中断 内
19、部中断:内部中断:CPUCPU内部原因产生的中断内部原因产生的中断非屏蔽中断非屏蔽中断NMI:NMI:不受不受IFIF限制,限制,CPUCPU必须响应必须响应可屏蔽中断可屏蔽中断INTRINTR:CLI CLI IF=0IF=0关中断关中断STISTIIF=1IF=1开中断开中断CPUCPU错误错误:除法出错、溢出:除法出错、溢出INTOINTO由由INTINT指令引起的软中断指令引起的软中断DEBUGDEBUG设置的中断设置的中断 在计算机系统中,各中断源产生的中断请求是随机的,在计算机系统中,各中断源产生的中断请求是随机的,CPUCPU如何及时响应和处理各中断请求?如何及时响应和处理各中断
20、请求?中断响应和处理流程中断响应和处理流程中断优先级:内部中断中断优先级:内部中断 非屏蔽中断非屏蔽中断 可屏蔽中断可屏蔽中断 单单步执行步执行 CPU CPU每执行完一条指令后都要检测是否有中断请求产生。每执行完一条指令后都要检测是否有中断请求产生。8086/8088中断响应和处理流程中断响应和处理流程YN栈顶内容依此退栈顶内容依此退栈到栈到IP,CS,FLAG(IRET指指令)令)非屏蔽中断非屏蔽中断可屏蔽中断可屏蔽中断允许中断允许中断单步中断单步中断继续下条指令继续下条指令AA标志进栈标志进栈置中断允许置中断允许清单步标志清单步标志CS进栈进栈IP进栈进栈根据中断号置根据中断号置CSIP
21、中断处理程序中断处理程序INTOINTOINT nINT n除以除以0 0YNYN 8086/8088中断响应和处理流程中断响应和处理流程YN栈顶内容依此退栈顶内容依此退栈到栈到IP,CS,FLAG(IRET指指令)令)非屏蔽中断非屏蔽中断可屏蔽中断可屏蔽中断允许中断允许中断单步中断单步中断继续下条指令继续下条指令AA标志进栈标志进栈置中断允许置中断允许清单步标志清单步标志CS进栈进栈IP进栈进栈根据中断号置根据中断号置CSIP中断处理程序中断处理程序INTOINTOINT nINT n除以除以0 0?NYNY中断向量表中断向量表 当处理器接收到某个中断请求后,如何快速找到处理当处理器接收到某
22、个中断请求后,如何快速找到处理该中断请求的中断服务程序入口地址,以便及时地完成中该中断请求的中断服务程序入口地址,以便及时地完成中断服务呢?断服务呢?将主存开始的将主存开始的1K1K字节构成中断向量表(每四个字节一字节构成中断向量表(每四个字节一项,共项,共256256个,编号为个,编号为0-2550-255(00H-0FH00H-0FH)中断向量表中断向量表 每个中断类型号在中断向量表中都对应有一个中断向量每个中断类型号在中断向量表中都对应有一个中断向量 中断向量占用中断向量占用4 4字节:字节:(前两个字节)(前两个字节)=存放中断服务程序入口地址的偏存放中断服务程序入口地址的偏移地址移地
23、址 (后两个字节)(后两个字节)=存放中断服务程序入口地址的段存放中断服务程序入口地址的段地址地址 中断入口偏移中断入口偏移中断入口段址中断入口段址中断入口偏移中断入口偏移中断入口段址中断入口段址中断入口偏移中断入口偏移中断入口段址中断入口段址.00000H00000H00004H00004H003FCH003FCH0号中断入口号中断入口1号中断入口号中断入口0FF号中断入口号中断入口YN栈顶内容依此退栈顶内容依此退栈到栈到IP,CS,FLAG(IRET指指令)令)非屏蔽中断非屏蔽中断可屏蔽中断可屏蔽中断允许中断允许中断单步中断单步中断继续下条指令继续下条指令AA标志进栈标志进栈置中断允许置中
24、断允许清单步标志清单步标志CS进栈进栈IP进栈进栈根据中断号置根据中断号置CSIP中断处理程序中断处理程序INTOINTOINT nINT n除以除以0 0?NYNYYN栈顶内容依此退栈顶内容依此退栈到栈到IP,CS,FLAG(IRET指指令)令)非屏蔽中断非屏蔽中断可屏蔽中断可屏蔽中断允许中断允许中断单步中断单步中断继续下条指令继续下条指令AA标志进栈标志进栈置中断允许置中断允许清单步标志清单步标志CS进栈进栈IP进栈进栈根据中断号置根据中断号置CSIP中断处理程序中断处理程序INTOINTOINT nINT n除以除以0 0IP=IP=中断号中断号*44CS=CS=中断号中断号*4+24+
25、2NYNY中断嵌套问题:中断嵌套问题:当在中断处理程序过程中又发生中断,当在中断处理程序过程中又发生中断,就形成了中断嵌套。就形成了中断嵌套。中断处理的基本流程中断处理的基本流程:CLICLI ;关中断关中断利用利用PUSHPUSH指令保护中断现场指令保护中断现场;STISTI;开中断开中断.中断处理中断处理;用用POPPOP指令恢复现场指令恢复现场;IRETIRET;中断返回中断返回INT nINT n;中断调用指令:产生;中断调用指令:产生n n号软中断号软中断IRETIRET;中断返回指令:实现中断返回;中断返回指令:实现中断返回INTOINTO;溢出中断指令:;溢出中断指令:;若溢出标
26、志;若溢出标志OF=1OF=1,产生,产生4 4号中断号中断;否则顺序执行;否则顺序执行中断的有关指令中断的有关指令INT指令指令n称为软中断指令,处理器执行到该指令时,将产称为软中断指令,处理器执行到该指令时,将产生中断请求,完成指定类型的中断服务。生中断请求,完成指定类型的中断服务。格格 式:式:INT nINT n(n:0-255)(n:0-255)操操 作:作:(SP)(SP)-2(SP)(SP)-2,(SP)+1(SP)+1,(SP)(FR)(SP)(FR)(SP)(SP)-2(SP)(SP)-2,(SP)+1(SP)+1,(SP)(CS)(SP)(CS)(SP)(SP)-2(SP)
27、(SP)-2,(SP)+1(SP)+1,(SP)(IP)(SP)(IP)(IP)(n(IP)(n 4)4)(CS)(n(CS)(n 4+2)4+2)功能功能:保护中断断点保护中断断点 按中断类型号按中断类型号N N获取中断服务程序入口地址获取中断服务程序入口地址-CS:IP-CS:IP 转移到中断服务程序执行转移到中断服务程序执行INTO:INTO:等同于等同于 INT 4INT 4IRET指令指令格式格式:IRET操作操作:(IP)(SP)+1,(SP),(SP)(SP)+2 (CS)(SP)+1,(SP),(SP)(SP)+2 (FR)(SP)+1,(SP),(SP)(SP)+2恢复中断断
28、点恢复中断断点功能:返回到软中断指令的下一条指令(中断断点)继续执行,功能:返回到软中断指令的下一条指令(中断断点)继续执行,实现中断返回。实现中断返回。处理器控制类指令处理器控制类指令n处理器控制类指令用来控制处理器控制类指令用来控制CPUCPU的状的状态,使态,使CPUCPU暂停、等待或空操作等暂停、等待或空操作等nNOPNOP;空操作指令空操作指令 (时间:时间:3)3)nHLTHLT;暂停指令:暂停指令:CPUCPU进入暂停状态进入暂停状态nESC 6ESC 6位立即数位立即数,reg/mem,reg/mem;交权指交权指令令ESCESC:把浮点指令交给浮点处理器:把浮点指令交给浮点处理器nWAITWAIT;等待指令:等待指令:CPUCPU进入等待状态进入等待状态nSEG:SEG:;段超越前缀,即段超越前缀,即CS:CS:、SS:SS:、DS:DS:、ES:ES:nLOCKLOCK;封锁前缀封锁前缀:封锁总线封锁总线其它待介绍的指令其它待介绍的指令n控制转移指令控制转移指令