dsmArmLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* dsmArmLib.h - ARM disassembler header file */
  2. /* Copyright 1996-1997 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01c,09oct97.jpd  added more Thumb instructions.
  7. 01b,09sep97,cdp  added more instructions.
  8. 01a,09may96,cdp  created.
  9. */
  10. #ifndef __INCdsmArmLibh
  11. #define __INCdsmArmLibh
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #include "vwModNum.h"
  16. /* dsmLib status codes */
  17. #define S_dsmLib_UNKNOWN_INSTRUCTION (M_dsmLib | 1)
  18. /*
  19.  * Macro and definitions for simple decoding of instuctions.
  20.  * To check an instruction, it is ANDed with the IMASK_ and
  21.  * the result is compared with the IOP_. The macro INSTR_IS
  22.  * does this and returns !0 to indicate a match.
  23.  */
  24. #define INSTR_IS(i,o) (((i)&(IMASK_##o))==(IOP_##o))
  25. #define IMASK_BL 0x0F000000 /* BL xxx */
  26. #define IOP_BL 0x0B000000
  27. #define IMASK_STMDB_SPP_FP_IP_LR_PC 0xFFFFF800 /* STMDB sp!,{..fp,ip,lr,pc} */
  28. #define IOP_STMDB_SPP_FP_IP_LR_PC   0xE92DD800
  29. #define IMASK_SUB_FP_IP_4 0xFFFFFFFF /* SUB fp,ip,#4 */
  30. #define IOP_SUB_FP_IP_4 0xE24CB004
  31. #define IMASK_SUB_FP_IP_4PLUS 0xFFFFF000 /* SUB fp,ip,#4+ */
  32. #define IOP_SUB_FP_IP_4PLUS 0xE24CB000
  33. #define IMASK_MOV_IP_SP 0xFFFFFFFF /* MOV ip,sp */
  34. #define IOP_MOV_IP_SP 0xE1A0C00D
  35. #define IMASK_MOVXX_LR_PC 0x0FFFFFFF /* MOVxx lr,pc */
  36. #define IOP_MOVXX_LR_PC 0x01A0E00F
  37. #define IMASK_STMDB_SPP_AREGS 0xFFFFFFF0 /* STMDB sp!,{a1-a4} */
  38. #define IOP_STMDB_SPP_AREGS 0xE92D0000
  39. #define IMASK_SUB_SP_SP 0xFFFFF000 /* SUB sp,sp,#n */
  40. #define IOP_SUB_SP_SP 0xE24DD000
  41. #define IMASK_MOVS_PC_LR 0xFFFFFFFF /* MOVS pc,lr */
  42. #define IOP_MOVS_PC_LR 0xE1B0F00E
  43. /* Thumb instructions */
  44. #define IMASK_T_BL0 0xF800 /* BL prefix */
  45. #define IOP_T_BL0 0xF000
  46. #define IMASK_T_BL1 0xF800 /* BL */
  47. #define IOP_T_BL1 0xF800
  48. #define IMASK_T_MOV_LR_PC 0xFFFF /* MOV lr,pc */
  49. #define IOP_T_MOV_LR_PC 0x46FE
  50. #define IMASK_T_SUB_SP_16 0xFFFF /* SUB sp,#16 */
  51. #define IOP_T_SUB_SP_16 0xB084
  52. #define IMASK_T_MOV_FP_LO 0xFFC7 /* MOV fp,loreg */
  53. #define IOP_T_MOV_FP_LO 0x4683
  54. #define IMASK_T_MOV_SP_LO 0xFFC7 /* MOV sp,loreg */
  55. #define IOP_T_MOV_SP_LO 0x4685
  56. #define IMASK_T_ADD_LO_SP 0xF800 /* ADD loreg, sp, #Imm */
  57. #define IOP_T_ADD_LO_SP 0xA800
  58. #define IMASK_T_POP_LO 0xFF00 /* POP {reglist} (not PC) */
  59. #define IOP_T_POP_LO 0xBC00
  60. #define IMASK_T_PUSH_LO 0xFF00 /* PUSH {reglist} (not LR) */
  61. #define IOP_T_PUSH_LO 0xB400
  62. #define IMASK_T_PUSH 0xFF00 /* PUSH {reglist} (inc LR) */
  63. #define IOP_T_PUSH 0xB500
  64. #define IMASK_T_BX_LO 0xFFC0 /* BX loreg */
  65. #define IOP_T_BX_LO 0x4700
  66. #define IMASK_T_MOV_LO_PC 0xFFF8 /* MOV loreg,pc */
  67. #define IOP_T_MOV_LO_PC 0x4678
  68. #define IMASK_T_MOV_LO_FP 0xFFF8 /* MOV loreg,fp */
  69. #define IOP_T_MOV_LO_FP 0x4658
  70. IMPORT int dsmNbytes(FAST INSTR *binInst);
  71. IMPORT int dsmInst(FAST INSTR *binInst, int address, VOIDFUNCPTR prtAddress);
  72. #ifndef _ASMLANGUAGE
  73. #endif /* _ASMLANGUAGE */
  74. #ifdef __cplusplus
  75. }
  76. #endif
  77. #endif /* __INCdsmArmLibh */