Rev 375 | Rev 477 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 375 | Rev 398 | ||
---|---|---|---|
Line 16... | Line 16... | ||
16 | dd 0x0, 0x0 |
16 | dd 0x0, 0x0 |
Line 17... | Line 17... | ||
17 | 17 | ||
18 | include 'macros.inc' |
18 | include 'macros.inc' |
Line 19... | Line 19... | ||
19 | include 'debug.inc' |
19 | include 'debug.inc' |
20 | 20 | ||
21 | START: |
21 | START: print 'Please wait' |
22 | mov eax, 19 ; ôóíêöèÿ ïóñòûøêà |
22 | ; ÷åðåç áûñòðûé âûçîâ (SYSENTER) |
23 | push ecx |
23 | test1: mov eax, 1 |
24 | syscall |
- | |
25 | pop ecx |
24 | cpuid |
26 | 25 | test edx, 0x800 |
|
- | 26 | jnz .ok |
|
27 | 27 | dps 'unsupported ' |
|
28 | print '! Alive !' |
28 | jmp .end |
29 | 29 | .ok: |
|
30 | xor eax, eax |
30 | xor eax, eax |
31 | cpuid |
31 | cpuid |
32 | rdtsc |
32 | rdtsc |
Line 33... | Line -... | ||
33 | mov [old_tsc], eax |
- | |
34 | mov [old_tsc + 4], edx |
33 | mov [old_tsc], eax |
35 | 34 | mov [old_tsc + 4], edx |
|
36 | ; ÷åðåç áûñòðûé âûçîâ |
35 | |
37 | test1: mov ebx, 0x100000 |
36 | mov ebx, 0x100000 |
38 | mov dword[SYSENTER_VAR], .ret_p |
37 | mov dword[SYSENTER_VAR], .ret_p |
39 | mov [SYSENTER_VAR + 4], esp |
38 | mov [SYSENTER_VAR + 4], esp |
Line 51... | Line 50... | ||
51 | dec edx |
50 | dec edx |
52 | @@: sub eax, [old_tsc] |
51 | @@: sub eax, [old_tsc] |
53 | sub edx, [old_tsc + 4] |
52 | sub edx, [old_tsc + 4] |
54 | debug_print_hex edx |
53 | debug_print_hex edx |
55 | debug_print_hex eax |
54 | debug_print_hex eax |
56 | print ' <- Fast call' |
55 | .end: print ' <- Fast call (SYSENTER)' |
57 | - | ||
Line -... | Line 56... | ||
- | 56 | ||
- | 57 | ;---------------------------------------------- |
|
- | 58 | ; ÷åðåç áûñòðûé âûçîâ (SYSCALL) |
|
- | 59 | test2: xor eax, eax |
|
- | 60 | cpuid |
|
- | 61 | cmp ecx, "cAMD" |
|
- | 62 | je .ok |
|
- | 63 | .nf: dps 'unsupported ' |
|
- | 64 | jmp .end |
|
- | 65 | .ok: mov eax, 0x80000001 |
|
- | 66 | cpuid |
|
- | 67 | test edx, 0x800 ; bit_11 - SYSCALL/SYSRET support |
|
Line 58... | Line 68... | ||
58 | 68 | jz .nf |
|
59 | 69 | ||
60 | xor eax, eax |
70 | xor eax, eax |
61 | cpuid |
71 | cpuid |
62 | rdtsc |
72 | rdtsc |
- | 73 | mov [old_tsc], eax |
|
- | 74 | mov [old_tsc + 4], edx |
|
- | 75 | ||
- | 76 | mov ebx, 0x100000 |
|
- | 77 | align 32 |
|
- | 78 | .nxt: mov eax, 19 |
|
- | 79 | push ecx |
|
- | 80 | syscall |
|
- | 81 | pop ecx |
|
- | 82 | ||
- | 83 | .ret_p: dec ebx |
|
- | 84 | jnz .nxt |
|
- | 85 | ||
- | 86 | xor eax, eax |
|
- | 87 | cpuid |
|
- | 88 | rdtsc |
|
- | 89 | cmp eax, [old_tsc] |
|
- | 90 | jnb @f |
|
- | 91 | dec edx |
|
- | 92 | @@: sub eax, [old_tsc] |
|
- | 93 | sub edx, [old_tsc + 4] |
|
- | 94 | debug_print_hex edx |
|
- | 95 | debug_print_hex eax |
|
63 | mov [old_tsc], eax |
96 | .end: print ' <- Fast call (SYSCALL)' |
- | 97 | ;---------------------------------------------- |
|
- | 98 | ; ÷åðåç øëþç ïðåðûâàíèÿ |
|
- | 99 | xor eax, eax |
|
- | 100 | cpuid |
|
- | 101 | rdtsc |
|
- | 102 | mov [old_tsc], eax |
|
64 | mov [old_tsc + 4], edx |
103 | mov [old_tsc + 4], edx |
65 | ; ÷åðåç øëþç ïðåðûâàíèÿ |
104 | |
66 | test2: mov ebx, 0x100000 |
105 | test3: mov ebx, 0x100000 |
67 | align 32 |
106 | align 32 |
68 | .nxt: mov eax, 19 ; ôóíêöèÿ ïóñòûøêà |
107 | .nxt: mov eax, 19 ; ôóíêöèÿ ïóñòûøêà |
69 | int 0x40 |
108 | int 0x40 |