汇编语言--指令系统整理总结 对于计算机软件专业的学生,适当的学习一些汇编语言知识,我认为很重要,有助于你对于计算机底层工作的了解, 帮助你更好的理解计算机高级语言,汇编原理,也对于学习操作系统很有帮助... 近来自己在学汇编语言... 整理总结了常用的一些指令,认为对于学习汇编的龙友会有一些帮助 每条指令 均按照 1、指令的汇编格式 2、指令的基本功能 3、指令的寻址方式 4、指令对标志位的影响 5、指令的特殊要求 这 5 条内容的形式来对每条指令进行归纳总结.... [数据传送指令] 一、通用数据传送指令 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 port<=0FFH IN ac,DX port>0FFH OUT port,ac port<=0FFH OUT DX,ac port>0FFH 指令的基本功能:对 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)<-(port+1,port)传送字 IN ac,DX port>0FFH (AL)<-((DX))传送字节 或 (AX)<-((DX)+1,(DX))传送字 OUT port,ac port<=0FFH (port)<-(AL)传送字节 或 (port+1,port)<-(AX)传送字 OUT DX,ac 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 乘积的高一半不为 0 IMUL 指令的条件码设置为: 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 位的。 六、十进制调整指令 [逻辑指令] 一、逻辑运算 24、逻辑与 AND (logic and) 指令的汇编格式:AND dst,src 指令的基本功能:(dst)<-(dst)与(src) 指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地 操作数必须有一个寄存器寻址方式。 指令对标志位的影响:指令执行后 CF 和 OF 置零,AF 无定义。 SF=1 指令执行后的结果为负数(符号位为 1) SF=0 指令执行后的结果为正数(符号位为 0) ZF=1 指令执行后的结果为零 ZF=0 指令执行后的结果不为零 PF=1 结果操作数中 1 的个数为偶数时置 1 PF=0 结果操作数中 1 的个数为奇数时置 0 25、逻辑或 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 的个数为偶数时置 1 PF=0 结果操作数中 1 的个数为奇数时置 0 26、逻辑非 NOT (logic not) 指令的汇编格式:NOT orc 指令的基本功能:(dst)<-(opr) 指令支持的寻址方式:除立即数寻址方式以外的其余寻址方式 指令对标志位的影响:对标志位无影响 27、异或 XOR (exclusice or) 指令的汇编格式:XOR dst,src 指令的基本功能:(dst)<-(dst)异或(src) 指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,原操作数和目的 操作数必须有一个寄存器寻址方式。 指令对标志位的影响:令执行后 CF 和 OF 置零,AF 无定义。 SF=1 指令执行后的结果为负数(符号位为 1) SF=0 指令执行后的结果为正数(符号位为 0) ZF=1 指令执行后的结果为零 ZF=0 指令执行后的结果不为零 PF=1 结果操作数中 1 的个数为偶数时置 1 PF=0 结果操作数中 1 的个数为奇数时置 0 28、测试指令 TEST 指令的汇编格式:TEST opr1,opr2 指令的基本功能:(opr1)与(opr2) 指令支持的寻址方式:两个操作数不能同时为存储器寻址,即为除源操作数为立即数的情况外,源操作数和目的 操作数必须有一个寄存器寻址方式。 指令对标志位的影响:令执行后 CF 和 OF 置零,AF 无定义。 SF=1 指令执行后的结果为负数(符号位为 1) SF=0 指令执行后的结果为正数(符号位为 0) ZF=1 指令执行后的结果为零 ZF=0 指令执行后的结果不为零 PF=1 结果操作数中 1 的个数为偶数时置 1 PF=0 结果操作数中 1 的个数为奇数时置 0 二、移位指令 29、逻辑左移 SHL (shift logical left) 指令的汇编格式:SHL dst,cnt 指令的基本功能:SHL 指令向左逐位移动 cnt 次,每次逐位移动后,最低位用 0 来补充,最高位移入 CF。 指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1 时,1 可以 直接写在指令中,cnt〉1 时,cnt 必须放入 CL 寄存器中。 指令对标志位的影响:CF=移入的数值 OF=1 当 cnt=1 时,移动后最高位的值发生变化。 OF=0 当 cnt=1 时,移动时最高位的值未发生变化。 SF、ZF、PF 根据移动后的结果设置。 30、逻辑右移 SHR (shift logical right) 指令的汇编格式:SHR dst,cnt 指令的基本功能:SHR 指令向右逐位移动 cnt 次,每次逐位移动后,最高位用 0 来补充,最低位移入 CF。 指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1 时,1 可以 直接写在指令中,cnt〉1 时,cnt 必须放入 CL 寄存器中。 指令对标志位的影响:CF=移入的数值 OF=1 当 cnt=1 时,移动后最高位的值发生变化。 OF=0 当 cnt=1 时,移动时最高位的值未发生变化。 SF、ZF、PF 根据移动后的结果设置。 31、算术左移 SAL (shift arithmetic left) 指令的汇编格式:SAL dst cnt 指令的基本功能:SAL 指令向左逐位移动 cnt 次,每次逐位移动后,最低位用 0 来补充,最高位移入 CF。 指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1 时,1 可以 直接写在指令中,cnt〉1 时,cnt 必须放入 CL 寄存器中。 指令对标志位的影响:CF=移入的数值 OF=1 当 cnt=1 时,移动后最高位的值发生变化。 OF=0 当 cnt=1 时,移动时最高位的值未发生变化。 SF、ZF、PF 根据移动后的结果设置。 32、算术右移 SAR (shift arithmetic right) 指令的汇编格式:SAR dst,cnt 指令的基本功能:SAR 指令向右逐位移动 cnt 次,每次逐位移动后,最高位用符号位来补充,最低位移入 CF。 指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1 时,1 可以 直接写在指令中,cnt〉1 时,cnt 必须放入 CL 寄存器中。 指令对标志位的影响:CF=移入的数值 OF=1 当 cnt=1 时,移动后最高位的值发生变化。 OF=0 当 cnt=1 时,移动时最高位的值未发生变化。 SF、ZF、PF 根据移动后的结果设置。 33、循环左移 ROL (rotate left) 指令的汇编格式:ROL dst,cnt 指令的基本功能:ROL 对由 dst 指定的寄存器或存储器操作数左移循环移动 cnt 所指定的次数,每左移一次,把 最高位同时移入 CF 和操作数最低位。 指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1 时,1 可以 直接写在指令中,cnt〉1 时,cnt 必须放入 CL 寄存器中。 指令对标志位的影响:CF=移入的数值 OF=1 当 cnt=1 时,移动后最高位的值发生变化。 OF=0 当 cnt=1 时,移动时最高位的值未发生变化。 SF、ZF、PF 根据移动后的结果设置。 34、循环右移 ROR (rotate right) 指令的汇编格式:ROR dst,cnt 指令的基本功能:ROR 对由 dst 指定的寄存器或存储器操作数右移循环移动 cnt 所指定的次数,每右移一次,把 最低位同时移入 CF 和操作数最高位。 指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1 时,1 可以 直接写在指令中,cnt>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 可以 直接写在指令中,cnt〉1 时,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 可以 直接写入指令中,cnt〉1 时,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) 指令的汇编格式:CLD STD 指令的基本功能:CLD STD DF=0 DF=1 二、串处理指令 38、串传送 MOVSB / MOVSW (move string byte/word) 指令的汇编格式:MOVSB MOVSW 指令的基本功能:(ES:DI)<-(DS:SI) (SI)<-(SI)+/-1(字节)或+/-2(字) (DI)<-(DI)+/-1(字节)或+/-2(字) 指令对条件码的影响:不影响条件码。 指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是 SI 和 DI 寄存器 的间接寻址方式。源串允许使用段跨越前缀来指定段。 39、存串 STOSB / STOSW (stroe from string byte/word) 指令的汇编格式:STOSB STOSW 指令的基本功能:(ES:DI)<-(AL)或(AX) (DI)<-(DI)+/-1(字节)或+/-2(字) 指令对条件码的影响:不影响条件码。 指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是 SI 和 DI 寄存器 的间接寻址方式。源串允许使用段跨越前缀来指定段。 40、取串 LODSB / LODSW (load from string byte/word) 指令的汇编格式:LODSB LODSW 指令的基本功能:(AL)或(AX)<-(DS:SI) (SI)<-(SI)+/-1(字节)或+/-2(字) 指令对条件码的影响:不影响条件码。 指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是 SI 和 DI 寄存器 的间接寻址方式。源串允许使用段跨越前缀来指定段。 41、串比较 CMPSB / CMPSW (compare string byte/word) 指令的汇编格式:CMPSB CMPSW 指令的基本功能:(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) 指令的汇编格式:SCASB SCASW 指令的基本功能:(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 50、JNZ(JNE) OPR ZF=0 51、JS OPR SF=1 52、JNS OPR SF=0 53、JO OPR OF=1 54、JNO OPR OF=0 55、JP OPR PF=1 56、JNP OPR PF=0 57、JC OPR CF=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) ← (n×4) (CS) ← (n×4+2) 75、IRET 中断返回指令(return from interrupt) 执行操作:① 返回地址出栈:(IP) ← ((SP)),(SP) ← (SP)+2 (CS) ← ((SP)),(SP) ← (SP)+2 ② FLAGS 出栈:(FLAGS) ← ((SP)),(SP) ← (SP)+2 76、INTO 溢出则中断(中断类型为 4) 执行操作:若 OF=1(有溢出) ,则: ① 入栈保存 FLAGS:(SP) ← (SP)-2,((SP)) ← (FLAGS) ② 入栈保存返回地址:(SP) ← (SP)-2,((SP)) ← (CS) (SP) ← (SP)-2,((SP)) ← (IP) ③ 转中断处理程序:(IP) ← (4×4)= (10H) (CS) ← (4×4+2)= (12H)
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )