循环控制指令过程调用和返回指令串操作指令中断_第1页
循环控制指令过程调用和返回指令串操作指令中断_第2页
循环控制指令过程调用和返回指令串操作指令中断_第3页
循环控制指令过程调用和返回指令串操作指令中断_第4页
循环控制指令过程调用和返回指令串操作指令中断_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

四控制转移指令转移类指令循环控制指令过程调用和返回指令中断控制类指令2循环控制指令用在循环程序中以确定是否要继续循环。循环次数通常置于CX中。转移的目标应在距离本指令-128~+127的范围之内。循环控制指令不影响标志位。格式:LOOPlabel操作:(CX)-1→CX;若(CX)≠0,则转至label处执行;否则退出循环,执行LOOP后面的指令。

LOOP指令与下面的指令段等价:

DECCX JNZlabel(1)循环转移指令LOOP(2)LOOPZ(LOOPE)格式:LOOPZlabel操作:(CX)-1→CX;若(CX)≠0且ZF=1,则转至label处继续循环;否则退出循环,执行LOOP后面的指令。(3)LOOPNZ(LOOPNE)格式:LOOPNZlabel操作:(CX)-1→CX;若(CX)≠0且ZF=0,则转至label处继续循环;否则退出循环,执行LOOP后面的指令。3过程调用和返回指令过程(子程序):

一段具有特定功能的,供其它程序调用的公用程序。特点调用子程序时,IP(CS)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到IP(CS)。子程序执行结束后一般均要返回调用程序。一次定义,可多次调用;可带参数调用,以完成不同的功能。(1)调用指令CALL一般格式:CALL

sub;sub为子程序的入口。根据子程序入口的寻址方式,子程序调用有四类。①段内直接调用

子程序的偏移地址直接由CALL指令给出。格式:CALLNEAR_PROC

CALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上。

②段内间接调用子程序的偏移地址在寄存器或存储器中。格式:CALL

mem16/reg16 CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP。例:

CALLAX

;调用地址由AX给出

CALLWORDPTR[SI]

;调用地址由存储器给出.例:对于CALLWORDPTR[SI]这条指令若:(DS)

=

8000H,(SI)

=

1200H则指令操作图示如下。CALLIPHIPL代码段数据段81200H81201H③段间直接调用

子程序的段地址和偏移地址直接由CALL指令给出。格式:CALLFAR_PROC;FAR_PROC为远过程的地址指令的操作:((SP)-1,(SP)-2)←(CS);原CS压栈 SP←(SP)-2

CS←新段地址

((SP)-1,(SP)-2)←(IP);原IP压栈 SP←(SP)-2

IP←新偏移地址例:CALL 2000H:1000H④段间间接调用

子程序的段地址和偏移地址为存储器的连续4个单元中的内容。格式:CALL

mem32指令的操作为:((SP)-1,(SP)-2)←(CS);原CS压栈 SP←(SP)-2 CS←(mem32+2)

((SP)-1,(SP)-2)←(IP);原IP压栈 SP←(SP)-2 IP←(mem32)例:CALLDWORDPTR[DI]

调用地址在[DI],[DI]+1,[DI]+2,[DI]+3四个存储单元中。低字内容为偏移地址,高字内容为段地址。CALL代码段数据段IPHIPLCSHCSL[DI][DI]+1[DI]+2[DI]+3CALLDWORDPTR

[DI]

