Ver Mensaje Individual
  #4  
Antiguo 18-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Reputación: 10
marcoszorrilla Va por buen camino
Añado un ejemplo que no encontraba:
Código Delphi [-]
 unit Hex2Dec;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   StdCtrls;
  function Base10(Base2:Integer) : Integer; assembler;
 type
   TForm1 = class(TForm)
     Button1: TButton;
     procedure Button1Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 
 var
   Form1: TForm1;
 
 implementation
 
 {$R *.DFM}
 
 function Base10(Base2:Integer) : Integer; assembler;
 asm
   cmp    eax,100000000            // check upper limit
   jb     @1                       // ok
   mov    eax,-1                   // error flag
   jmp    @exit                    // exit with -1
 @1:
   push   ebx                      // save registers
   push   esi
   xor    esi,esi                  // result = 0
   mov    ebx,10                   // diveder base 10
   mov    ecx,8                    // 8 nibbles (10^8-1)
 @2:
   mov    edx,0                    // clear remainder
   div    ebx                      // eax DIV 10, edx mod 10
   add    esi,edx                  // result = result + remainder[i]
   ror    esi,4                    // shift nibble
   loop    @2                       // loop for all 8 nibbles
   mov    eax,esi                  // function result
   pop    esi                      // restore registers
   pop    ebx
 @exit:
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 showmessage(InTtostr(base10(41)));
 end;
 
 end.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita