Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 476 → Rev 477

/programs/develop/fast_call_test/test.ASM
4,7 → 4,6
; Compile with FASM for Kolibri
;
;
SYSENTER_VAR equ 0
use32
org 0x0
db 'MENUET01'
20,6 → 19,7
 
START: print 'Please wait'
; ÷åðåç áûñòðûé âûçîâ (SYSENTER)
__CPU_type equ p6
test1: mov eax, 1
cpuid
test edx, 0x800
34,12 → 34,10
mov [old_tsc + 4], edx
mov ebx, 0x100000
mov dword[SYSENTER_VAR], .ret_p
mov [SYSENTER_VAR + 4], esp
align 32
.nxt: mov eax, 19 ; ôóíêöèÿ ïóñòûøêà
sysenter ; ïîðòÿòñÿ ecx, edx
.ret_p: dec ebx
.nxt: mcall 19 ; ôóíêöèÿ ïóñòûøêà
; ïîðòÿòñÿ ecx, edx
dec ebx
jnz .nxt
 
xor eax, eax
56,6 → 54,7
;----------------------------------------------
; ÷åðåç áûñòðûé âûçîâ (SYSCALL)
__CPU_type equ k6
test2: xor eax, eax
cpuid
cmp ecx, "cAMD"
75,12 → 74,9
mov ebx, 0x100000
align 32
.nxt: mov eax, 19
push ecx
syscall
pop ecx
.nxt: mcall 19 ; ôóíêöèÿ ïóñòûøêà
.ret_p: dec ebx
dec ebx
jnz .nxt
 
xor eax, eax
96,6 → 92,7
.end: print ' <- Fast call (SYSCALL)'
;----------------------------------------------
; ÷åðåç øëþç ïðåðûâàíèÿ
__CPU_type equ p5
xor eax, eax
cpuid
rdtsc
104,8 → 101,7
test3: mov ebx, 0x100000
align 32
.nxt: mov eax, 19 ; ôóíêöèÿ ïóñòûøêà
int 0x40
.nxt: mcall 19 ; ôóíêöèÿ ïóñòûøêà
dec ebx
jnz .nxt
121,42 → 117,7
debug_print_hex eax
print ' <- Interrupt'
 
call show_alive
mov eax, -1
int 0x40
mcall -1
;---------------------------------------------
show_alive:
; ÷åðåç áûñòðûé âûçîâ, íàñòðàèâàåì ðåãèñòðû äëÿ âîçâðàòà
mov eax, 63
mov ebx, 1
mov esi, msg_Ok
.nxt: mov cl, [esi]
test cl, cl
jz .end
 
mov dword[SYSENTER_VAR], .ret_p
mov [SYSENTER_VAR + 4], esp
sysenter ; ïîðòÿòñÿ ecx, edx
 
.ret_p: inc esi
jmp .nxt
.end: ret
; ÷åðåç øëþç ïðåðûâàíèÿ
; mov eax, 63
; mov ebx, 1
; mov esi, msg_Ok
; @@: mov cl, [esi]
; test cl, cl
; jz @f
 
; int 0x40
 
; inc esi
; jmp @b
; @@: ret
 
 
old_tsc: dd 0, 0
 
msg_Ok db 'Alive!', 10, 13, 0
I_END: