{ codeImgUrl : '', // >= v1.1.5 左侧图片设置,不配置使用 window.cnblogsConfig.blogAvatar aboutHtml : '', // 关于博主,不配置使用默认 copyrightHtml: '', // 版权声明,不配置使用默认 supportHtml : '', // 声援博主,不配置使用默认 }

前缀指令

一、指令编码(硬编码)的结构

Up to four prefixes of 1 byte each optional:最多有四个前缀指令,每组最多一个字节

二、前缀指令的分组

LOCK和REPEAT前缀指令

  1. LOCK F0
    (锁地址总线)如果再汇编指令中加上 LOCK ,当前这个地址,在多个CPU执行的时,某个时刻只能有一个核CPU能读这个地址(在多核下才有意义)
  2. REPNE/REPNZ F2
    重复执行后面的某一个指令(ZF标志位为0时执行)
  3. REP/REPZ F3
    重复执行后面的某一个指令(ZF标志位为0时执行)

段前缀指令(明确告诉CPU使用哪个段,ESP/EBP默认使用SS段寄存器,默认全局地址使用DS段寄存器)

  1. CS(2E)(CS寄存器中有个db位决定着CPU是32(为1)位状态还是16(为0)位状态)
  2. SS(36)
  3. DS(3E)
  4. ES(26)
  5. FS(64)
  6. GS(65)

操作数宽度前缀指令

  1. 66
    改变操作数的默认宽度32(EBP)->16(BP),反之一样

地址宽度前缀指令

  1. 67
    改变寻址方式(32位与16位的寻址方式不同)
    32位:MOV DWORD PTR SS:[EBP-18],ESP
    16位:MOV DWORD PTR DS:[DI+FFE8],ESP

三、总结

前缀指令没有顺序要求,直接在最前面添加需要的指令即可,最少0个最多四个,每组最多使用一个,同时,原本是32位寻址,加上67就是16位寻址,反之亦然,66也是如此

posted @ 2022-01-09 14:12  Mkd1R  阅读(250)  评论(0)    收藏  举报