Changeset 60442 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Apr 11, 2016 9:30:08 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp
r60418 r60442 478 478 const char *pszFmt = pOp->pszOpcode; 479 479 bool fIgnoresOpSize = false; 480 bool fMayNeedAddrSize = false; 480 481 switch (pOp->uOpcode) 481 482 { … … 497 498 case OP_INSB: 498 499 pszFmt = "insb"; 499 fIgnoresOpSize = true;500 fIgnoresOpSize = fMayNeedAddrSize = true; 500 501 break; 501 502 case OP_INSWD: 502 503 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "insw" : pDis->uOpMode == DISCPUMODE_32BIT ? "insd" : "insq"; 504 fMayNeedAddrSize = true; 503 505 break; 504 506 case OP_OUTSB: 505 507 pszFmt = "outsb"; 506 fIgnoresOpSize = true;508 fIgnoresOpSize = fMayNeedAddrSize = true; 507 509 break; 508 510 case OP_OUTSWD: 509 511 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "outsw" : pDis->uOpMode == DISCPUMODE_32BIT ? "outsd" : "outsq"; 512 fMayNeedAddrSize = true; 510 513 break; 511 514 case OP_MOVSB: 512 515 pszFmt = "movsb"; 513 fIgnoresOpSize = true;516 fIgnoresOpSize = fMayNeedAddrSize = true; 514 517 break; 515 518 case OP_MOVSWD: 516 519 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "movsw" : pDis->uOpMode == DISCPUMODE_32BIT ? "movsd" : "movsq"; 520 fMayNeedAddrSize = true; 517 521 break; 518 522 case OP_CMPSB: 519 523 pszFmt = "cmpsb"; 520 fIgnoresOpSize = true;524 fIgnoresOpSize = fMayNeedAddrSize = true; 521 525 break; 522 526 case OP_CMPWD: 523 527 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "cmpsw" : pDis->uOpMode == DISCPUMODE_32BIT ? "cmpsd" : "cmpsq"; 528 fMayNeedAddrSize = true; 524 529 break; 525 530 case OP_SCASB: 526 531 pszFmt = "scasb"; 527 fIgnoresOpSize = true;532 fIgnoresOpSize = fMayNeedAddrSize = true; 528 533 break; 529 534 case OP_SCASWD: 530 535 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "scasw" : pDis->uOpMode == DISCPUMODE_32BIT ? "scasd" : "scasq"; 536 fMayNeedAddrSize = true; 531 537 break; 532 538 case OP_LODSB: 533 539 pszFmt = "lodsb"; 534 fIgnoresOpSize = true;540 fIgnoresOpSize = fMayNeedAddrSize = true; 535 541 break; 536 542 case OP_LODSWD: 537 543 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "lodsw" : pDis->uOpMode == DISCPUMODE_32BIT ? "lodsd" : "lodsq"; 544 fMayNeedAddrSize = true; 538 545 break; 539 546 case OP_STOSB: 540 547 pszFmt = "stosb"; 541 fIgnoresOpSize = true;548 fIgnoresOpSize = fMayNeedAddrSize = true; 542 549 break; 543 550 case OP_STOSWD: 544 551 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "stosw" : pDis->uOpMode == DISCPUMODE_32BIT ? "stosd" : "stosq"; 552 fMayNeedAddrSize = true; 545 553 break; 546 554 case OP_CBW: … … 650 658 651 659 /* 652 * Add operand size prefixfor outsb, movsb, etc.660 * Add operand size and address prefixes for outsb, movsb, etc. 653 661 */ 654 if (fIgnoresOpSize && (pDis->fPrefix & DISPREFIX_OPSIZE) ) 655 { 656 if (pDis->uCpuMode == DISCPUMODE_16BIT) 657 PUT_SZ("o32 "); 658 else 659 PUT_SZ("o16 "); 662 if (pDis->fPrefix & (DISPREFIX_OPSIZE | DISPREFIX_ADDRSIZE)) 663 { 664 if (fIgnoresOpSize && (pDis->fPrefix & DISPREFIX_OPSIZE) ) 665 { 666 if (pDis->uCpuMode == DISCPUMODE_16BIT) 667 PUT_SZ("o32 "); 668 else 669 PUT_SZ("o16 "); 670 } 671 if (fMayNeedAddrSize && (pDis->fPrefix & DISPREFIX_ADDRSIZE) ) 672 { 673 if (pDis->uCpuMode == DISCPUMODE_16BIT) 674 PUT_SZ("a32 "); 675 else 676 PUT_SZ("a16 "); 677 } 660 678 } 661 679
Note:
See TracChangeset
for help on using the changeset viewer.