Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-09-2004, 20:30   #1
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
[Asm/C]Asm prodotto e ottimizzazioni

questo è il sorgente C che ho compilato:
Codice:
 
/*
### Copyright (c) 2004 Luca Francesca
### This script is provided under the terms of the GNU General Public License
### (see http://www.gnu.org/licenses/gpl.html for the full license text.)
*/
#include <stdio.h>
#include <stdlib.h>
#define MASK 0x40 /* control bit 6 */

int main(int argc, char *argv[])
{
  unsigned int i = 100, tmp1 , tmp2, tmp3, tmp4;
  tmp1 = i & MASK;
  tmp2 = i ^ MASK;
  tmp3 = (i >> 2);
  tmp4 = (i << 2);
  printf("i = %d \n \
  i & MASK = %d \n \
  i ^ MASK = %d \n \
  i >> 2 = %d \n\
  i << 2 = %d\n", i, tmp1, tmp2, tmp3, tmp4);
  char c;
  scanf("%c", &c);
  return 0;
}
Questo il risultato senza opt:
Codice:
	.file	"i.c"
	.def	___main;	.scl	2;	.type	32;	.endef
	.text
	.align 32
LC0:
	.ascii "i = %d \12   i & MASK = %d \12   i ^ MASK = %d \12   i >> 1 = %d \12  i << 1 = %d\12\0"
LC1:
	.ascii "%c\0"
	.align 2
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$40, %esp
	andl	$-16, %esp
	movl	$0, %eax
	movl	%eax, -28(%ebp)
	movl	-28(%ebp), %eax
	call	__alloca
	call	___main
	movl	$100, -4(%ebp)
	movl	-4(%ebp), %eax
	andl	$64, %eax
	movl	%eax, -8(%ebp)
	movl	-4(%ebp), %eax
	xorl	$64, %eax
	movl	%eax, -12(%ebp)
	movl	-4(%ebp), %eax
	shrl	%eax
	movl	%eax, -16(%ebp)
	movl	-4(%ebp), %eax
	addl	%eax, %eax
	movl	%eax, -20(%ebp)
	subl	$8, %esp
	pushl	-20(%ebp)
	pushl	-16(%ebp)
	pushl	-12(%ebp)
	pushl	-8(%ebp)
	pushl	-4(%ebp)
	pushl	$LC0
	call	_printf
	addl	$32, %esp
	subl	$8, %esp
	leal	-21(%ebp), %eax
	pushl	%eax
	pushl	$LC1
	call	_scanf
	addl	$16, %esp
	movl	$0, %eax
	leave
	ret
	.def	_scanf;	.scl	2;	.type	32;	.endef
	.def	_printf;	.scl	2;	.type	32;	.endef
Questo con -O3 -std=c99
Codice:
 
	.file	"i.c"
	.def	___main;	.scl	2;	.type	32;	.endef
	.text
	.align 32
LC0:
	.ascii "i = %d \12   i & MASK = %d \12   i ^ MASK = %d \12   i >> 2 = %d \12  i << 2 = %d\12\0"
LC1:
	.ascii "%c\0"
	.align 2
	.p2align 4,,15
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	xorl	%eax, %eax
	movl	%esp, %ebp
	pushl	%edx
	pushl	%edx
	andl	$-16, %esp
	call	__alloca
	call	___main
	pushl	%eax
	pushl	%eax
	pushl	$400
	pushl	$25
	pushl	$36
	pushl	$64
	pushl	$100
	pushl	$LC0
	call	_printf
	leal	-1(%ebp), %edx
	addl	$24, %esp
	pushl	%edx
	pushl	$LC1
	call	_scanf
	movl	%ebp, %esp
	xorl	%eax, %eax
	popl	%ebp
	ret
	.def	_scanf;	.scl	2;	.type	32;	.endef
	.def	_printf;	.scl	2;	.type	32;	.endef
La v in O3 sa gia quali valori dare a printf mentre la senza opt li prende dallo stack......questo ad una prima analisi...

Ora vorrei riflettere con voi su una cosa.......ma perche cìè questo divario di codice?

P.S: qualcuno puo postare il codice del VC++6 e del VC++.NET per confrontare l'output??
P.P.S: se volete..chiudetemi il post.....ma secondo me è molto bello vedere le diff tra compilatori
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2004, 21:01   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Cosa ti aspettavi scusa? Che l'ottimizzatore facesse ugualmente i calcoli, anche se poteva conoscere il risultato a priori?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2004, 21:07   #3
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
la mia era curiosita
Il mio PS sarebbe motlo interessante cmq, IMHO
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2004, 21:17   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Intanto, IO ho fatto meglio di TE
Codice:
	.file	"aa.c"
	.version	"01.01"
