Posts

Showing posts from December, 2016

Intel IA-32 / Intel 64 指令架構 之 指令解碼

Image
引言: ------------------------------------- IA-32 到 Intel 64 架構中 每一條匯編指令也由特定的格式給CPU的指令解碼器,或調試器的反匯編器(disassembler)解析,因而我們可以直觀地知道這些指令,第一層人類有能力看得懂的語言,其中每條指令由以下組件組成: 1. Instruction prefixes( 指令前輟) : ------------------------------------- 指令前輟分為4組: Group 1 : - Lock/repeat prefix : F0h : LOCK prefix F2h : REPNE/REPNZ F3h : REP or REPE/REPZ , F3h prefix 更預設用在POPCNT,LZCNT,ADOX指令上 - Bound prefix : Group 2: - Segment override prefix: 2Eh - CS segment override 36h - SS segment override 3Eh - DS segment override 26h - ES segment override 64h - FS segment override 65h - GS segment override - Branch hints(分支) 2Eh - 分支沒效,只有jcc指令使用 3Eh - 分支有效,只有jcc指令使用 Group 3 : 66h - Operand-size override Group 4 : 67h - address-size override LOCK prefix - 強制向cpu發送LOCK#信號,確保原子操作 Repeat prefix - 重覆執行指定指令 比如movs, cmps, scas, lods, stos, ins, outs Branch hint prefix - 用於提醒CPU,最有可能的執行路徑(分支) Operand/address-size override prefix - 用於尋址時,operand/內存的16bit / 32bit大小切換 2. Opcode