详解汇编语⾔各种指令的解释与⽤法
【数据传输指令】
⼀、通⽤数据传送指令
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 指令的DS
T不允许是CS寄存器;
3、交换指令 XCHG(exchange)
指令的汇编格式:XCHG OPR1,OPR2 指令的基本功能:(OPR1)<->(OPR2) 指令⽀持的寻址⽅式:⼀个操作数必须在寄存器中,另⼀个操作数可以在寄存器或存储器中。指令对标志位的影戏:不影响标志位。指令的特殊要求:不允许使⽤段寄存器。
⼆、累加器专⽤传送指令
hal
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位的。
六、⼗进制调整指令
【逻辑指令】
⼀、逻辑运算
指令的格式:ANDdst,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
novak djokovic⼆、移位指令
29、逻辑左移 SHL(shift logical left) 指令的汇编格式:SHL dst,cnt 指令的基本功能:SHL指令向左逐位移动cnt次,每次逐位移动后,最低位⽤0来补充,最⾼位移⼊CF。指令⽀持的寻址⽅式:⽬的操作
gre考试费用数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 (t direction flag) 指令的汇编格式:CLD STD 指令的基本功能:CLD DF=0 STD DF=1 ⼆、串处理指令 38、串传送 MOVSB / MOVSW(move string b
yte/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或Z
F=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=0 51、JS OPR SF=1 SF=0(⼆进制最⾼位是什么,SF就是什么,如最⾼位为1则SF=1) 52、JNS OPR SF=0 53、JO OPR OF=1 OF=1 (两个负数相加变成正数,溢出) 54、JNO OPR OF=0 55、JP OPR PF=1 PF=0 (反映结果“1”的个数,奇数☞0 偶数个☞1) 56、JNP OPR PF=0 57、JC OPR CF=1CF=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字节范围之内。
四、⼦程序调⽤
>stories