Changeset 46949 in vbox
- Timestamp:
- Jul 3, 2013 7:22:34 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 86957
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore.cpp
r45428 r46949 1707 1707 pParam->cb = 4; 1708 1708 } 1709 else 1710 if (pDis->uOpMode == DISCPUMODE_64BIT) 1709 else if (pDis->uOpMode == DISCPUMODE_64BIT) 1711 1710 { 1712 1711 /* Use 64-bit registers. */ 1713 1712 pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN32_START; 1714 if ( (pOp->fOpType & DISOPTYPE_REXB_EXTENDS_OPREG)1715 && pParam == &pDis->Param1 /* ugly assumption that it only applies to the first parameter */1716 && (pDis->fPrefix & DISPREFIX_REX)1717 && (pDis->fRexPrefix & DISPREFIX_REX_FLAGS))1718 pParam->Base.idxGenReg += 8;1719 1720 1713 pParam->fUse |= DISUSE_REG_GEN64; 1721 1714 pParam->cb = 8; … … 1729 1722 pParam->fParam = pParam->fParam - OP_PARM_REG_GEN32_START + OP_PARM_REG_GEN16_START; 1730 1723 } 1731 } 1732 else 1733 if (pParam->fParam <= OP_PARM_REG_SEG_END) 1724 1725 if ( (pOp->fOpType & DISOPTYPE_REXB_EXTENDS_OPREG) 1726 && pParam == &pDis->Param1 /* ugly assumption that it only applies to the first parameter */ 1727 && (pDis->fPrefix & DISPREFIX_REX) 1728 && (pDis->fRexPrefix & DISPREFIX_REX_FLAGS_B)) 1729 { 1730 Assert(pDis->uCpuMode == DISCPUMODE_64BIT); 1731 pParam->Base.idxGenReg += 8; 1732 } 1733 } 1734 else if (pParam->fParam <= OP_PARM_REG_SEG_END) 1734 1735 { 1735 1736 /* Segment ES..GS registers. */ … … 1738 1739 pParam->cb = 2; 1739 1740 } 1740 else 1741 if (pParam->fParam <= OP_PARM_REG_GEN16_END) 1741 else if (pParam->fParam <= OP_PARM_REG_GEN16_END) 1742 1742 { 1743 1743 /* 16-bit AX..DI registers. */ … … 1746 1746 pParam->cb = 2; 1747 1747 } 1748 else 1749 if (pParam->fParam <= OP_PARM_REG_GEN8_END) 1748 else if (pParam->fParam <= OP_PARM_REG_GEN8_END) 1750 1749 { 1751 1750 /* 8-bit AL..DL, AH..DH registers. */ … … 1754 1753 pParam->cb = 1; 1755 1754 1756 if (pDis->uOpMode == DISCPUMODE_64BIT) 1755 if ( pDis->uCpuMode == DISCPUMODE_64BIT 1756 && (pOp->fOpType & DISOPTYPE_REXB_EXTENDS_OPREG) 1757 && pParam == &pDis->Param1 /* ugly assumption that it only applies to the first parameter */ 1758 && (pDis->fPrefix & DISPREFIX_REX)) 1757 1759 { 1758 if ( (pOp->fOpType & DISOPTYPE_REXB_EXTENDS_OPREG) 1759 && pParam == &pDis->Param1 /* ugly assumption that it only applies to the first parameter */ 1760 && (pDis->fPrefix & DISPREFIX_REX) 1761 && (pDis->fRexPrefix & DISPREFIX_REX_FLAGS)) 1760 if (pDis->fRexPrefix & DISPREFIX_REX_FLAGS_B) 1762 1761 pParam->Base.idxGenReg += 8; /* least significant byte of R8-R15 */ 1763 } 1764 } 1765 else 1766 if (pParam->fParam <= OP_PARM_REG_FP_END) 1762 else if ( pParam->Base.idxGenReg >= DISGREG_AH 1763 && pParam->Base.idxGenReg <= DISGREG_BH) 1764 pParam->Base.idxGenReg += DISGREG_SPL - DISGREG_AH; 1765 } 1766 } 1767 else if (pParam->fParam <= OP_PARM_REG_FP_END) 1767 1768 { 1768 1769 /* FPU registers. */ -
trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp
r46177 r46949 1094 1094 } 1095 1095 1096 case 'e': /* Register based on operand size (e.g. %eAX ) (ParseFixedReg). */1096 case 'e': /* Register based on operand size (e.g. %eAX, %eAH) (ParseFixedReg). */ 1097 1097 { 1098 Assert(RT_C_IS_ALPHA(pszFmt[0]) && RT_C_IS_ALPHA(pszFmt[1]) && !RT_C_IS_ALPHA(pszFmt[2])); pszFmt += 2; 1098 Assert(RT_C_IS_ALPHA(pszFmt[0]) && RT_C_IS_ALPHA(pszFmt[1]) && !RT_C_IS_ALPHA(pszFmt[2])); 1099 pszFmt += 2; 1099 1100 size_t cchReg; 1100 1101 const char *pszReg = disasmFormatYasmBaseReg(pDis, pParam, &cchReg); -
trunk/src/VBox/Disassembler/DisasmTablesX64.cpp
r41690 r46949 263 263 264 264 /* B */ 265 OP("mov AL,%Ib",IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_AL, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG),266 OP("mov CL,%Ib",IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_CL, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG),267 OP("mov DL,%Ib",IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_DL, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG),268 OP("mov BL,%Ib",IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_BL, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG),269 OP("mov AH,%Ib",IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_AH, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG),270 OP("mov CH,%Ib",IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_CH, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG),271 OP("mov DH,%Ib",IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_DH, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG),272 OP("mov BH,%Ib",IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_BH, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG),265 OP("mov %eAL,%Ib", IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_AL, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), 266 OP("mov %eCL,%Ib", IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_CL, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), 267 OP("mov %eDL,%Ib", IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_DL, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), 268 OP("mov %eBL,%Ib", IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_BL, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), 269 OP("mov %eAH,%Ib", IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_AH, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), 270 OP("mov %eCH,%Ib", IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_CH, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), 271 OP("mov %eDH,%Ib", IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_DH, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), 272 OP("mov %eBH,%Ib", IDX_ParseFixedReg, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_REG_BH, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), 273 273 OP("mov %eAX,%Iv", IDX_ParseFixedReg, IDX_ParseImmV, 0, OP_MOV, OP_PARM_REG_EAX, OP_PARM_Iv, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), 274 274 OP("mov %eCX,%Iv", IDX_ParseFixedReg, IDX_ParseImmV, 0, OP_MOV, OP_PARM_REG_ECX, OP_PARM_Iv, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_REXB_EXTENDS_OPREG), -
trunk/src/VBox/Disassembler/testcase/Makefile.kmk
r41868 r46949 45 45 tstAsmFnstsw-1.asm \ 46 46 tstAsmLock-1.asm \ 47 tstAsmMovFixedReg-1.asm \ 47 48 tstAsmMovSeg-1.asm \ 48 49 tstAsmMovzx-1.asm \
Note:
See TracChangeset
for help on using the changeset viewer.