gcc2_compiled.:
	.section	.rodata.str1.32,"ams",@progbits,1
	.align 32
.LC0:
	.string	"i = %d \n   i & MASK = %d \n   i ^ MASK = %d \n   i >> 2 = %d \n  i << 2 = %d\n"
	.section	.rodata.str1.1,"ams",@progbits,1
.LC1:
	.string	"%c"
.text
	.align 16
.globl main
	.type	 main,@function
main:
	subl	$20, %esp
	pushl	$400
	pushl	$25
	pushl	$36
	pushl	$64
	pushl	$100
	pushl	$.LC0
	call	printf
	addl	$24, %esp
	leal	19(%esp), %eax
	pushl	%eax
	pushl	$.LC1
	call	scanf
	xorl	%eax, %eax
	addl	$28, %esp
	ret
.Lfe1:
	.size	 main,.Lfe1-main
	.ident	"GCC: (GNU) 2.96 20000731 (Mandrake Linux 8.2 2.96-0.76mdk)"
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2004, 21:53   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
...la mano magica
(mi scuso per le .string, ma non mi veniva in mente altro per riservare un pò di spazio )

Codice:
 .file "aa.c"
 .version "01.01"
gcc2_compiled.:
 .section .rodata.str1.32,"ams",@progbits,1
 .align 32
.LC0:
 .string "i = %d \n   i & MASK = %d \n   i ^ MASK = %d \n   i >> 2 = %d \n  i << 2 = %d\n"
 .section .rodata.str1.1,"ams",@progbits,1
.text
 .align 16
.globl main
 .type  main,@function
main:
  movl %esp, (zampa)
  leal zumpa, %esp
  call printf
  movl (zampa), %esp
  ret
.Lfe1:
 .size  main,.Lfe1-main
 .ident "GCC: (GNU) 2.96 20000731 (Mandrake Linux 8.2 2.96-0.76mdk)"
.data
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
  .string "                                                                                                                                "
zumpa:
  .long .LC0
  .long 100
  .long 64
  .long 36
  .long 25
  .long 400
zampa:
  .long 0
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2004, 21:57   #6
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
questa è la versione del 3.5
Codice:
	.file	"a.c"
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"i = %d \n   i & MASK = %d \n   i ^ MASK = %d \n   i >> 2 = %d \n  i << 2 = %d\n"
.LC1:
	.string	"%c"
	.text
	.align 4
.globl main
	.type	main, @function
main:
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%eax
	pushl	$400
	pushl	$25
	pushl	$36
	pushl	$64
	pushl	$100
	pushl	$.LC0
	call	printf
	leal	-1(%ebp), %eax
	pushl	%eax
	pushl	$.LC1
	call	scanf
	xorl	%eax, %eax
	leave
	ret
	.size	main, .-main
	.ident	"GCC: (GNU) 3.5.0 20040724 (experimental) (Debian 3.5-0pre1)"
	.section	.note.GNU-stack,"",@progbits
ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2004, 22:07   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Battetemi questa
(oops mi ero scordato la scanf )
Codice:
fmt: .string "%c\0i = %d \n   i & MASK = %d \n   i ^ MASK = %d \n   i >> 2 = %d \n  i << 2 = %d\n"
.globl main
main:
  movl %esp, (zampa)
  leal zumpa, %esp
  call  printf
  leal zompa, %esp
  call scanf
  movl (zampa), %esp
  ret
.data
zampa:
  .zero 4096
zumpa:
  .long fmt+3
  .long 100
  .long 64
  .long 36
  .long 25
  .long 400
zompa:
  .long fmt
  .long zampa+4
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 09-09-2004 alle 22:12.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2004, 22:32   #8
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da ilsensine
Battetemi questa
(oops mi ero scordato la scanf )
[...]
che opzione hai usato ? -fuse-zompa-labels ? ma se volessi provare anche io ilsecc dove lo posso scaricare ?

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Prezzi alle stelle della memoria RAM, se...
Torna MacBook Air con chip M4 scontato d...
Torna a soli 25,40€ il caricatore multip...
L'India chiede ai produttori di smartpho...
Apple cambia tutto sull'intelligenza art...
AWS Transform si evolve: agenti IA per m...
I social network hanno stancato gli ital...
Star Citizen supera i 900 milioni di dol...
Netflix ha eliminato la funzione Cast pe...
L'IA è una bolla e scoppier&agrav...
Un rapporto collega i data center di Ama...
Troppa concorrenza per Cherry (quella de...
Entro il 2035 la Cina vuole costruire de...
Tineco in super sconto: ultimo giorno di...
La Cina creerà una costellazione ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v