ЧИСТО ДЛЯ СПРАВЕДЛИВОСТИ картины - вот что выдает Borland с выключенной оптимизацией...(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено -=SOIC=- 04 июля 2003 г. 14:26
В ответ на: чисто для полноты картины, как это делает MS компилятор отправлено _RF_ 04 июля 2003 г. 14:01

Результат компиляции Borland'ом (оптимизация выключена!) (V5.5):


bcc32 -S -5 test.c:


push ebp
mov ebp,esp
mov ecx,dword ptr [ebp+8]
?live1@16:
@1:
mov eax,ecx
?live1@32:
@2:
@3:
mov dl,byte ptr [eax]
inc eax
test dl,dl
jne short @2
dec eax
cmp ecx,eax
jae short @5
@4:
dec eax
mov dl,byte ptr [eax]
?live1@96:
cmp dl,32
je short @6
cmp dl,9
jne short @7
?live1@112:
@6:
cmp ecx,eax
jb short @4
@5:
@7:
mov byte ptr [eax+1],0
?live1@160:
mov eax,ecx
?live1@176:
@10:
@9:
pop ebp
ret



Для любопытных - вот текст с коментариями (в том виде как его выдал borland):


;
; char *strtrm(char *ptr)
;
push ebp
mov ebp,esp
mov ecx,dword ptr [ebp+8]
;
; {
; char *_pt = ptr;
;
?live1@16: ; ECX = ptr
@1:
mov eax,ecx
;
; char _ch;
; while (*_pt++); // Find the string end
;
?live1@32: ; EAX = _pt, ECX = ptr
@2:
@3:
mov dl,byte ptr [eax]
inc eax
test dl,dl
jne short @2
;
; --_pt; // Adjust pointer
;
dec eax
;
; while (_pt > ptr) // Go to the sring start
;
cmp ecx,eax
jae short @5
;
; {
; _ch = *--_pt; // Get byte
;
@4:
dec eax
mov dl,byte ptr [eax]
;
; if (_ch!=' ' && _ch!='\t') // It's not a space or tab
;
?live1@96: ; EAX = _pt, EDX = _ch, ECX = ptr
cmp dl,32
je short @6
cmp dl,9
jne short @7
;
; break; // then all done
;
?live1@112: ; EAX = _pt, ECX = ptr
@6:
cmp ecx,eax
jb short @4
;
; }
; *(_pt+1) = 0; // Terminate the string
;
@5:
@7:
mov byte ptr [eax+1],0
;
; return ptr;
;
?live1@160: ; ECX = ptr
mov eax,ecx
;
; }
;
?live1@176: ;
@10:
@9:
pop ebp
ret
 

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru