- 1、本文档共202页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
05章 微机的指令系统
3. 循环控制指令 用来控制一段程序的重复执行,重复次数由CX决定。2字节指令,与条件转移类似,转移的目标地址等于当前IP值加上8位位移量,循环指令中的8位位移量多为负值,这类指令均不影响标志。 (1)LOOP循环指令 指令格式: LOOP 目标标号 功能:用于控制重复执行一系列指令。事先将重复次数放在CX中,每执行一次LOOP指令,CX自动减1(但不影响标志)。如果减1后CX≠0,则转移到的标号处继续循环;若自动减1后CX=0,则结束循环,转去执行后继指令。一条LOOP指令在功能上相当于执行以下两条指令的功能: DEC CX JNZ 目标标号 也可以改用重复前缀REPNE或REPNZ,它们表示:当ZF=0且CX≠0时重复,直至ZF=1(发现两串有相同的)或CX=0(比完了)为止。退出时,若ZF=0,则两个信息串没有相同的。同样不能用CX=0(每重复一次CX减1,但并不影响标志)来判断两个信息串没有相同的,如果这样做,就会出现将前面的都不同而最后一个相同的异常情况当作两个信息串没有相同的,这一点也应注意。此指令常用在“两信息串大部分不同找相同的”的情况。 [例] 比较两串各为6个字节的信息串,如发现有不同的字符,转至FOUND。 CLD MOV AX,2000H MOV DS,AX MOV AX,3000H MOV ES,AX MOV SI,1500H MOV DI,0200H MOV CX,6 REPE CMPSB JNE FOUND ? ┇ FOUND: ┇ 找到后,SI、DI均指向下一个单元,要得到不相同字符的真实位置,尚需修改指针,利用指令DEC SI和DEC DI,即可得到不相同字符的真实位置。 5. 信息串扫描(搜索)指令SCAS 指令格式: SCAS dst 指令功能:从AL(字节操作)或AX(字操作)寄存器的内容减去以ES:DI为指针的目的串元素,不回送结果,但结果影响标志F。同时,操作后目的串指针会自动修改,指向下一个待搜索的串元素。 利用SCAS指令,可在内存中搜索所需要的信息,这个被搜索的信息也称为关键字。 指令执行前,必须事先将它存在AL(字节)或AX(字)中,才能用SCAS指令进行搜索。 SCAS指令前也可以加重复前缀REPE/REPZ(相等时重复)和REPNE/REPNZ(不等时重复),可以用来扫描某一个串,搜索其中是否有关键字。 具体作法是:将ES:DI指向被扫描的串,DF表示搜索的方向,扫描范围放在CX中,将需扫描的关键字放在AL(或AX)中。 指令REPNE SCASB是从目标串找关键字,操作一直进行到ZF=1,表示找到了,此时DI指向下一个单元,CX为剩下的个数;若退出时仍为ZF=0,则表示未找到,此时CX=0。 [例] 编写一内存自检程序,检查从2000H:0000H开始的64KB是否损坏,若损坏转RAM_ERR,若完好转RAM_OK。 MOV AX,2000H MOV ES,AX MOV DI,0 MOV CX,8000H MOV AX,5555H CLD REP STOSW ;先给每一单元写入55H MOV CX,8000H MOV DI,0 REPE SCASW ;扫描每个单元是否为55H? JNZ RAM_ERR ;有错转RAM_ERR MOV CX,8000H MOV DI,0 MOV AX,0AAAAH REP STOSW ;再给每一单元写入0AAH MOV CX,8000H MOV DI,0 REPE SCASW ;扫描每个单元是否为0AAH? JNZ RAM_ERR ;有错转RAM_ERR RAM_OK: ┇ ;内存完好处理程序段 RAM_ERR: ┇ ;内存损坏处理程序段 §5.5 控制转移(Control Jump)类指令 1. 无条件转移、调用和返回指令 (1)无条件转移指令(JMP) 指令格式: JMP 目标标号(TARGET) 这类指令又分成两种类型: 第一种类型 段内转移或近(NEAR)转移。 第二种类型 段间转移,又称为远(FAR)转移。 不论是段内还是段间转移,又可分为两种方式: ①直接转移,指
文档评论(0)