VirtualBox

忽略:
時間撮記:
2008-4-21 下午02:29:54 (17 年 以前)
作者:
vboxsync
訊息:

MMIO: Cleanup up (removed duplicate code)
Disassembler: simplified general purpose register access

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Disassembler/DisasmReg.cpp

    r8168 r8234  
    207207        return 8;
    208208
    209     case OP_PARM_p:
     209    case OP_PARM_p: /* far pointer */
    210210        if (pCpu->addrmode == CPUMODE_32BIT)
    211             return 8;
    212         else
    213             return 4;
     211            return 6;   /* 16:32 */
     212        else
     213        if (pCpu->addrmode == CPUMODE_64BIT)
     214            return 12;  /* 16:64 */
     215        else
     216            return 4;   /* 16:16 */
    214217
    215218    default:
     
    232235    {
    233236        /* Guess segment register by parameter type. */
    234         if (pParam->flags & USE_REG_GEN32)
    235         {
    236             if (pParam->base.reg_gen32 == USE_REG_ESP || pParam->base.reg_gen32 == USE_REG_EBP)
    237                 return USE_REG_SS;
    238         }
    239         else
    240         if (pParam->flags & USE_REG_GEN16)
    241         {
    242             if (pParam->base.reg_gen16 == USE_REG_SP || pParam->base.reg_gen16 == USE_REG_BP)
     237        if (pParam->flags & (USE_REG_GEN32|USE_REG_GEN64|USE_REG_GEN16))
     238        {
     239            AssertCompile(USE_REG_ESP == USE_REG_RSP);
     240            AssertCompile(USE_REG_EBP == USE_REG_RBP);
     241            AssertCompile(USE_REG_ESP == USE_REG_SP);
     242            AssertCompile(USE_REG_EBP == USE_REG_BP);
     243            if (pParam->base.reg_gen == USE_REG_ESP || pParam->base.reg_gen == USE_REG_EBP)
    243244                return USE_REG_SS;
    244245        }
     
    486487            {
    487488                pParamVal->flags |= PARAM_VAL8;
    488                 if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen8, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
     489                if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
    489490            }
    490491            else
     
    492493            {
    493494                pParamVal->flags |= PARAM_VAL16;
    494                 if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen16, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
     495                if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
    495496            }
    496497            else
     
    498499            {
    499500                pParamVal->flags |= PARAM_VAL32;
    500                 if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen32, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
     501                if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
    501502            }
    502503            else
     
    504505            {
    505506                pParamVal->flags |= PARAM_VAL64;
    506                 if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen64, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
     507                if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
    507508            }
    508509            else {
     
    581582            pParamVal->flags |= PARAM_VAL8;
    582583            pParamVal->size   = sizeof(uint8_t);
    583             if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen8, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
     584            if (VBOX_FAILURE(DISFetchReg8(pCtx, pParam->base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
    584585        }
    585586        else
     
    588589            pParamVal->flags |= PARAM_VAL16;
    589590            pParamVal->size   = sizeof(uint16_t);
    590             if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen16, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
     591            if (VBOX_FAILURE(DISFetchReg16(pCtx, pParam->base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
    591592        }
    592593        else
     
    595596            pParamVal->flags |= PARAM_VAL32;
    596597            pParamVal->size   = sizeof(uint32_t);
    597             if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen32, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
     598            if (VBOX_FAILURE(DISFetchReg32(pCtx, pParam->base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
    598599        }
    599600        else
     
    602603            pParamVal->flags |= PARAM_VAL64;
    603604            pParamVal->size   = sizeof(uint64_t);
    604             if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen64, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
     605            if (VBOX_FAILURE(DISFetchReg64(pCtx, pParam->base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
    605606        }
    606607        else
     
    698699        {
    699700            uint8_t *pu8Reg;
    700             if (VBOX_SUCCESS(DISPtrReg8(pCtx, pParam->base.reg_gen8, &pu8Reg)))
     701            if (VBOX_SUCCESS(DISPtrReg8(pCtx, pParam->base.reg_gen, &pu8Reg)))
    701702            {
    702703                *pcbSize = sizeof(uint8_t);
     
    709710        {
    710711            uint16_t *pu16Reg;
    711             if (VBOX_SUCCESS(DISPtrReg16(pCtx, pParam->base.reg_gen16, &pu16Reg)))
     712            if (VBOX_SUCCESS(DISPtrReg16(pCtx, pParam->base.reg_gen, &pu16Reg)))
    712713            {
    713714                *pcbSize = sizeof(uint16_t);
     
    720721        {
    721722            uint32_t *pu32Reg;
    722             if (VBOX_SUCCESS(DISPtrReg32(pCtx, pParam->base.reg_gen32, &pu32Reg)))
     723            if (VBOX_SUCCESS(DISPtrReg32(pCtx, pParam->base.reg_gen, &pu32Reg)))
    723724            {
    724725                *pcbSize = sizeof(uint32_t);
     
    731732        {
    732733            uint64_t *pu64Reg;
    733             if (VBOX_SUCCESS(DISPtrReg64(pCtx, pParam->base.reg_gen64, &pu64Reg)))
     734            if (VBOX_SUCCESS(DISPtrReg64(pCtx, pParam->base.reg_gen, &pu64Reg)))
    734735            {
    735736                *pcbSize = sizeof(uint64_t);
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette