Files
TempleOS-Rijn/LT/OSMain/IRQHAND.ASZ
T
2018-09-08 21:45:17 +02:00

887 lines
13 KiB
Plaintext

ALIGN 8,0x90
IRQ_VECTORS::
DU4 IRQ00,IRQ01,IRQ02,IRQ03;
DU4 IRQ04,IRQ05,IRQ06,IRQ07;
DU4 IRQ08,IRQ09,IRQ0A,IRQ0B;
DU4 IRQ0C,IRQ0D,IRQ0E,IRQ0F;
DU4 IRQ10,IRQ11,IRQ12,IRQ13;
DU4 IRQ14,IRQ15,IRQ16,IRQ17;
DU4 IRQ18,IRQ19,IRQ1A,IRQ1B;
DU4 IRQ1C,IRQ1D,IRQ1E,IRQ1F;
DU4 IRQ20,IRQ21,IRQ22,IRQ23;
DU4 IRQ24,IRQ25,IRQ26,IRQ27;
DU4 IRQ28,IRQ29,IRQ2A,IRQ2B;
DU4 IRQ2C,IRQ2D,IRQ2E,IRQ2F;
DU4 IRQ30,IRQ31,IRQ32,IRQ33;
DU4 IRQ34,IRQ35,IRQ36,IRQ37;
DU4 IRQ38,IRQ39,IRQ3A,IRQ3B;
DU4 IRQ3C,IRQ3D,IRQ3E,IRQ3F;
DU4 IRQ40,IRQ41,IRQ42,IRQ43;
DU4 IRQ44,IRQ45,IRQ46,IRQ47;
DU4 IRQ48,IRQ49,IRQ4A,IRQ4B;
DU4 IRQ4C,IRQ4D,IRQ4E,IRQ4F;
DU4 IRQ50,IRQ51,IRQ52,IRQ53;
DU4 IRQ54,IRQ55,IRQ56,IRQ57;
DU4 IRQ58,IRQ59,IRQ5A,IRQ5B;
DU4 IRQ5C,IRQ5D,IRQ5E,IRQ5F;
////***************** INTERRUPT ROUTINES ***************
ALIGN 8,0x90
IRQ00: PUSHAD
MOV EDX,0
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ01: PUSHAD
MOV EDX,1
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ02: PUSHAD
MOV EDX,2
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ03: PUSHAD
MOV EDX,3
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ04: PUSHAD
MOV EDX,4
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ05: PUSHAD
MOV EDX,5
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ06: PUSHAD
MOV EDX,6
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ07: PUSHAD
MOV EDX,7
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ08: PUSHAD
MOV EDX,8
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ09: PUSHAD
MOV EDX,9
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ0A: PUSHAD
MOV EDX,0x0A
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ0B: PUSHAD
MOV EDX,0x0B
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ0C: PUSHAD
MOV EDX,0x0C
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ0D: PUSHAD
MOV EDX,0x0D
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ0E: PUSHAD
MOV EDX,0x0E
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ0F: PUSHAD
MOV EDX,0x0F
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ10: PUSHAD
MOV EDX,0x10
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ11: PUSHAD
MOV EDX,0x11
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ12: PUSHAD
MOV EDX,0x12
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ13: PUSHAD
MOV EDX,0x13
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ14: PUSHAD
MOV EDX,0x14
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ15: PUSHAD
MOV EDX,0x15
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ16: PUSHAD
MOV EDX,0x16
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ17: PUSHAD
MOV EDX,0x17
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ18: PUSHAD
MOV EDX,0x18
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ19: PUSHAD
MOV EDX,0x19
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ1A: PUSHAD
MOV EDX,0x1A
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ1B: PUSHAD
MOV EDX,0x1B
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ1C: PUSHAD
MOV EDX,0x1C
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ1D: PUSHAD
MOV EDX,0x1D
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ1E: PUSHAD
MOV EDX,0x1E
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ1F: PUSHAD
MOV EDX,0x1F
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ20: STI
CLD
PUSHAD
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_IRQ00*4[EAX]
OR EAX,EAX
JZ @@2
MOV EBP,ESP
PUSH 0
PUSH U4 SP_EIP[EBP]
CALL EAX
ADD ESP,8
@@2: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
OUT 0x20,AL
POPAD
BT U4 [SYS_FLAGS],SYSf_PREEMPTIVE
JC IRQ_SWAP_IN_NEXT
IRET
IRQ_SWAP_IN_NEXT:
CLI
CALL SAVE_CONTEXT //PREEMPTIVE
MOV EBP,ESP
MOV EAX,[EBP]
MOV U4 FS:[TSS_EIP],EAX
MOV EAX,8[EBP]
MOV U4 FS:[TSS_EFLAGS],EAX
ADD EBP,12
MOV U4 FS:[TSS_ESP],EBP
MOV ESI,U4 FS:[TSS_NEXT_TSS]
MOV AX,U2 TSS_FS[ESI]
MOV FS,AX
JMP U4 SWAP_IN_NEXT_PART2
ALIGN 8,0x90
IRQ21:: CLD
PUSHAD
CALL U4 CP_KBD_HANDLER+4
MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
OUT 0x20,AL
POPAD
IRET
ALIGN 8,0x90
IRQ22: PUSHAD
MOV EDX,0x22
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ23: CLD
PUSHAD
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_IRQ03*4[EAX]
OR EAX,EAX
JZ @@231
CALL EAX
@@231: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
OUT 0x20,AL
POPAD
IRET
ALIGN 8,0x90
IRQ24: CLD
PUSHAD
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_IRQ04*4[EAX]
OR EAX,EAX
JZ @@241
CALL EAX
@@241: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
OUT 0x20,AL
POPAD
IRET
ALIGN 8,0x90
IRQ25: PUSHAD
MOV EDX,0x25
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ26: CLD
PUSHAD
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_IRQ06*4[EAX]
OR EAX,EAX
JZ @@261
CALL EAX
@@261: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
OUT 0x20,AL
POPAD
IRET
ALIGN 8,0x90
IRQ27: CLD
PUSHAD
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_IRQ07*4[EAX]
OR EAX,EAX
JZ @@271
CALL EAX
@@271: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
OUT 0x20,AL
POPAD
IRET
ALIGN 8,0x90
IRQ28: PUSHAD
MOV EDX,0x28
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ29: PUSHAD
MOV EDX,0x29
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ2A: PUSHAD
MOV EDX,0x2A
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ2B: PUSHAD
MOV EDX,0x2B
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ2C: CLD
PUSHAD
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_IRQ0C*4[EAX]
OR EAX,EAX
JZ @@2C1
CALL EAX
@@2C1: MOV AL,0x20
OUT 0xA0,AL
MOV AL,0x20
OUT 0x20,AL
POPAD
IRET
ALIGN 8,0x90
IRQ2D: PUSHAD
MOV EDX,0x2D
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ2E: CLD
PUSHAD
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_IRQ0E*4[EAX]
OR EAX,EAX
JZ @@2E1
CALL EAX
@@2E1: MOV AL,0x20
OUT 0xA0,AL
MOV AL,0x20
OUT 0x20,AL
POPAD
IRET
ALIGN 8,0x90
IRQ2F: CLD
PUSHAD
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_IRQ0F*4[EAX]
OR EAX,EAX
JZ @@2F1
CALL EAX
@@2F1: MOV AL,0x20
OUT 0xA0,AL
MOV AL,0x20
OUT 0x20,AL
POPAD
IRET
//************************************ SOFTWARE INT'S ******************************
TEST_AND_ENABLE_IRQS:
PUSH EBP
MOV EBP,ESP
//16[ebp]=flags
//12[ebp]=cs
// 8[ebp]=iret
// 4[ebp]=ret
// 0[ebp]=ebp
BT U4 16[EBP],9
JNC @@TEI1
STI
@@TEI1: POP EBP
RET
ALIGN 8,0x90
IRQ30: CALL TEST_AND_ENABLE_IRQS
PUSHAD
PUSH 0
PUSH ESI
CALL CP_PUT_SYSTEXT+4
ADD ESP,8
POPAD
IRET
ALIGN 8,0x90
IRQ31: CALL TEST_AND_ENABLE_IRQS
PUSHAD
CALL PUT_I1
POPAD
IRET
ALIGN 8,0x90
IRQ32: CALL TEST_AND_ENABLE_IRQS
PUSHAD
MOV ESI,MSG_GETCHAR
CALL FIND_EXTERN
JNZ @@3210
CALL GET_KEY
INT I_PUT_I1
XOR EDX,EDX
JMP @@3220
@@3210: PUSH 0
PUSH 0
CALL ESI
ADD ESP,8
@@3220: MOV EBP,ESP
MOV U4 SP_EAX[EBP],EAX
MOV U4 SP_EDX[EBP],EDX
POPAD
IRET
COUT_JOIN::
OR EBX,EBX
JZ U4 @@100
@@20: MOV EDX,U4 [EBP]
MOV EAX,U4 8[EBP]
PUSHAD
CMP EDX,IT_NUM_IT+IT_I1
JNE @@25
PUSH ESI
MOV ESI,EAX
CALL PUT_STRING
POP ESI
JMP @@29
@@25: CMP EDX,IT_U8
JE @@26
CMP EDX,IT_I8
JNE @@24
@@26: MOV EAX,U4 12[EBP]
CALL PUT_HEX
MOV EAX,U4 8[EBP]
CALL PUT_HEX
JMP @@29
@@24: CMP EDX,IT_U4
JE @@21
CMP EDX,IT_I4
JNE @@21A
@@21: CALL PUT_HEX
JMP @@29
@@21A: CMP EDX,IT_U2
JE @@22
CMP EDX,IT_I2
JNE @@22A
@@22: CALL PUT_HEX_U2
JMP @@29
@@22A: CMP EDX,IT_U1
JNE @@23
CALL PUT_HEX_U1
JMP @@29
@@23: CMP EDX,IT_DOUBLE
JNE @@30
PUSH U4 12[EBP]
PUSH U4 8[EBP]
CALL CP_PUT_FLOAT+4
ADD ESP,8
JMP @@29
@@30: CMP EDX,IT_I1
JNE @@21
CALL PUT_I1
@@29: POPAD
SUB EBP,16
DEC EBX
JNZ U4 @@20
@@100: RET
ALIGN 8,0x90
IRQ33:: CALL TEST_AND_ENABLE_IRQS //COUT
PUSH EBP
MOV EBP,ESP
MOV EBX,EAX //GET PARAM CNT
ADD EBX,EBX
LEA EBP,16-16[EBP+EBX*8]
MOV EBX,EAX //GET PARAM CNT
CALL COUT_JOIN
POP EBP
IRET
ALIGN 8,0x90
IRQ34: CALL TEST_AND_ENABLE_IRQS
PUSHAD
SUB ESP,16 //Space for param1 & param2
PUSH EDX //mask
PUSH EAX //mask
MOV EAX,ESP
ADD EAX,16
PUSH 0
PUSH 0
PUSH 0 //&param2
PUSH EAX //&param2
SUB EAX,8
PUSH 0 //&param1
PUSH EAX //&param1
MOV ESI,MSG_PEEK_MSG
CALL FIND_EXTERN
CALL ESI
ADD ESP,32
POP EBX //param1
ADD ESP,4
POP EDX //param2
ADD ESP,4
MOV EBP,ESP
MOV U4 SP_EAX[EBP],EAX
MOV U4 SP_EBX[EBP],EBX
MOV U4 SP_EDX[EBP],EDX
POPAD
IRET
ALIGN 8,0x90
IRQ35: CALL TEST_AND_ENABLE_IRQS
PUSHAD
SUB ESP,16 //Space for param1 & param2
PUSH EDX //mask
PUSH EAX //mask
MOV EAX,ESP
ADD EAX,16
PUSH 0
PUSH 0
PUSH 0 //&param2
PUSH EAX //&param2
SUB EAX,8
PUSH 0 //&param1
PUSH EAX //&param1
MOV ESI,MSG_GET_MSG_NO_WAIT
CALL FIND_EXTERN
CALL ESI
ADD ESP,32
POP EBX //param1
ADD ESP,4
POP EDX //param2
MOV EBP,ESP
ADD ESP,4
MOV U4 SP_EAX[EBP],EAX
MOV U4 SP_EBX[EBP],EBX
MOV U4 SP_EDX[EBP],EDX
POPAD
IRET
ALIGN 8,0x90
IRQ36:: CALL TEST_AND_ENABLE_IRQS
PUSHAD
MOV ESI,MSG_FLUSH_MSGS
CALL FIND_EXTERN
XOR EAX,EAX
OR ESI,ESI
JZ @@1
CALL ESI
@@1: MOV EBP,ESP
MOV U4 SP_EDX[EBP],EDX
MOV U4 SP_EAX[EBP],EAX
POPAD
IRET
CP_FLUSH_MSGS::
INT I_FLUSH_MSGS
RET
ALIGN 8,0x90
IRQ37: CALL TEST_AND_ENABLE_IRQS
PUSHAD
SUB ESP,16 //Space for param1 & param2
PUSH EDX //mask
PUSH EAX //mask
MOV EAX,ESP
ADD EAX,16
PUSH 0
PUSH 0
PUSH 0 //&param2
PUSH EAX //&param2
SUB EAX,8
PUSH 0 //&param1
PUSH EAX //&param1
MOV ESI,MSG_GET_MSG
CALL FIND_EXTERN
CALL ESI
ADD ESP,32
POP EBX //param1
ADD ESP,4
POP EDX //param2
ADD ESP,4
MOV EBP,ESP
MOV U4 SP_EAX[EBP],EAX
MOV U4 SP_EBX[EBP],EBX
MOV U4 SP_EDX[EBP],EDX
POPAD
IRET
ALIGN 8,0x90
IRQ38:: CALL TEST_AND_ENABLE_IRQS
CALL PUT_STRING
IRET
ALIGN 8,0x90
IRQ39:: CALL TEST_AND_ENABLE_IRQS
PUSH EBP
MOV EBP,ESP
MOV EBX,EAX //GET PARAM CNT
ADD EBX,EBX
LEA EBP,16-16[EBP+EBX*8]
MOV EBX,EAX //GET PARAM CNT
CALL COUT_JOIN
CALL CRLF
POP EBP
IRET
ALIGN 8,0x90 //I_DEBUG
IRQ3A:: CLI
CLD
PUSHAD
CALL SAVE_CONTEXT
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_DEBUG*4[EAX]
OR EAX,EAX
JZ @@3A1
CALL EAX
@@3A1: POPAD
IRET
ALIGN 8,0x90
IRQ3B: PUSHAD
MOV EDX,0x3B
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ3C: PUSHAD
MOV EDX,0x3C
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ3D: PUSHAD
MOV EDX,0x3D
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ3E: PUSHAD
MOV EDX,0x3E
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ3F: PUSHAD
MOV EDX,0x3F
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ40: PUSHAD
MOV EDX,0x40
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ41: PUSHAD
MOV EDX,0x41
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ42: PUSHAD
MOV EDX,0x42
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ43: PUSHAD
MOV EDX,0x43
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ44: PUSHAD
MOV EDX,0x44
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ45: PUSHAD
MOV EDX,0x45
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ46: PUSHAD
MOV EDX,0x46
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ47: PUSHAD
MOV EDX,0x47
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ48: PUSHAD
MOV EDX,0x48
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ49: PUSHAD
MOV EDX,0x49
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ4A: PUSHAD
MOV EDX,0x4A
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ4B: PUSHAD
MOV EDX,0x4B
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ4C: PUSHAD
MOV EDX,0x4C
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ4D: PUSHAD
MOV EDX,0x4D
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ4E: PUSHAD
MOV EDX,0x4E
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ4F: PUSHAD
MOV EDX,0x4F
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ50: PUSHAD
MOV EDX,0x50
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ51: PUSHAD
MOV EDX,0x51
JMP U4 IRQFAULT
ALIGN 8,0x90
IRQ52: PUSHAD
MOV EDX,0x52
JMP IRQFAULT
ALIGN 8,0x90
IRQ53: PUSHAD
MOV EDX,0x53
JMP IRQFAULT
ALIGN 8,0x90
IRQ54: PUSHAD
MOV EDX,0x54
JMP IRQFAULT
ALIGN 8,0x90
IRQ55: PUSHAD
MOV EDX,0x55
JMP IRQFAULT
ALIGN 8,0x90
IRQ56: PUSHAD
MOV EDX,0x56
JMP IRQFAULT
ALIGN 8,0x90
IRQ57: PUSHAD
MOV EDX,0x57
JMP IRQFAULT
ALIGN 8,0x90
IRQ58: PUSHAD
MOV EDX,0x58
JMP IRQFAULT
ALIGN 8,0x90
IRQ59: PUSHAD
MOV EDX,0x59
JMP IRQFAULT
ALIGN 8,0x90
IRQ5A: PUSHAD
MOV EDX,0x5A
JMP IRQFAULT
ALIGN 8,0x90
IRQ5B: PUSHAD
MOV EDX,0x5B
JMP IRQFAULT
ALIGN 8,0x90
IRQ5C: PUSHAD
MOV EDX,0x5C
JMP IRQFAULT
ALIGN 8,0x90
IRQ5D: PUSHAD
MOV EDX,0x5D
JMP IRQFAULT
ALIGN 8,0x90
IRQ5E: PUSHAD
MOV EDX,0x5E
JMP IRQFAULT
ALIGN 8,0x90
IRQ5F: PUSHAD
MOV EDX,0x5F
JMP IRQFAULT
FAULT_DESC: DU1 "FAULT TASK",0;
CP_FAULT::
PUSHAD
MOV EBP,ESP
MOV EDX,U4 SP_PARAM1[EBP]
IRQFAULT::
CLD
PUSH EDX //Save IRQNUM
MOV U4 [SYS_CUR_FOCUS_TASK],0
MOV EAX,U4 FS:[TSS_DBG]
OR EAX,EAX
JNZ @@10
PUSH 0
PUSH U4 DEFAULT_STACK
PUSH 0
PUSH 0 ///Use parent account
PUSH 0
PUSH U4 FS:[TSS_ABSOLUTE_ADDRESS]
PUSH 0
PUSH U4 FAULT_DESC
PUSH 0
PUSH U4 CP_FAULT_CMD_LINE+4
CALL CP_SPAWN_TASK+4
ADD ESP,40
@@10: POP U4 TSS_USER_AUX0[EAX]
PUSH 0
PUSH EAX
MOV EAX,U4 [SYS_EXTERN_TABLE]
MOV EAX,U4 EXT_WINDOW_TO_TOP*4[EAX]
OR EAX,EAX
JZ @@20
CALL EAX
@@20: ADD ESP,8
POPAD
BTS U4 FS:[TSS_TASK_FLAGS],TSSf_SUSPENDED
JMP U4 IRQ_SWAP_IN_NEXT
GET_MACHINE_REGS::
PUSH EBP
MOV EBP,ESP
MOV EBX,SF_PARAM1[EBP]
DU1 0x0F,0x20,0xC0;
MOV U4 [EBX],EAX
DU1 0x0F,0x20,0xD0;
MOV U4 4[EBX],EAX
DU1 0x0F,0x20,0xD8;
MOV U4 8[EBX],EAX
DU1 0x0F,0x20,0xE0;
MOV U4 12[EBX],EAX
DU1 0x0F,0x21,0xC0;
MOV U4 16[EBX],EAX
DU1 0x0F,0x21,0xC8;
MOV U4 20[EBX],EAX
DU1 0x0F,0x21,0xD0;
MOV U4 24[EBX],EAX
DU1 0x0F,0x21,0xD8;
MOV U4 28[EBX],EAX
DU1 0x0F,0x21,0xF0;
MOV U4 32[EBX],EAX
DU1 0x0F,0x21,0xF8;
MOV U4 36[EBX],EAX
POP EBP
RET