知识总结7:指令总结(全)
1 1.数据传送指令 2 mov 3 功能:把操作数从原位置传送到目的位置,原操作数不变 4 格式:mov 目的操作数,原操作数 5 结果:目标操作数=原操作数,原操作数不变 6 push 7 功能:将数据压栈 8 格式:push 操作数 9 结果:(sp)=(sp)-2,(ss:[sp])=操作数 10 pop 11 功能:将数据出栈 12 格式:pop 操作数 13 结果:操作数=(ss:[sp]),(sp)=(sp)+2 14 pushf 15 功能:将标志寄存器入栈 16 格式:pushf 17 结果:同push 18 popf 19 功能:将标志寄存器出栈 20 格式:popf 21 结果:同pop 22 xchg 23 功能:交换两数的值 24 格式:xchg 操作数1,操作数2 25 结果:新操作数1=原操作数2,新操作数2=原操作数1 26 27 2.算数运算指令 28 add 29 功能:不进位加法 30 格式:add 操作数1,操作数2 31 结果:操作数1=操作数1+操作数2,操作数2不变 32 sub 33 功能:不借位减法 34 格式:sub 操作数1,操作数2 35 结果:操作数1=操作数1-操作数2,操作数2不变 36 adc 37 功能:进位加法 38 格式:adc 操作数1,操作数2 39 结果:操作数1=操作数1+操作数2+CF,操作数2不变 40 sbb 41 功能:借位减法 42 格式:sbb 操作数1,操作数2 43 结果:操作数1=操作数1-操作数2-CF,操作数2不变 44 inc 45 功能:自增1 46 格式:inc 操作数 47 结果:操作数=操作数+1 48 dec 49 功能:自减1 50 格式:dec 操作数 51 结果:操作数=操作数-1 52 cmp 53 功能:按不借位减法处理,不保留结果 54 格式:cmp 操作数1,操作数2 55 结果:类似sub指令 56 imul 57 功能:计算有符号数的乘 58 格式:imul 操作数 59 结果:同mul 60 idiv 61 功能:计算有符号数的乘 62 格式:idiv 操作数 63 结果:同div 64 aaa 65 功能:把字节当BCD码处理 66 格式:aaa 67 结果:若al大于9或af=1,则ah=ah+1,al=al+6;否则将af和vf清零 68 69 3.逻辑指令 70 and 71 功能:按位与处理 72 格式:and 操作数1,操作数2 73 结果:对比操作数1与操作数2的二进制,同为1则结果取1,否则取0,最后储存到操作数1 74 or 75 功能:按位或处理 76 格式:or 操作数1,操作数2 77 结果:对比操作数1与操作数2的二进制,同为0则结果取0,否则取1,最后储存到操作数1 78 not 79 功能:按位取反 80 格式:not 操作数 81 结果:使操作数对应的二进制位上原来为1的变为0,为0的变为1 82 xor 83 功能:按异或处理 84 格式:xor 操作数1,操作数2 85 结果:对比操作数1与操作数2的二进制,不同为1或0则结果取0,否则取1,最后储存到操作数1 86 test 87 功能:按位与操作,但不保留结果 88 格式:test 操作数1,操作数2 89 结果:类似and指令 90 shl 91 功能:按位左移 92 格式:shl 操作数,移动的位数(一般由其他寄存器给出) 93 结果:相当于操作数=操作数*2^(移动位数) 94 shr 95 功能:按位右移 96 格式:shr 操作数,移动的位数 97 结果:相当于操作数=操作数/2^(移动位数) 98 sal 99 功能:带符号按位左移 100 格式:sal 操作数,移动的位数 101 结果:类似shl 102 sar 103 功能:带符号按位右移 104 格式:sar 操作数,移动的位数 105 结果:类似shr 106 rol 107 功能:循环左移 108 格式:rol 操作数,移动的位数 109 结果:相当于把高位移除,补上低位(例如10000010b循环左移一位,则结果为00000101b) 110 ror 111 功能:循环右移 112 格式:ror 操作数,移动的位数 113 结果:相当于把低位移除,补上高位(例如10000010b循环右移一位,则结果为01000001b) 114 rcl 115 功能:带进位的循环左移 116 格式:rcl 操作数,移动的位数 117 结果:实现32位数的移位 118 rcr 119 功能:带进位的循环右移 120 格式:rcr 操作数,移动的位数 121 结果:实现32位数的移位 122 123 4.转移指令 124 jmp 125 功能:无条件转移 126 格式:jmp 标号 127 结果:跳到标号处执行 128 jcxz 129 功能:条件转移 130 格式:jcxz 标号 131 结果:当(cx)=0时,跳到标号处执行 132 je 133 功能:与cmp搭配,相关标志位ZF 134 格式:je 标号 135 结果:若cmp的结果=0,则跳到标号处执行 136 jb 137 功能:与cmp搭配,相关标志位CF 138 格式:jb 标号 139 结果:若cmp的结果<0,则跳到标号处执行 140 ja 141 功能:与cmp搭配,相关标志位CF、ZF 142 格式:ja 标号 143 结果:若cmp的结果>0,则跳到标号处执行 144 jnb 145 功能:与cmp搭配,相关标志位CF 146 格式:jnb 标号 147 结果:若cmp的结果>=0,则跳到标号处执行 148 jna 149 功能:与cmp搭配,相关标志位CF、ZF 150 格式:jna 标号 151 结果:若cmp的结果<=0,则跳到标号处执行 152 loop 153 功能:与cx搭配,循环指令 154 格式:loop 标号 155 结果:若(cx)!=0,则跳到标号处执行 156 call 157 功能:与ret搭配,实现子程序 158 格式:call 标号 159 结果:先把IP压栈,再跳到标号处 160 ret 161 功能:与call搭配,实现子程序 162 格式:ret 163 结果:取出IP,再返回到call处 164 retf 165 功能:与call搭配,实现子程序 166 格式:retf 167 结果:取出IP,再取出CS,最后返回call处 168 int 169 功能:与retf搭配,实现自动例程 170 格式:int n 171 结果:先把CS压栈,再压入IP,再进入中断例程 172 iret 173 功能:与int n搭配,实现自动例程 174 格式:retf 175 结果:先取出IP,再取出CS,再返回到int n处 176 177 5.处理机控制指令 178 cld 179 结果:置DF为0 180 std 181 结果:置DF为1 182 cli 183 结果:置IF为0 184 sti 185 结果:置IF为1 186 nop 187 结果:什么也不做,占一个字节 188 clc 189 结果:置CF为0 190 cmc 191 结果:置CF取反 192 stc 193 结果:置CF为1 194 hlt 195 结果:使处理器处于暂停,直到收到一个中断 196 wait 197 结果:使处理器处于等待,直到收到一个外部中断 198 esc 199 结果:换码,格式为esc mem,直到一个内存单元的内容送入数据总线 200 lock 201 结果:锁住当前指令段,直到联合指令结束,避免破坏 202 203 6.串处理指令 204 movsb 205 结果:将ds段的内容复制到es段,字节操作 206 movsw 207 结果:将ds段的内容复制到es段,字操作 208 cmps 209 结果:将ds段的内容与es段的内容进行比较 210 scas 211 结果:将al(或ax)的值与es段进行扫描 212 lods 213 结果:从ds段中取出一个字符 214 stos 215 结果:将一个字符写入ds段中 216 rep 217 结果:与movsb或movsw指令连用 218 repe 219 结果:与cmps指令连用,相等继续 220 repne 221 结果:与cmps指令连用,不相等继续