(2)返回指指令RET段内返回指令令RET的操作为为:IP←((SP)+1,(SP));栈顶内容容弹出到到IPSP←←(SP)+2段间返回指令令RET的操作为为:IP←((SP)+1,(SP));栈顶内容容弹出到到IPSP←←(SP)+2CS←←((SP)+1,(SP));栈顶内容容弹出到到CSSP←(SP)+2另有一种种带立即数数返回指指令:RETn其中n为偶数,表示从从栈顶弹弹出地址址后另外外丢弃的的字节数数。例例:RET4;返回后再再丢弃栈栈顶的4个字节4中断控制制指令8086/8088CPU在程序中中允许安安排一条条中断指指令来引引起一个个中断过过程,这这种中断断叫内部中断断,或叫软中断。中断指令令共有三三条:(1)INTn执行类型型n的中断服服务程序序,N=0~255(2)INTO执行溢出中断断的中断服服务程序序;(3)IRET从中断服服务程序序返回调调用程序序。四串操操作指令令字符串传传送指令令MOVSB/MOVSW字符串比比较指令令CMPSB/CMPSW字符串检检索指令令SCASB/SCASW取字符串串指令LODSB/LODSW存字符串串指令STOSB/STOSW串:顺序放放在内存中的一组相同类型型的数据。。串操作:对串中的的元素进进行相同同的操作作。串操作的的寻址方方式:源操作数数指针———DS:SI(DS可重设)目的操作作数指针针——ES:DI每次串操操作后:串串操操作指令令自动修修改SI和DI———字节:±1,字:±2。DF标志决定±。注意:退出串操操作后,,指针指指向最后后操作的的元素的的下一个元元素。功能:可完成存储单元元到存储单元元的传送、、比较((也仅是是串指令令可以))。有的串操操作指令令前面可可加重复前缀缀。当使用用重复前前缀时,,操作重复次数数由CX决定(CX自动减量量)。该指令令重复执执行,直至(CX)=0为止。注意:执行串指令令之前,,应先进进行如下下设置:1)源串首地地址(末末地址))→SI2)目的串串首地址址(末地地址)→→DI3)串长度度→CX4)建立方方向标志志(CLD使DF=0(增),STD使DF=1(减))(1)串传送送指令MOVSB/MOVSW指令执行行的操作作为:MOVSB;((ES):(DI))←((DS):(SI))SI±1,DI±1MOVSW;(ES):(DI+1)(DI))←((DS):(SI+1)(SI))SI±2,DI±2注意:原串用DS:SI寻址,目标串用用ES:DI寻址是唯一的原操作作数和目目的操作作数在存储器中中的传送指指令。例:在数据段段ADDR1地址处有有200个数据,,要传送送到数据据段地址址ADDR2处。MOVSI,OFFSETADDR1MOVDI,OFFSETADDR2MOVCX,200CLDREPMOVSBLEASI,ADDR1LEADI,ADDR2(2)串比较较指令CMPSB/CMPSW指令执行行的操作作为:CMPSB;((DS):(SI))-((ES):(DI))SI±1,DI±1CMPSW;((DS):(SI+1)(SI))-((ES):(DI+1)(DI))SI±2,DI±2比较的结结果只反反映在标标志位上上,串本本身无变变化。本指令可可用来检检查两个个串是否相等等。与重复前缀缀REPZ/REPE、REPNZ/REPNE结合使用用。(3)串扫描描SCASB/SCASW执行的操操作:对字节:(AL)-((ES):(DI))DI±±1对字:(AX)-((ES):(DI+1)(DI))DI±2搜索指令令执行的的仍是比较(减法)操作,结果只影响标标志位。。要搜索的的关键字放在AL(字节)或AX(字)中。本指令用于在串串中查找找指定的的信息。与重复前前缀REPZ/REPE、REPNZ/REPNE结合使用用。(4)串读取取指令LODSB/LODSW执行的操操作为::对字节:(AL)←((DS):(SI))SI±1对字:(AX)←((DS):(SI+1)(SI))SI±2串读取指指令通常常不加重重复前缀缀。LODSB等价于:LODSW等价于:MOVAL,[SI]MOVAX,[SI]INCSIINCSIINCSI(5)串存储储指令STOSB/STOSW写指令的的操作为为:对字节:((ES):(DI))←(AL)DI±1对字:((ES):(DI+1)(DI))←(AX)DI±2本指令用用于把一一块存储储区域填填充成某某一初初始值(即对存储储区进行行初始化)。例:把1000H开始的100个存储单单元填入入ASCII码2AH(*)。程序段如如下:MOVDI,1000H;首地址MOVAL,2AH;‘‘*’MOVCX,100;重复执行行100次CLD;增量修改改DIREPSTOSB本章小结结80x86指令的操操作数包包括3种形式:立立即数、寄寄存器(通通用寄存器器和段寄存存器)与内内存操作数数。对于内存操操作数,由由操作数的的形式可计计算出有效效地址。在在缺省情况况下,其段段地址隐含含在段寄存存器DS或SS中,除非由由段超越前前缀明确给给出。大多数指令令(如传送送类指令))的执行不不影响标志志位,某些些指令(如如算术指令令)的执行行按一般规规则影响标标志位,还还有一部分分指令(如如逻辑指令令)会按特特定方式((清0、置1等)影响标标志位。部分8086/8088常用指令指令类型助记符数据传送数据传送MOV,PUSH/POP,XCHG等地址传送LEA,LDS,LES输入输出IN,OUT算术运算加法ADD,ADC,INC减法SUB,SBB,DEC,NEG,CMP乘/除法MUL,IMUL,DIV,IDIV逻辑AND,OR,NOT,XOR,TEST移位SHL/SHR/SAR,ROL/ROR,RCL/RCR串操作MOVS,CMPS,SCAS,LODS,STOS控制转移JMP,JXX,LOOP,CALL/RET,INT/IRET练习:已知(AX)=1234H,执行下面3条指令后,(AX)=________.MOVBX,AXNEGBXADDAX,BX0000H(2)如执行XORAH,AHMOVAL,90HCWD指令后,结果是_____________(DX,AX)=00000090H(3)解析下面程程序段,回答问题:MOVCX,DXNOTCXADDCX,DXINCCX问:(CX)=_________,(ZF)=________0000H1(4)下面指令序序列完成的的运算表达达式应是______________MOVAL,BYTEPTRXSHLAL,1DECALMOVBYTEPTRY,ALY=2*X-1MOVCL,8ROLAX,CLADDAX,BX(5)已知(AX)=0012H,(BX)=0043H,要求把它们们形成(AX)=1234H提示:可以以用循环移移位指令作业业1.指出下列指指令的错误误:(1)MOVAX,[S

温馨提示

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

评论

0/150

提交评论