汇编语言各种指令的解释与用法.doc_第1页
汇编语言各种指令的解释与用法.doc_第2页
汇编语言各种指令的解释与用法.doc_第3页
汇编语言各种指令的解释与用法.doc_第4页
汇编语言各种指令的解释与用法.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

【数据传输指令】一、通用数据传送指令1、传送指令 MOV (move)指令的汇编格式:MOV DST,SRC指令的基本功能:(DST)-(SRC) 将原操作数(字节或字)传送到目的地址。指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。指令的执行对标志位的影响:不影响标志位。指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;目的操作数DST不能是CS,也不能用立即数方式。2、进栈指令 PUSH (push onto the stack) 出栈指令 POP (pop from the stack)指令的汇编格式:PUSH SRC ;POP DST指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。PUSH SRC (SP)-(SP)-2 ;(SP)-(SRC)POP DST (DST)-(SP);(SP)-(SP)指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。指令对标志位的影响:PUSH 和 POP指令都不影响标志位。指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2; POP指令的DST不允许是CS寄存器;3、交换指令 XCHG (exchange)指令的汇编格式:XCHG OPR1,OPR2指令的基本功能:(OPR1)(OPR2)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。指令对标志位的影戏:不影响标志位。指令的特殊要求:不允许使用段寄存器。二、累加器专用传送指令4、输入指令 IN (input)输出指令 OUT (output)指令的汇编格式:IN ac,port port0FFHOUT port,ac port0FFH指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。IN ac,port port=0FFH (AL)-(port)传送字节 或 (AX)0FFH (AL)-(DX)传送字节或 (AX)-(DX)+1,(DX)传送字OUT port,ac port=0FFH (port)-(AL)传送字节 或 (port+1,port)0FFH (DX)-(AL)传送字节 或 (DX)+1,(DX)-(AX)传送字指令对标志位的影响:不影响标志位。指令的特殊要求:只限于在AL或AX与I/O端口之间传送信息。传送16位信息用AX,传送8位信息用AL,这取决于外设端口的宽度。5、换码指令 XLAT (translate)指令的汇编格式:XLAT opr 或 XLAT指令的基本功能:这条指令根据AL寄存器提供的位移量,将BX指使的字节表格中的代码换存在AL中。 (AL)-(DS)*16+(BX)+(AL)指令对标志位的影响:不影响标志位。指令的特殊要求:所建字节表格的长度不能超过256字节,因为存放位移量的是8位寄存器AL。opr为表格的首地址,因为opr所表示的偏移地址已存入BX寄存器,所以opr在换码指令中可有可无,有则提高程序的可读性。三、地址传送指令6、有效地址传送器 LEA (load effective address)指令的汇编格式:LEA reg,src指令的基本功能:LEA指令把源操作数的有效地址送到指定的寄存器,这个有效地址是由src选定的一种存储器寻址方式确定的。指令支持的寻址方式:各种存储器寻址方式。指令对标志位的影响:不影响标志位。指令的特出要求:指令中reg不能是段寄存器;7、指针送寄存器和DS LDS (load DS with point)指针送寄存器和ES LES (load ES with point)指令的汇编格式:LDS reg,src LES reg,src指令的基本功能:LDS和LES指令把确定内存单元位置的偏移地址送寄存器,段地址DS或ES。这个偏移地址和段地址(也称地址指针)是由src指定的两个相继字单元提供的。LDS reg,src (reg)-(src) (DS)-(src+2)LES reg,src (reg)-(src) (ES)-(src+2)指令支持的寻址方式:src必须为存储器寻址方式指令对标志位的影响:不影响标志位。指令的特殊要求:指令中REG不能是段寄存器;四、标志寄存器传送指令8、标志寄存器的低字节送AH LAHF (load AH with FLAGS)指令的汇编格式:LAHF指令的基本功能:(AH)-(FLAGS)0-7指令对标志位的影响:不影响标志位9、AH送标志寄存器低字节 SAHF(store AH into FLAGS)指令的格式:SAHF指令的基本功能:(FLAGS)0-7-(AH)指令对标志位的影响:由装入值来确定标志位的值。10、标志进栈 PUSHF (push the flags)指令的汇编格式:PUSHF指令的基本功能:(SP)-(SP)-2 (SP)+1,(SP)-(FLAGS)0-15指令对标志位的影响:不影响标志位。11、标志出栈 POPF (pop the FLAGES)指令的汇编格式:POPF指令的基本功能:(FLAGS)0-15-(SP)+1,(SP) (SP)-(SP)+2指令对标志位的影响:由装入值来确定标志位的值。【算术指令】一、加法指令12、加法指令 ADD (addition)指令的汇编格式:add dst,src指令的基本功能:(dst)-(src)+(dst)指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。指令对标志位的影响:SF=1 加法结果为负数(符号位为1)SF=0 加法结果为正数(符号位为0)ZF=1 加法结果为零ZF=0 加法结果不为零CF=1 最高有效位向高位有进位CF=0 最高有效位向高位无进位OF=1 两个同符号数相加(正数+正数或负数+负数),结果符号与其相反。OF=0 两个不同符号数相加,或同符号数相加,结果符号与其相同。13、带进为加法指令 ADC (add with carry)指令的汇编格式:ADD dst,src指令的基本功能:(dst)-(src)+(dst)+CF指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。指令对标志位的影响:SF=1 加法结果为负数SF=0 加法结果为正数ZF=1 加法结果为零ZF=0 加法结果不为零CF=1 最高有效位向高位有进位CF=0 最低有效位相高位无进位OF=1 两个同符号数相加,结果符号与其相反,OF=0 两个同符号数相加,或同符号相加,结果符号与其相同14、加1指令 INC (increament)指令的汇编格式:INC opr指令的基本功能:(opr)-(opr)指令支持的寻址方式 可以使用除立即数方式外的任何寻址方式指令对标志位的影响:SF=1 加法结果为负数SF=0 加法结果为正数ZF=1 加法结果为零ZF=0 加法结果不为零OF=1 两个同符号数相加,结果符号与其相反,OF=0 两个同符号数相加,或同符号相加,结果符号与其相同。二、减法指令15、减法指令 SUB (subtract)指令的汇编格式:SUB dst,src指令的基本功能:(dst)-(dst)-(src)指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。指令对标志位的影响:SF=1 减法结果为负数(符号位为1)SF=0 减法结果为正数(符号位为0)ZF=1 减法结果为零ZF=0 减法结果不为零CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)CF=0 二进制减法运算中最高有效为向高位无借位(被减数=减数,够减的情况)OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。16、带借位减法指令 SBB (subtract with borrow)指令的汇编格式:SBB dst,src指令的基本功能:(dst)-(dst)-(src)-CF指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。指令对标志位的影响:SF=1 减法结果为负数(符号位为1)SF=0 减法结果为正数(符号位为0)ZF=1 减法结果为零ZF=0 减法结果不为零CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)CF=0 二进制减法运算中最高有效为向高位无借位(被减数=减数,够减的情况)OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。17、减1指令 DEC (decrement)指令的汇编格式:DEC opr指令的基本功能:(opr)-(opr)-1指令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。指令对标志位的影响:SF=1 减法结果为负数(符号位为1)SF=0 减法结果为正数(符号位为0)ZF=1 减法结果为零ZF=0 减法结果不为零OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。18、比较指令 CMP (compare)指令的汇编格式:CMP opr1,opr2指令的基本功能:(opr1)-(opr2),根据相减结果设置条件码,但不回送结果。指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。指令对标志位的影响:SF=1 减法结果为负数(符号位为1)SF=0 减法结果为正数(符号位为0)ZF=1 减法结果为零ZF=0 减法结果不为零CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)CF=0 二进制减法运算中最高有效为向高位无借位(被减数=减数,够减的情况)OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。19、求补指令 NEG (negate)指令的汇编格式:NEG opr指令的基本功能:(opr)- -(opr)指令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。指令对标志位的影响:CF=1 不为0的操作数求补时 CF=0 为0的操作数求补时OF=1 操作数为-128(字节运算)或操作数为-32768(字运算)OF=0 当求补运算的操作数不为128(字节)或32768(字)时三、乘法指令20、无符号乘法指令 NUL (unsigned multiple)有符号乘法指令 IMUL(signed muliple)指令的汇编格式:NUL src IMUL src指令的基本功能:(AX)-(AL)*(src) (DX,AX)-(AX)*(src)指令支持的寻址方式:src可以使用除立即数方式以外的任一种寻址方式。指令对标志位的影响:乘法指令只影响标志位CF和OF,其他条件码位无定义。MUL指令的条件码设置为:CF OF=0 0 乘积的高一半为0(字节操作的(AH)或字操作的(DX)CF OF=1 1 乘积的高一半不为0IMUL指令的条件码设置为:CF OF=0 0 乘积的高一半为低一半的符号扩展.CF OF=1 1 其他情况指令的特殊要求:MUL和IMUL指令的区别仅在于操作数是无符号还是带符号数,它们的共同点是,指令中只给出源操作数src,目的操作数是隐含的,它只能是累加器(字运算为AX,字节运算为AL)。隐含的乘积寄存器是AX或DX(高位)和AX(低位)。四、符号扩展指令21、节扩展为字 CBW (convert byte to word)指令的汇编格式:CBW指令的基本功能:(AH)=00H 当(AL)的最高有效位为0时(AH)=FFH 当(AL)的最高有效位为1时指令对标志位的影响:不影响标志位指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器 AX寄存器中。22、字扩展为双字 CWD (convert word to double word)指令的汇编格式:CWD指令的基本功能:(DX)=0000H 当(AX)的最高有效位为0时(DX)=FFFFH 当(AX)的最高有效位为1时指令对标志位的影响:不影响标志位指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器或AX寄存器中。五、除法指令23、无符号数除法 DIV (unsigned divide)带符号数除法 IDIV (singed divide)指令的汇编格式:DIV src IDIV src指令的基本功能:字操作(AL)-(AX)/src的商 (AH)-(AX)/src的余数字节操作(AX)-(DX,AX)/src的商 (DX)-(DX,AX)/src的余数指令支持的寻址方式:src作为除数,可用除立即数以外的任一种寻址方式来取得。指令对标志位的影响:不影响条件码。指令的特殊要求:除法指令要求字操作时,被除数必须为32位,除数是16位,商和余数是16位的;字节操作时,被除数必须为16位,除数是8位,得到的商和余数是8位的。六、十进制调整指令【逻辑指令】一、逻辑运算指令的格式:AND dst,src指令的基本功能:(dst)-(dst)与(src)指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。指令对标志位的影响:指令执行后 CF 和 OF 置零,AF无定义。SF=1 指令执行后的结果为负数(符号位为1)SF=0 指令执行后的结果为正数(符号位为0)ZF=1 指令执行后的结果为零ZF=0 指令执行后的结果不为零PF=1 结果操作数中1的个数为偶数时置1PF=0 结果操作数中1的个数为奇数时置025、逻辑或 OR (logic or)指令的汇编格式:OR dst,src指令的基本功能:(dst)-(dst)或(src)指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,原操作数和目的操作数必须有一个寄存器寻址方式。指令对标志位的影响:令执行后 CF 和 OF 置零,AF无定义。SF=1 指令执行后的结果为负数(符号位为1)SF=0 指令执行后的结果为正数(符号位为0)ZF=1 指令执行后的结果为零ZF=0 指令执行后的结果不为零PF=1 结果操作数中1的个数为偶数时置1PF=0 结果操作数中1的个数为奇数时置026、逻辑非 NOT (logic not)指令的汇编格式:NOT orc指令的基本功能:(dst)-(opr)指令支持的寻址方式:除立即数寻址方式以外的其余寻址方式指令对标志位的影响:对标志位无影响27、异或 XOR (exclusice or)指令的汇编格式:XOR dst,src指令的基本功能:(dst)1时,cnt必须放入CL寄存器中。指令对标志位的影响:CF=移入的数值OF=1 当cnt=1时,移动后最高位的值发生变化。OF=0 当cnt=1时,移动时最高位的值未发生变化。SF、ZF、PF根据移动后的结果设置。35、带进位的循环左移 RCL (rotate left through carry)指令的汇编格式:RCL dst,cnt指令的基本功能:RCL 对由dst指定的寄存器或存储器操作数,连同进位标志CF左循环移动,m所指定的次数,每左移一次,把操作数的最高位移入CF,而CF中原有内容移入操作数的最低位。指定支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1时,1可以直接写在指令中,cnt1时,cnt必须放入CL寄存器中。指令对标志位的影响:CF=移入的数值。OF=1 当cnt=1时,移动后最高位的值未发生变化。OF=0 当cnt=1时,移动后最高位的值发生变化。SF、ZF、PF标志位不受影响。36、带进位的循环右移 RCR (rotate right through carry)指令的汇编格式:RCR dst,cnt指令的基本功能:RCR 对由dst指定的寄存器或存储器操作数,连同进位标志CF右循环移动,m所指定的次数,每右移一次,把操作数的最高低位移入CF,而CF中原有内容移入操作数的最高位。指令支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1时,1可以直接写入指令中,cnt1时,cnt必须放入CL寄存器中。指令对标志位的影响:CF=移入的数值。OF=1 当cnt=1时,操作数最高位的值未发生变化。OF=0 当cnt=1时,操作数最高位的值发生变化。SF、ZF、PF标志位不受影响。 【串处理指令】一、设置方向标志指令37、DF置零 CLD (clear direction flag)DF置一 STD (set direction flag)指令的汇编格式:CLDSTD指令的基本功能:CLD DF=0STD DF=1二、串处理指令38、串传送 MOVSB / MOVSW (move string byte/word)指令的汇编格式:MOVSBMOVSW指令的基本功能:(ES:DI)-(DS:SI)(SI)-(SI)+/-1(字节)或+/-2(字)(DI)-(DI)+/-1(字节)或+/-2(字)指令对条件码的影响:不影响条件码。指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI和DI寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。39、存串 STOSB / STOSW (stroe from string byte/word)指令的汇编格式:STOSBSTOSW指令的基本功能:(ES:DI)-(AL)或(AX)(DI)-(DI)+/-1(字节)或+/-2(字)指令对条件码的影响:不影响条件码。指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI和DI寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。40、取串LODSB / LODSW (load from string byte/word)指令的汇编格式:LODSBLODSW指令的基本功能:(AL)或(AX)-(DS:SI)(SI)-(SI)+/-1(字节)或+/-2(字)指令对条件码的影响:不影响条件码。指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI和DI寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。41、串比较 CMPSB / CMPSW (compare string byte/word)指令的汇编格式:CMPSBCMPSW指令的基本功能:(DS:SI)-(ES:DI) 根据比较结果设置条件码(SI)-(SI)+/-1(字节)或+/-2(字)(DI)-(DI)+/-1(字节)或+/-2(字)指令对条件码的影响:SF=1 减法结果为负数(符号位为1)SF=0 减法结果为正数(符号位为0)ZF=1 减法结果为零ZF=0 减法结果不为零CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)CF=0 二进制减法运算中最高有效为向高位无借位(被减数=减数,够减的情况)OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。42、串扫描 SCASB / SCASW (scan string byte / word)指令的格式:SCASBSCASW指令的基本功能:(AL)-(ES:DI)或(AX)-(ES:DI) 根据扫描比较的结果设置条件码。(DI)-(DI)+/-1(字节)或+/-2(字)指令对条件码的影响:SF=1 结果为负数(符号位为1)SF=0 结果为正数(符号位为0)ZF=1 结果为零ZF=0 结果不为零CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)CF=0 二进制减法运算中最高有效为向高位无借位(被减数=减数,够减的情况)OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。三、串重复前缀43、重复执行串 REP 指令的汇编格式:REP (CX)=重复次数指令的基本功能: (CX)=0时,串指令执行完毕,否则执行 (CX)(CX)1 执行串指令(MOVS或STOS) 重复执行44、相等/为零时重复执行串指令 REPE/REPZ指令的汇编格式:REPE / REPZ (CX)=比较/扫描的次数指令的基本功能: (CX)=0或ZF=0时,结束执行串指令,否则继续 (CX)(CX)1 执行串指令(CMPS或SCAS) 重复执行45、不等/不为零时重复执行串指令 REPNE / PEPNZ指令的汇编格式:REPNE / PEPNZ (CX)=比较/扫描的次数指令的基本功能: (CX)=0或ZF=1,结束执行串指令,否则继续 (CX)(CX)1 执行串指令(CMPS或SCAS) 重复执行【控制转移指令】一、无条件转移指令46、短转移 JMP SHORT label (short jump)指令的汇编格式:JMP SHORT label指令的基本功能:(IP)-当前(IP)+8位位移量 8位位移量是汇编程序在汇编源程序时,根据目标地址和当前IP之间的距离自动生成的。指令对条件码的影响:对标志位无影响。47、近转移 JMP NEAR PTR label (near jump)指令的汇编格式:直接转移 JMP label (direct jump)寄存器间接转移 JMP reg (register indirect jump)存储器间接转移 JMP WORD PTR OPR (memory indirect jump)指令的基本功能:JMP label (IP) - OFFSET label = (IP)当前16位位移量JMP reg (IP) - (reg)JMP WORD PTR OPR (IP) - (PA+1,PA)指令支持的寻址方式:指令中的转向地址可以是直接寻址方式、寄存器寻址方式、寄存器间接寻址方式和存储器寻址方式。指令对条件码的影响:对标志位无影响。48、远转移 JMP FAR PTR label (for jump)指令的汇编格式:JMP FAR PTR label指令的基本功能:(IP)-label的段内偏移地址 (CS)-label所在段的段地址指令支持的寻址方式:远转移的目的地址可以使用除立即寻址方式外的任何寻址方式来表示。指令对条件码的影响:对标志位无影响。二、条件转移指令指令的汇编格式及功能根据条件码的值转移:49、JZ(JE) OPR ZF=1 ZF=0(运算结果为0,ZF就置1)50、JNZ(JNE) OPR ZF=051、JS OPR SF=1 SF=0(二进制最高位是什么,SF就是什么,如最高位为1则SF=1)52、JNS OPR SF=053、JO OPR OF=1 OF=1 (两个负数相加变成正数,溢出) 54、JNO OPR OF=055、JP OPR PF=1 PF=0 (反映结果“1”的个数,奇数0 偶数个1) 56、JNP OPR PF=0 57、JC OPR CF=1 CF=1(最高位有进位或借位就置1) 58、JNC OPR CF=0比较两个无符号数,根据比较的结果转移59、JB(JNAE,JC) OPR CF=1 被减数小于减数则转移60、JNB(JAE,JNC) OPR CF=0 被减数大于或等于减数则转移61、JBE(JNA) OPR CF或ZF=1 被减数小于或等于减数则转移62、JNBE(JA) OPR CF或ZF=0 被减数大于减数则转移比较两个带符号数,根据比较结果转移63、JL/JNGE OPR SF异或OF=1 被减数小于减数则转移 64、JNL/JGE SF异或OF=0 被减数不小于减数则转移65、JLE/JNE (SF异或OF)与ZF=1 被减数不大于减数则转移66、JNLE/JG (SF异或OF)与ZF=0 被减数大于减数则转移根据CX寄存器的值转移67、JCXZ (CX)=0 CX内容为零则转移指令的特殊要求:所有条件转移指令都是短转移指令,转移的目标地址必须在当前IP地址的-128至+127字节范围之内,因此条件转移指令是2字节指令。三、循环指令68、循环 LOOP (loop)指令的汇编格式:LOOP label指令的基本功能: (CX)(CX)1 若(CX)0,则(IP)(IP)当前位移量,否则循环结束。指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用8位带符号数来表示的,转向地址在相对于当前IP值的128 127字节范围之内。69、为零/相等时循环 LOOPZ/LOOPE (loop while nonzero or equal)指令的汇编格式:LOOPNZ/LOOPNE label指令的基本功能: (CX)(CX)1 若ZF=1且(CX)0,则(IP)(IP)当前位移量,否则循环结束。指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用8位带符号数来表示的,转向地址在相对于当前IP值的128 127字节范围之内。70、不为零/不相等时循环 LOOPNZ/LOOPNE (loop while nonzero or not equal)指令的汇编格式:LOOPNZ/LOOPNE label指令的基本功能: (CX)(CX)1 若ZF=0且(CX)0,则(IP)(IP)当前位移量,否则循环结束。指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用8位带符号数来表示的,转向地址在相对于当前IP值的128 127字节范围之内。四、子程序调用71、段内直接近调用 CALL SUBROUT指令的基本功能:(SP)-(SP)-2(SP)+1,(sp)-(IP)(IP)-(IP)+16位位移量段内间接近调用 CALL DESTIN指令的基本功能:(SP)-(SP)-2(SP)+1,(SP)-(IP)(IP)-(EA)72、段间直接调用 CALL FAR PTR SUBROUT指令的基本功能:(SP)-(SP)-2,(SP)-(CS)当前(SP)-(SP)-2,(SP)-(IP)当前(IP)-偏移地址(在指令的第2、3个字节)(CS)-段地址(在指令的第4、5个字节)五、返回指令73、段内返回(近返回) RET指令的基本功能:(IP)-(SP)+1,(SP)(SP)-(SP)+2段间返回(远返回) RET指令的基本功能:(IP)-(SP),(SP)-(SP)+2(CS)-(SP),(SP)-(SP)+2带立即数返回 RET N执行操作: 返回地址出栈(操作同段内或段间返回) 修改堆栈指针:(SP) (SP)N六、中断及中断返回指令74、INT n 中断指令(interrupt),n为中断类型号执行操作: 入栈保存FLAGS:(SP) (SP)2,(SP) (FLAGS) 入栈保存返回地址:(SP) (SP)2,(SP) (CS) (SP) (SP)2,(SP) (IP) 转中断处理程序:(IP) (n4) (CS) (n42)75、IRET 中断返回指令(return from interrupt)执行操作: 返回地址出栈:(IP) (SP),(SP) (SP)2 (CS) (SP),(SP) (SP)2 FLAGS出栈:(FLAGS) (SP),(SP) (SP)276、INTO 溢出则中断(中断类型为4)执行操作:若OF=1(有溢出),则: 入栈保存FLAGS:(SP) (SP)2,(SP) (FLAGS) 入栈保存返回地址:(SP) (SP)2,(SP) (CS) (SP) (SP)2,(SP) (IP) 转中断处理程序:(IP) (44)= (10H) (CS) (442)= (12HHELLO,WORLD进阶汇编程序系列 Editor:admin Time:2004-3-21 12:49 Read:9785 Score:8 Print Writer:LLUCT Excerpt:80x86汇编小站 Preface:感谢网友lluct为本站提供原创.适合初学者学习哦 Content:TITLE *HELLO,WORLD进阶程序之选择分支 BY LLUCT* DATA SEGMENT ;定义数据段MSG1 DB *WELCOME TO MY PROGRAM BY LLUCT*,$;定义输出的第一个字符串信息,字符串必须用DB定义,$为结束标志MSG2 DB 1:BASIC MESSAGE 2:ADVANCED MESSAGE,$;定义输出的字符串信息:选择菜单MSG3 DB PLEASE CHOOSE:,$;定义输出的字符串信息:选择前缀MSG4 DB HELLO,WORLD!-,$;定义输出的字符串信息:分支1的信息MSG5 DB THIS IS MY FIRST ASM_86 PROGRAM! -,$;定义输出的字符串信息:分支2的信息ERRMSG DB CHOOSE ERROR! -_-b,$;定义输出的字符串信息:选择错误信息DATA ENDS ;数据段结尾CODE SEGMENT ;定义代码段 ASSUME CS:CODE ;规定CS的内容 ASSUME DS:DATA ;规定DS的内容START: MOV AX,DATA ;程序从START开始 MOV DS,AX ;DS置初值,DATA的段地址 CALL ENTER ;调用显示回车换行子程序 LEA DX,MSG1 ;输出第一个字符串的偏移地址 CALL DISPCHS ;调用显示字符串子程序 CALL ENTER ;调用显示回车换行子程序 CALL ENTER ;这个.同上啊- LEA DX,MSG2 ;输出第二个字符串的偏移地址 CALL DISPCHS ;调用显示字符串子程序AGAIN: CALL ENTER ;定义AGAIN标号.用于选择错误循环 LEA DX,MSG3 ;输出第三个字符串的偏移地址 CALL DISPCHS ;调用显示字符串子程序 MOV AH,01H ;调用1号功能:从键盘输入一个字符并回显 INT 21H ;完成输入回显 CMP AL,1 ;输入的字符和1相比较 JE BASICP ;如果相等,转移到BASICP标号(JE=Jump if Equal) CMP AL,2 ;输入的字符和2相比较 | JE ADVANP ;如果相等,转移到ADVANP标号(JE=如果相等就转移) JMP ERROR ;否则就无条件转移到ERROR标号EXIT: MOV AH,4CH ;4C号功能调用:终止当前程序并返回调用程序 INT 21H ;返回DOSBASICP: CALL ENTER ;什么,还要解释啊.晕-_-! LEA DX,MSG4 ;输出第三个字符串的偏移地址 CALL DISPCHS ;调用显示字符串子程序 CALL ENTER ;. JMP EXIT ;无条件转移到EXIT标号ADVANP: CALL ENTER ;55555555 LEA DX,MSG5 ;解释了四次,应该懂了吧 CALL DISPCHS ;调用显示字符串子程序 CALL ENTER ;再问就死给你看 JMP EXIT ;无条件转移到EXIT标号ERROR: CALL ENTER LEA DX,ERRMSG ;输出选择错误信息 CALL DISPCHS ;调用显示字符串子程序 MOV DL,07H ;输出ASCII码的报警

温馨提示

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

评论

0/150

提交评论