x86指令集的一点总结介绍(未完待…

l  x86通用(或常用)指令:

n  数据传送:

u  mov:复制数据

u  movsx:符号填充,用源的符号位填充高位

u  movzx:零填充,用0填充高位

u  xchg:交换两个操作数的值,操作数类型需要相同

u  leaload efficient address):取有效地址,把一个内存变量的有效地址送给指定的寄存器

u  push:操作数进栈

u  pushaAXCXDXBXSPBPSIDI等压栈

u  pushadEAXECXEDXEBXESPEBPESIEDI等压栈

u  pop:弹出栈,结果存放在操作数中

u  popaDISIBPSPBXDXCXAX等弹出栈

u  popadEDIESIEBPESPEBXEDXECXEAX等弹出栈

n  标志位操作:

u  CF(进位):

l  CLCCF清零

l  STCCF1

l  CMCCF取反

u  DF(方向位):

l  CLDDF清零

l  STDDF1

u  IF(中断允许位):

l  CLIIF清零

l  STIIF1

u  取标志位:

l  LAHFflags8位存入ah

l  SAHFah的值存入flags8

u  标志位堆栈:

l  pushf/pushfd32/64 flags进栈

l  popf/popfd32/64 flags出栈

n  算术运算:

u  加法

l  add:加法

l  adc:带进位加法(源操作数的值和CF的值一起加到目的操作数)

l  inc:自增

l  xadd:交换后做加法

u  减法

l  sub:减法

l  sbb:带借位减法(将源操作数的值和CF的值一起从目的操作数中减去)

l  dec:自减

l  nec:求相反数

u  乘法

l  mul:无符号乘法

l  imul:有符号乘法

u  除法

l  div:无符号除法

l  idiv:有符号除法

u  类型转换

l  cbw:字节转字

l  cwd:字转双字

l  cwde:字转扩展双字

l  cdq:字转四字

n  逻辑运算:

u  and:并

u  or:或

u  not:非

u  xor:异或

n  移位操作:

u  算术移位

l  sal:低位向高位移,空出补零

l  sar:高位向低位移,空出补最高位的值

u  逻辑移位

l  shl:左移,补零

l  shr:右移,补零

u  双精度移位

l  shld:左移,第二个操作数高位补齐

l  shrd:右移,第二个操作数低位补齐

u  循环移位

l  rol:左移,移出的循环补上,同时进入CF

l  ror:右移,移出的循环补上,同时进入CF

u  带进位的循环移位

l  rcl:将CF加入移位的中间,移出的循环补上

l  rcr:将CF加入移位的中间,移出的循环补上

n  位操作:

u  位扫描

l  bsf:正向扫描,返回第一个1的位置

l  bsf:逆向扫描,返回第一个1的位置

u  位检测指令(对指定位的操作)

l  bt:传给CF

l  btc:传给CF,取反

l  btr:传给CF,清零

l  bts:传给CF,置1

u  检测位指令

l  test:和and指令过程一样,也设置相应标志位,就是不会保留结果

n  比较运算:

u  cmp:第二个操作数减去第一个操作数,设置相应标志位,不保留结果

u  cmpxchg:比较后根据结果(ZF是否为1)判定是否交换

n  循环指令:

u  loopcx为计数器

u  loopwcx为计数器

u  loopdecx为计数器

u  loopz/loopeZF1,且cx不为零

u  loopzw/loopewZF1,且cx不为零

u  loopzd/loopedZF1,且ecx不为零

u  loopnz/loopneZF0,且cx不为零

u  loopnzw/loopnewZF0,且cx不为零

u  loopnzd/loopnedZF0,且ecx不为零

u  jcxzcx为零时跳转

u  jecxzecx为零时跳转

n  转移:

u  jmp:无条件转移

u  条件转移:与ZFCFSFPF相关,可以看到再查

n  条件设置:

u  setxxxx是测试条件,与ZFCFSFPF相关,可以看到再查

n  字符串操作:

u  取字符串

l  lods:按照地址表达式DSSI决定读取一个字节,字,或者双字,一般放在axeax

l  lodsb/lodsw:类似

l  lodsd:类似

u  置字符串:

l  stos:把ax后者eax中的值放入ESDI所指向内存单元

l  stosb/stosw:类似

l  stosd:类似

u  传送字符串:

l  movs:把DSSI所指向的字节,字或者双字送给ESDI指向的内存单元

l  movsb/movsw:类似

l  movsd:类似

u  输入字符串:

l  ins:从指定端口(DX指定)接受一个字符串(CX决定字符个数),存入DSSI指向的存储单元

l  insb/insw:类似

l  insd:类似

u  输出字符串:

l  outs:将DSSI指向的存储单元中的一个字符串(CX决定字符个数)存入指定端口(DX指定)

l  outsb/outsw:类似

l  outsd:类似

u  比较字符串:

l  cmps:将两个DSSIESDI所指向的字节,字或者双字相减,设置相应标志位

l  cmpsb/cmpsw:类似

l  cmpsd:类似

u  扫描字符串:

l  scas:将ESDI所指向的字节,字或者双字与alax或者eax相减,设置相应标志位

l  scasb/scaw:类似

l  scads:类似

u  重复字符串操作:

l  rep lods等:如果cx为零,退出,否则继续执行rep后面的语句

u  条件重复字符串操作

l  repz/repe:如果cx非零且ZF=1,重复,否则退出

l  repnz/repne:如果cx非零且ZF=0,重复,否则退出

n  ASCII-BCD码运算调整:

u  加法调整:AAA

l  调整规则:若AL的低四位大于9,或标志位AF=1,则,AH=AH+1AL=AL+6,并置AFCF1,否则,只置AFCF0;清除AL的高四位

u  减法调整:AAS

l  调整规则:若AL的低四位大于9,或标志位CF=1,则,AH=AH-1AL=AL-6,并置AFCF1,否则,只置AFCF0;清除AL的高四位

u  乘法调整:AAM

l  调整规则:AHAL/10()ALAL(余数)

u  除法调整:AAD

l  ALßAH*10+AL AHß0

u  十进制调整

l  加:DAA,具体运用时查找

l  减:DAS,具体运用时查找

n  处理器指令:

u  NOP:控制指令,延迟下一条指令的执行

u  WAIT:让CPU出于等待状态,直到协处理器完成,用重启信号唤醒CPU为止

u  HLT:让CPU出于暂停工作状态

u  LOCK:前缀型指令,后面跟一个指令,起到独占总线的作用

l  MMX指令集:

n  数据转移指令:

u  movd32bit数据的转移

u  movq64位数据的转移

n  算术指令:

u  padd[b,w,d]:无符号数加

u  padds[b,w]:饱和模式的有符号数加

u  paddu[b,w]:饱和模式的无符号数加

u  psub[b,w,d]:无符号数减

u  psubs[b,w]:饱和模式的有符号数减

u  psubus[b,w,d]:饱和模式的无符号数减

u  pmulhwWORD类型的有符号数相乘后取高16

u  pmullwWORD类型的有符号数相乘后取低16

u  pmaddwdWORD类型的向量点乘运算

n  移位指令:

u  psll[w,d,q]:逻辑左移

u  psrl[w,d,q]:逻辑右移

u  psra[w,d,q]:算术右移

n  逻辑指令:

u  pand:位与

u  pandn:目的操作数取反,与源操作数位与

u  por:位或

u  pxor:异或

n  比较指令

n  数据打包/拆包指令

n  MMX状态清楚指令

l  SSE指令集

l  SSE2指令集

l  SSE3指令集

l  SSE4指令集

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值