Mostra notizie nelle discussioni
  • Avatar
    ☺
    Scritto da
    altg
    utente che non utiene
    il 2014-11-03 21:14:29.0 alle 2014-11-03 21:14:29.0
    Trollate totali: 11540
    mah, be', certo, sembra un tantino macchinoso...
    ...ma porca miseria, come si semplifica 'sto cazzo di hello world?

            startup displayStatus engage
            include string ToText
            include textIo on console
            include util Pause
    
    
            to Begin "framed
    
                    here messenger ~ textIo::Create -> Bind To console
                    here message ~ { Hello_world! } as string -> To Text
                    messenger -> Say message
                    util::Pause
                    return
    


    Ah, ho cambiato le freccine "comes from", quelle che prima erano <- ora sono rappresentate dall'asciitilde (~). A parte quello, che l'ho fatto perche` vedere freccine di qui e di la` sulla stessa riga lo trovavo distraente, difficile da leggere. Pero` a parte quello, minchia!

    Tutto per scrivere "hello world", prima era piu` semplice ma non aveva static typing (che controlla tutti i bindings delle istanze e che fra l'altro gli dice che { Hello_world! } e` una stringa (null-terminated) alla quale viene applicato il metodo "To Text" che la trasforma in un oggetto "text" allocato sull'heap, che lo wrappa in informazioni aggiuntive (per esempio diventa non piu` null-terminated ma di una lunghezza nota, che e` una proprieta` dell'oggetto).

    E poi prima non passava da un'opportuna interfaccia: e se poi voglio scriverlo su un file? O su uno schermo grafico? O mandarlo attraverso una socket? Mi toccava sempre cambiare la chiamata a "Say" che prima si riferiva direttamente a un metodo dell'oggetto "text" che assumeva che i testi si scrivessero tutti tramite stdout. Cosi` invece uso un metodo virtuale di "textIo" che POI, a scelta e in questo specifico caso, s'interfaccia con la console (cioe` scrive su stdout, per via di "Bind To console").

    Cioe`, non so, dal punto di vista logico mi sembra tutto molto bello, ma come mai mi e` rimasta addosso la sensazione di aver costruito una centrale nucleare per far funzionare un aspirapolvere? Newbie, inesperto
    • Avatar
      ☺
      Scritto da
      аvvelentani
      Utente privilegiato
      il 2014-11-03 21:49:50.0 alle 2014-11-03 21:49:50.0
      Trollate totali: 58
      Re: mah, be', certo, sembra un tantino macchinoso...
      Scritto da: altg
      > ...ma porca miseria, come si semplifica 'sto cazzo di hello world?
      >
      >
      > startup displayStatus engage
      > include string ToText
      > include textIo on console
      > include util Pause
      > 
      > 
      > to Begin "framed
      > 
      > here messenger ~ textIo::Create -> Bind To console
      > here message ~ { Hello_world! } as string -> To Text
      > messenger -> Say message
      > util::Pause
      > return
      > 

      >
      > Ah, ho cambiato le freccine "comes from", quelle che prima erano <- ora sono rappresentate dall'asciitilde (~). A parte quello, che l'ho fatto perche` vedere freccine di qui e di la` sulla stessa riga lo trovavo distraente, difficile da leggere. Pero` a parte quello, minchia!
      >
      > Tutto per scrivere "hello world", prima era piu` semplice ma non aveva static typing (che controlla tutti i bindings delle istanze e che fra l'altro gli dice che { Hello_world! } e` una stringa (null-terminated) alla quale viene applicato il metodo "To Text" che la trasforma in un oggetto "text" allocato sull'heap, che lo wrappa in informazioni aggiuntive (per esempio diventa non piu` null-terminated ma di una lunghezza nota, che e` una proprieta` dell'oggetto).
      >
      > E poi prima non passava da un'opportuna interfaccia: e se poi voglio scriverlo su un file? O su uno schermo grafico? O mandarlo attraverso una socket? Mi toccava sempre cambiare la chiamata a "Say" che prima si riferiva direttamente a un metodo dell'oggetto "text" che assumeva che i testi si scrivessero tutti tramite stdout. Cosi` invece uso un metodo virtuale di "textIo" che POI, a scelta e in questo specifico caso, s'interfaccia con la console (cioe` scrive su stdout, per via di "Bind To console").
      >
      > Cioe`, non so, dal punto di vista logico mi sembra tutto molto bello, ma come mai mi e` rimasta addosso la sensazione di aver costruito una centrale nucleare per far funzionare un aspirapolvere? Newbie, inesperto

      Ranona
      I think happiness is love
      - Vladimir Putin
      • Avatar
        ☺
        Scritto da
        altg
        utente che non utiene
        il 2014-11-03 22:06:22.0 alle 2014-11-03 22:06:22.0
        Trollate totali: 11540
        Re: mah, be', certo, sembra un tantino macchinoso...
        > Ranona

        Ma aspe', provo a spiegare che fa riga per riga.

                startup displayStatus engage
        


        Dice al modulo di run-time di aprire la console all'avvio del programma. Si puo` fare anche dopo, facendo partire il display in "standby" che e` il default, ma nell'helloworld probabilmente sembra piu` facile cosi` perche` non deve includere un altra librerietta che conterrebbe "display::Enter Text Mode".

                include string ToText
        


        Include il metodo "To Text" (e implicitamente la definizione della classe "string").

                include textIo on console
        


        Include (implicitamente) l'interfaccia textIo e (esplicitamente) l'implementazione per la console.

                include util Pause
        


        La funzioncina che aspetta un tasto o un qualche altro input dall'utente, cosi` non chiude subito la finestra prima di aver letto hello world. Questo perche` l'applicazione non parte da console, ma in ambiente finestrato.

                to Begin "framed
        


        Vabbe', l'equivalente di "main". La hint dice "framed": in questo modo permette la dichiarazione di variabili locali, e crea lo stack frame.

                        here messenger ~ textIo::Create -> Bind To console
        


        Dichiara la locale "messenger" che e` assegnata al valore di ritorno di textIo:Create, che crea un'istanza dell'interfaccia textIo. Prima di ritornare, spedisce il puntatore all'istanza a "Bind To" con l'argomento "console", per fare il binding dinamico. L'argomento "console" e` una tabella di metodi virtuali definita nell'implementazione. Viene risolta senza fully qualified name (che sarebbe consoleIo__console) perche` il namespace consoleIo e` un nodo "figlio" di textIo, e il namespace textIo entra a far parte dello scope, nella chiamata, perche` il valore di ritorno da textIo::Create e` "textIo".

                        here message ~ { Hello_world! } as string -> To Text
        


        Dichiara la locale "message" e la assegna al valore di ritorno di "To Text", che e` un metodo di "string", dopo aver castato esplicitamente la stringa come "string". Meglio non farlo fare da solo al compilatore perche` ci possono essere piu` tipi di stringhe e sequenze di dati statici inizializzati: quella e` una string (32 bit per carattere, null-terminated), ma ci potrebbero essere stringhe di testo di tutte le wordsize a partire, ragionevolmente, da 7 bit, e come chiamarle lo lascio al programmatore.

                        messenger -> Say message
        


        Chiama il metodo Say dell'interfaccia rappresentata da messenger (che e` istanza di textIo), passandogli come argomento il text di cui sopra.

        
                        util::Pause
                        return
        
        


        Se lo schermo e` in text mode, aspetta "enter" e chiude il programma (fa una lettura dummy di stdin per aspettare "enter").
        • Avatar
          ☺
          Scritto da
          altg
          utente che non utiene
          il 2014-11-03 22:21:35.0 alle 2014-11-03 22:21:35.0
          Trollate totali: 11540
          Re: mah, be', certo, sembra un tantino macchinoso...
          ah, casomai, questo e` il disassemblato di "Begin"... Imbarazzato

          	                                                                                         Begin
          
          	@LINKER: runStart 559
          
          	00000559 55                              PUSH.r          EBP(v)                                  enter (implied)
          	0000055A 81EC00000000                    SUB.rm,i        ESP(s), 00000000
          	00000560 89E5                            MOV.rm,r        EBP(v), ESP(s)
          	00000562 56                              PUSH.r          ESI(r)                                  here messenger ~ textIo::Create -> Bind To console
          	00000563 E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003E3
          	00000568 52                              PUSH.r          EDX(p)
          	00000569 BA20000000                      MOV.r,i         EDX(p), 00000020
          	0000056E E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003EE
          	00000573 5A                              POP.r           EDX(p)
          	00000574 897500                          MOV.rm,r        [EBP(v)+00], ESI(r)
          	00000577 5E                              POP.r           ESI(r)
          	00000578 56                              PUSH.r          ESI(r)                                  here message ~ {...} as string -> To Text
          	00000579 BE23000000                      MOV.r,i         ESI(r), 00000023
          	0000057E E8EFFCFFFF                      CALL.rel        FFFFFCEF ; 00000272
          	00000583 897504                          MOV.rm,r        [EBP(v)+04], ESI(r)
          	00000586 5E                              POP.r           ESI(r)
          	00000587 56                              PUSH.r          ESI(r)                                  messenger -> Say message
          	00000588 8B7500                          MOV.r,rm        ESI(r), [EBP(v)+00]
          	0000058B 52                              PUSH.r          EDX(p)
          	0000058C 8B5504                          MOV.r,rm        EDX(p), [EBP(v)+04]
          	0000058F E860FEFFFF                      CALL.rel        FFFFFE60 ; 000003F4
          	00000594 5A                              POP.r           EDX(p)
          	00000595 5E                              POP.r           ESI(r)
          	00000596 E840FFFFFF                      CALL.rel        FFFFFF40 ; 000004DB                     util::Pause
          	0000059B 81C408000000                    ADD.rm,i        ESP(s), 00000008                        return
          	000005A1 5D                              POP.r           EBP(v)
          	000005A2 C3                              RET.near        
          
          	                                                                                         End (helloWorld)
          


          magari si capiscono meglio le dinamiche fra i valori generati e dove vanno a finire. Il registro ESI fa da "ponte" attraverso cui passano gli indirizzi delle istanze (da una freccina all'altra).
          • Avatar
            ☺
            Scritto da
            Τhe Lich
            Übermensch
            il 2014-11-03 22:25:59.0 alle 2014-11-03 22:25:59.0
            Trollate totali: 58
            Re: mah, be', certo, sembra un tantino macchinoso...
            Scritto da: altg
            > ah, casomai, questo e` il disassemblato di "Begin"... Imbarazzato
            >
            >
            > 	                                                                                         Begin
            > 
            > 	@LINKER: runStart 559
            > 
            > 	00000559 55                              PUSH.r          EBP(v)                                  enter (implied)
            > 	0000055A 81EC00000000                    SUB.rm,i        ESP(s), 00000000
            > 	00000560 89E5                            MOV.rm,r        EBP(v), ESP(s)
            > 	00000562 56                              PUSH.r          ESI(r)                                  here messenger ~ textIo::Create -> Bind To console
            > 	00000563 E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003E3
            > 	00000568 52                              PUSH.r          EDX(p)
            > 	00000569 BA20000000                      MOV.r,i         EDX(p), 00000020
            > 	0000056E E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003EE
            > 	00000573 5A                              POP.r           EDX(p)
            > 	00000574 897500                          MOV.rm,r        [EBP(v)+00], ESI(r)
            > 	00000577 5E                              POP.r           ESI(r)
            > 	00000578 56                              PUSH.r          ESI(r)                                  here message ~ {...} as string -> To Text
            > 	00000579 BE23000000                      MOV.r,i         ESI(r), 00000023
            > 	0000057E E8EFFCFFFF                      CALL.rel        FFFFFCEF ; 00000272
            > 	00000583 897504                          MOV.rm,r        [EBP(v)+04], ESI(r)
            > 	00000586 5E                              POP.r           ESI(r)
            > 	00000587 56                              PUSH.r          ESI(r)                                  messenger -> Say message
            > 	00000588 8B7500                          MOV.r,rm        ESI(r), [EBP(v)+00]
            > 	0000058B 52                              PUSH.r          EDX(p)
            > 	0000058C 8B5504                          MOV.r,rm        EDX(p), [EBP(v)+04]
            > 	0000058F E860FEFFFF                      CALL.rel        FFFFFE60 ; 000003F4
            > 	00000594 5A                              POP.r           EDX(p)
            > 	00000595 5E                              POP.r           ESI(r)
            > 	00000596 E840FFFFFF                      CALL.rel        FFFFFF40 ; 000004DB                     util::Pause
            > 	0000059B 81C408000000                    ADD.rm,i        ESP(s), 00000008                        return
            > 	000005A1 5D                              POP.r           EBP(v)
            > 	000005A2 C3                              RET.near        
            > 
            > 	                                                                                         End (helloWorld)
            > 

            >
            > magari si capiscono meglio le dinamiche fra i valori generati e dove vanno a finire. Il registro ESI fa da "ponte" attraverso cui passano gli indirizzi delle istanze (da una freccina all'altra).

            è il clone, bamba di un pisano

            The Lich™
            « Non è morto ciò che in eterno può attendere,
            e col passare di strani eoni, anche la morte può morire. »
            Cylon
            Immagine postata dall'utente
            • Avatar
              ☺
              Scritto da
              altg
              utente che non utiene
              il 2014-11-03 22:32:32.0 alle 2014-11-03 22:32:32.0
              Trollate totali: 11540
              Re: mah, be', certo, sembra un tantino macchinoso...
              > > ah, casomai, questo e` il disassemblato di "Begin"... Imbarazzato
              > >
              > >
              > > 	                                                                                         Begin
              > > 
              > > 	@LINKER: runStart 559
              > > 
              > > 	00000559 55                              PUSH.r          EBP(v)                                  enter (implied)
              > > 	0000055A 81EC00000000                    SUB.rm,i        ESP(s), 00000000
              > > 	00000560 89E5                            MOV.rm,r        EBP(v), ESP(s)
              > > 	00000562 56                              PUSH.r          ESI(r)                                  here messenger ~ textIo::Create -> Bind To console
              > > 	00000563 E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003E3
              > > 	00000568 52                              PUSH.r          EDX(p)
              > > 	00000569 BA20000000                      MOV.r,i         EDX(p), 00000020
              > > 	0000056E E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003EE
              > > 	00000573 5A                              POP.r           EDX(p)
              > > 	00000574 897500                          MOV.rm,r        [EBP(v)+00], ESI(r)
              > > 	00000577 5E                              POP.r           ESI(r)
              > > 	00000578 56                              PUSH.r          ESI(r)                                  here message ~ {...} as string -> To Text
              > > 	00000579 BE23000000                      MOV.r,i         ESI(r), 00000023
              > > 	0000057E E8EFFCFFFF                      CALL.rel        FFFFFCEF ; 00000272
              > > 	00000583 897504                          MOV.rm,r        [EBP(v)+04], ESI(r)
              > > 	00000586 5E                              POP.r           ESI(r)
              > > 	00000587 56                              PUSH.r          ESI(r)                                  messenger -> Say message
              > > 	00000588 8B7500                          MOV.r,rm        ESI(r), [EBP(v)+00]
              > > 	0000058B 52                              PUSH.r          EDX(p)
              > > 	0000058C 8B5504                          MOV.r,rm        EDX(p), [EBP(v)+04]
              > > 	0000058F E860FEFFFF                      CALL.rel        FFFFFE60 ; 000003F4
              > > 	00000594 5A                              POP.r           EDX(p)
              > > 	00000595 5E                              POP.r           ESI(r)
              > > 	00000596 E840FFFFFF                      CALL.rel        FFFFFF40 ; 000004DB                     util::Pause
              > > 	0000059B 81C408000000                    ADD.rm,i        ESP(s), 00000008                        return
              > > 	000005A1 5D                              POP.r           EBP(v)
              > > 	000005A2 C3                              RET.near        
              > > 
              > > 	                                                                                         End (helloWorld)
              > > 

              > >
              > > magari si capiscono meglio le dinamiche fra i valori generati e dove vanno a finire. Il registro ESI fa da "ponte" attraverso cui passano gli indirizzi delle istanze (da una freccina all'altra).
              >
              > è il clone, bamba di un pisano

              Clone in che senso? Non duplica oggetti, ne trasporta solo l'indirizzo dell'istanza in memoria. E` un registro di transito che L.in.oleum chiama sempre "r" e che su x86 e` impersonato da ESI. Quando un metodo viene chiamato, l'indirizzo dell'istanza su cui opera lo trova in "r" (ESI). Quando una funzione ritorna un valore, il valore di ritorno e` depositato in "r" (cioe` ESI). Quando i metodi sono concatenati in una fluent interface, i metodi che non sono funzioni ritornano lo stesso valore che aveva "r" in ingresso, cioe` ritornano "this" o "self", per fare paralleli.
              • Avatar
                ☺
                Scritto da
                Τhe Lich
                Übermensch
                il 2014-11-03 22:38:42.0 alle 2014-11-03 22:38:42.0
                Trollate totali: 58
                Re: mah, be', certo, sembra un tantino macchinoso...
                Scritto da: altg
                > > > ah, casomai, questo e` il disassemblato di "Begin"... Imbarazzato
                > > >
                > > >
                > > > 	                                                                                         Begin
                > > > 
                > > > 	@LINKER: runStart 559
                > > > 
                > > > 	00000559 55                              PUSH.r          EBP(v)                                  enter (implied)
                > > > 	0000055A 81EC00000000                    SUB.rm,i        ESP(s), 00000000
                > > > 	00000560 89E5                            MOV.rm,r        EBP(v), ESP(s)
                > > > 	00000562 56                              PUSH.r          ESI(r)                                  here messenger ~ textIo::Create -> Bind To console
                > > > 	00000563 E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003E3
                > > > 	00000568 52                              PUSH.r          EDX(p)
                > > > 	00000569 BA20000000                      MOV.r,i         EDX(p), 00000020
                > > > 	0000056E E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003EE
                > > > 	00000573 5A                              POP.r           EDX(p)
                > > > 	00000574 897500                          MOV.rm,r        [EBP(v)+00], ESI(r)
                > > > 	00000577 5E                              POP.r           ESI(r)
                > > > 	00000578 56                              PUSH.r          ESI(r)                                  here message ~ {...} as string -> To Text
                > > > 	00000579 BE23000000                      MOV.r,i         ESI(r), 00000023
                > > > 	0000057E E8EFFCFFFF                      CALL.rel        FFFFFCEF ; 00000272
                > > > 	00000583 897504                          MOV.rm,r        [EBP(v)+04], ESI(r)
                > > > 	00000586 5E                              POP.r           ESI(r)
                > > > 	00000587 56                              PUSH.r          ESI(r)                                  messenger -> Say message
                > > > 	00000588 8B7500                          MOV.r,rm        ESI(r), [EBP(v)+00]
                > > > 	0000058B 52                              PUSH.r          EDX(p)
                > > > 	0000058C 8B5504                          MOV.r,rm        EDX(p), [EBP(v)+04]
                > > > 	0000058F E860FEFFFF                      CALL.rel        FFFFFE60 ; 000003F4
                > > > 	00000594 5A                              POP.r           EDX(p)
                > > > 	00000595 5E                              POP.r           ESI(r)
                > > > 	00000596 E840FFFFFF                      CALL.rel        FFFFFF40 ; 000004DB                     util::Pause
                > > > 	0000059B 81C408000000                    ADD.rm,i        ESP(s), 00000008                        return
                > > > 	000005A1 5D                              POP.r           EBP(v)
                > > > 	000005A2 C3                              RET.near        
                > > > 
                > > > 	                                                                                         End (helloWorld)
                > > > 

                > > >
                > > > magari si capiscono meglio le dinamiche fra i valori generati e dove vanno a finire. Il registro ESI fa da "ponte" attraverso cui passano gli indirizzi delle istanze (da una freccina all'altra).
                > >
                > > è il clone, bamba di un pisano
                >
                > Clone in che senso? Non duplica oggetti, ne trasporta solo l'indirizzo dell'istanza in memoria. E` un registro di transito che L.in.oleum chiama sempre "r" e che su x86 e` impersonato da ESI. Quando un metodo viene chiamato, l'indirizzo dell'istanza su cui opera lo trova in "r" (ESI). Quando una funzione ritorna un valore, il valore di ritorno e` depositato in "r" (cioe` ESI). Quando i metodi sono concatenati in una fluent interface, i metodi che non sono funzioni ritornano lo stesso valore che aveva "r" in ingresso, cioe` ritornano "this" o "self", per fare paralleli.

                è il clone dell'oloturio, stasera hai mangiato un yoda?

                The Lich™
                « Non è morto ciò che in eterno può attendere,
                e col passare di strani eoni, anche la morte può morire. »
                Cylon
                Immagine postata dall'utente
          • Avatar
            ☺
            Scritto da
            altg
            utente che non utiene
            il 2014-11-03 22:50:08.0 alle 2014-11-03 22:50:08.0
            Trollate totali: 11540
            Re: mah, be', certo, sembra un tantino macchinoso...
            provo a spiegare il disassemblato?
            vabbe', proviamo...
            	00000559 55                              PUSH.r          EBP(v)                                  enter (implied)
            	0000055A 81EC00000000                    SUB.rm,i        ESP(s), 00000000
            	00000560 89E5                            MOV.rm,r        EBP(v), ESP(s)
            


            Crea lo stack frame. La SUB sottrae ingannevolmente zero perche` il compilatore, in quel punto, non sa quanto sara` lungo lo stack frame e zero e` un placeholder. Viene corretto in seguito col valore giusto (8, due parole di 4 bytes corrispondenti a due locali).

            	00000562 56                              PUSH.r          ESI(r)                                  here messenger ~ textIo::Create -> Bind To console
            	00000563 E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003E3
            


            Salva ESI del chiamante (per agire in modo trasparente), poi chiama textIo::Create che e` all'indirizzo 3E3 (offset negativo FFFFFE7B da quel punto). Quella ritorna in ESI l'indirizzo della nuova istanza (che e` nell'heap).

            	00000568 52                              PUSH.r          EDX(p)
            	00000569 BA20000000                      MOV.r,i         EDX(p), 00000020
            


            Salva p (EDX) del ramo del chiamante, poi lo carica con l'indirizzo di "console", la tabella metodi virtuali che e` all'indirizzo 20h (4-flat, il che significa un indirizzo espresso in unita` di 4 bytes, che significa 80h in bytes).

            	0000056E E87BFEFFFF                      CALL.rel        FFFFFE7B ; 000003EE
            


            Chiama Bind To di textIo (3EE).

            	00000573 5A                              POP.r           EDX(p)
            
            


            recupera p del chiamante.

            	00000574 897500                          MOV.rm,r        [EBP(v)+00], ESI(r)
            


            salva in "messenger" (offset 0 sullo stack frame basato a EBP) il valore di ritorno di "Bind To", che poi e` lo stesso ritornato da textIo::Create perche` "Bind To" ritorna l'equivalente di "this".

            	00000577 5E                              POP.r           ESI(r)
            


            recupera r del chiamante.

            	00000578 56                              PUSH.r          ESI(r)                                  here message ~ {...} as string -> To Text
            	00000579 BE23000000                      MOV.r,i         ESI(r), 00000023
            


            Ri-salva r del chiamante, poi lo carica con l'indirizzo, tra i dati statici, della stringa hello world allocata a 23h (4-flat, in bytes e` l'offset 8Ch).

            	0000057E E8EFFCFFFF                      CALL.rel        FFFFFCEF ; 00000272
            	00000583 897504                          MOV.rm,r        [EBP(v)+04], ESI(r)
            	00000586 5E                              POP.r           ESI(r)
            


            Chiama "string::ToText", che converte la stringa a 23h in un oggetto text il cui indirizzo e` ritornato in "r". Deposita "r" (ESI) a EBP+4 (cioe` in "messenger"), e recupera r del chiamante.

            	00000587 56                              PUSH.r          ESI(r)                                  messenger -> Say message
            	00000588 8B7500                          MOV.r,rm        ESI(r), [EBP(v)+00]
            	0000058B 52                              PUSH.r          EDX(p)
            	0000058C 8B5504                          MOV.r,rm        EDX(p), [EBP(v)+04]
            	0000058F E860FEFFFF                      CALL.rel        FFFFFE60 ; 000003F4
            	00000594 5A                              POP.r           EDX(p)
            	00000595 5E                              POP.r           ESI(r)
            


            ri-salva r del chiamante, carica r con "messenger", salva p (EDX) del chiamante, carica p con "message", chiama textIo::Say (3F4), recupera p ed r.

            	00000596 E840FFFFFF                      CALL.rel        FFFFFF40 ; 000004DB                     util::Pause
            


            chiama util::Pause

            	0000059B 81C408000000                    ADD.rm,i        ESP(s), 00000008                        return
            	000005A1 5D                              POP.r           EBP(v)
            	000005A2 C3                              RET.near        
            


            distrugge lo stack frame e torna al suo chiamante, che e` il modulo di run-time, che a sua volta poi chiude il thread principale e termina l'applicazione.
<softv>

Pagina generata in 166 millisecondi

Utenti attivi: 13 nell'ultimo minuto, 26 negli ultimi cinque minuti, 64 negli ultimi 15 minuti