Optimization a code for repne scasb instruction.

git-svn-id: svn://kolibrios.org@1167 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Alexey Teplov ( 2009-09-18 17:44:57 +00:00
parent 7cb34de2df
commit 49698c69f7
2 changed files with 12 additions and 107 deletions

View File

@ -89,7 +89,6 @@ pushad
mov dword [save_ecx],ecx
add ebp, 32 ;ñìåùàåìñÿ äî ÁÄÂÊ
mov dword [save_ebp],ebp
; mov dword [save_point_nt],ebp
cld ;óñòàíîâêà ôëàãà íàïðàâëåíèÿ
align 4
.start_loop:
@ -97,21 +96,10 @@ align 4
lea edi,[ebp+0x28] ;â edi óêàçàòåëü íà íà÷àëî èìåíè.
xor eax,eax
mov ecx,263
align 4
.again: mov al,byte[edi]
test al,al
jz .next_a
dec ecx
inc edi
jnz .again
jmp @f
; repe scasb ;íàéäåì êîíåö ñòðîêè
; jnz @f
;;;; èìÿ ïðèñóòñòâóåò, ïðîâåðèì ÿâëÿòñÿ ëè èìÿ ôàéëà ñ ðàñøèðåíèåì fnt )
; sub edi,6 ;.ksf,0
repne scasb ;íàéäåì êîíåö ñòðîêè
;;;;;;;;;;;;;;;;;;;;;;;
.next_a:
sub edi,4 ;.ksf,0
sub edi,5 ;.ksf,0
mov esi,dword name_font
mov ecx,name_font_e-name_font
repe cmpsb
@ -164,18 +152,6 @@ align 4
; â íà÷àëî áóôåðà
mov dword [save_point_nt],ebp
; mov esi, ebp
; mov ecx,304/4
;align 4
;.transfer:
; lodsd
; stosd
; loop .transfer
; add dword [save_point_nt],304 ;óêàçàòåëü íà ñëåäóþùèé áëîê
;;; ñäåëàëè òàðíñôåð ïåðåìåùåíèå äàííûõ
pop ecx
mov dword [esp+28],0
popad
@ -202,15 +178,12 @@ get_font:
; ïîèñê â ìàññèâå øðèôòà ïðè ñîâïàäåíèè ócëîâèé çàãðóçêà øðèôòà
; esp+4 = dd width font shl 16 +hight font
; esp+0 = dd back
pop eax
pop dword [font_x_y]
push eax
; pop eax
; mov dword [font_x_y],eax
;pop eax
; pop dword [font_x_y]
;push eax
pushad
mov eax,dword [esp+32+4]
mov dword [font_x_y],eax
xor eax,eax
mov dword [number_function],eax
mov dword [index_start_block],eax ;ïîçèöèÿ â ôàéëå äëÿ ÷òåíèÿ äàííûõ
@ -223,10 +196,6 @@ pushad
mov dword [offset_to_string],edi
; mov ecx,dword [save_ecx] ; êîë-âî èòåðàöèé ò.å. ïðîõîäîâ
align 4
;.start_check:
; push ecx
mov eax,70
mov ebx,dword struct_f_info
mcall
@ -235,36 +204,11 @@ align 4
mov eax,dword [file_buffer]
mov ebx,dword [type_fnt]
cmp eax,ebx
; jnz @f
; xor eax,eax
; mov dword [number_function],eax
; add eax,8
; mov dword [read_block],eax
; mov dword [buffer_read_d],file_buffer
; mov ebx,dword struct_f_info
; mov eax,70
;align 4
;.start_check:
;çàãðóçèì çàãîëîâîê ôàéëà è óçíàåì åãî ðàçìåð ãëèôà.
; lea edi, [ebp+0x28] ;â edi óêàçàòåëü íà íà÷àëî èìåíè.
; mov dword [offset_to_string],edi
;get in buffer info above own file
; mcall
;;;;;;;;;;;;;;;; ïðîâåðèì ôîðìàò çàãîëîâêà
; mov ecx,dword [file_buffer.type_fnt]
; mov edx,dword [type_fnt]
; cmp ecx,edx
; jnz @f
mov ecx,dword [file_buffer.font_size]
mov edx,dword [font_x_y]
cmp ecx,edx
; jnz @f ;óïñ íåóäà÷à âûøëà
;øðèôò ñîâïàë ò.å. ýòî íàø,íóæíûé íàì øðèôò, ìû åãî äîëæíû çàãðóçèòü â ÎÇÓ
; mov ebp,dword [save_point_nt]
mov ecx, 4096;dword [ebp+32] ;ðàçìåð ôàéëà äî 4294967296 áàéò ò.å. 4 Ãá
mov dword [read_block],ecx
@ -292,22 +236,14 @@ align 4
mov dword [esp+28],0
; pop ecx
popad
ret
ret 4
;here error file system
align 4
@@:
; pop ecx
; add ebp,304
; dec ecx
; jnz .start_check
or dword [esp+28],-1 ;âåðíåì îøèáêó
popad
ret
ret 4
; ïîèñê âûâîä ñòîðî÷êè ïî ñèìâîëüíî ñôîðèðîâàííîãî øðèôòîì òåêñòà
@ -324,39 +260,16 @@ pushad
mov ecx,dword [font_x_y] ;ðàçìåð ãëèôà x shl 16 +y
mov edi,dword [esp+8+32] ;óêàçàòåëü íà ïàëèòðó èç öâåòà è ôîíà
xor ebp,ebp ;ñì 65 ôóíêöèþ ))
;;;;;;;;;;;;;;;;;;;;;
; pushad
; mov ebp, dword [esp+4+32+32]
; mov ebp, dword [save_point_nt]
; lea edi, [ebp+0x28] ;â edi óêàçàòåëü íà íà÷àëî èìåíè.
; sub edi,4 ;.ksf,0
; mov eax,4
; mov ebx,dword [show_dir]
; add dword [show_dir],10
; mov ecx,0x80000000;DDBBCC
; mov edx,ebp;[ebp+0x28];eax;edi
; xor esi,esi
;mov esi,8
; mcall
; popad
;;;;;;;;;;;;;;;;;;;;;;;;
cld
align 4
@@: ;pushad
xor eax,eax
lodsb
test al,al
jz .exit
; movzx eax,al
jz .return
shl eax,4 ;óìíîæàåì íà 16 ò.ê. ýòî âûñîòà ãëèôà
; imul eax,16
mov ebx,dword [font_array_data] ; òóò ðàñïîëîãàþòñÿ ãëèôû ñèìâîëîâ
; add eax,ebx
; mov ebx,dword [ebx+8] ; ñìåùåíèå
; add eax,ebx
add ebx,eax
push esi
mov esi,1
@ -365,11 +278,6 @@ align 4
pop esi
add edx,8 shl 16 ;ñëåäóþùèé ñèìâîë øèðèíà ñèìâîëà = 8 òî÷êàì
jmp @b
align 4
.exit: ;popad
; add edx,16
; loop .next
align 4
.return:
@ -393,7 +301,6 @@ align 4
mov esi,1
mov eax,65
mcall
popad
ret 4
@ -506,8 +413,6 @@ font_array_point dd 0x0
font_array_data dd 0x0 ; ðåàëüíûå äàííûå ò.å. ìàòðèöà øðèôòà
save_ebp dd 0x0
save_point_nt dd 0x0
;name_of_file db 263 dup(0x0)
;name_of_file db '/sys/FONTS/font01.ksf',0
name_fulder db '/sys/FONTS',0
name_fuld_end= ($-name_fulder) -1
name_font db '.ksf'

View File

@ -24,8 +24,8 @@
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;*****************************************************************************
Простая библиотека шрифтов.
Альфа версия 0.00002 Автор Теплов Алексей. <Lrz>
Библиотека шрифтов.
Альфа версия 0.00003 Автор Теплов Алексей. <Lrz>
Для демострации примера вам необходимо сделать следующее:
1) поместить библиотека fonts_lib.obj в дирректорию с примером font_ex.kex или лучше будет поместить библиотеку в /sys/lib
2) скопировать файл font01.ksf в дирректорию /sys/FONTS причем имя файла может быть любое обязательно только расширение *.ksf