[soc] - asm no delphi
Pessoal...
Alguem sabe usar ´Asm´ no delphi?
Bom eu sei q eh so declarar
program;
begin
<codigo principal>
asm
<codigo asm>
end;//asme
end;//principal
mas a minha duvida eh a seguinte.... eu queria fazer tipo um calculo p serial...
entaum eu teria q pegar o username q o usuario escreveria num edit...
1 DUVIDA : como eu jogo uma var string no algoritmo em asm?
dae supondo q eu fiz os calculos em asm do serial... eu preciso devolver o serial em outro edit...
2 DUVIDA : como eu pego o resultado do asm?
-------------
Pelo q eu sei... o asm so deve aceitar char, ou talvez tbm Pchar, certo?
Pq ele usa registradores e talz...
Alguem sabe usar ´Asm´ no delphi?
Bom eu sei q eh so declarar
program;
begin
<codigo principal>
asm
<codigo asm>
end;//asme
end;//principal
mas a minha duvida eh a seguinte.... eu queria fazer tipo um calculo p serial...
entaum eu teria q pegar o username q o usuario escreveria num edit...
1 DUVIDA : como eu jogo uma var string no algoritmo em asm?
dae supondo q eu fiz os calculos em asm do serial... eu preciso devolver o serial em outro edit...
2 DUVIDA : como eu pego o resultado do asm?
-------------
Pelo q eu sei... o asm so deve aceitar char, ou talvez tbm Pchar, certo?
Pq ele usa registradores e talz...
Osocram
Curtidas 0
Respostas
Maicongabriel
26/01/2004
1 DUVIDA : como eu jogo uma var string no algoritmo em asm?
Não joga, passa Char/PChardae supondo q eu fiz os calculos em asm do serial... eu preciso devolver o serial em outro edit...
2 DUVIDA : como eu pego o resultado do asm?
Não pega, você MOVEPelo q eu sei... o asm so deve aceitar char, ou talvez tbm Pchar, certo?
Pq ele usa registradores e talz...
E talz, poiz eh, se você não domina Asm, pq pretende utiliza-lo ? Digo isso, pq no fim é tudo a mesma ´coisa´, ou a sua função de montar um serial é muiiiiiiiiiiito pesada? Se fosse isso, ai sim, tudo bem...GOSTEI 0
Osocram
26/01/2004
Ok... eh o seguinte...
Eu to querendo aprender um pouco d asm... esse q eu quero fazer eh leve... poderia fazer mto bem em delphi mesmo... Mas to querendo aprender um pouco d ASM... serah q vc poderia dar um ex d como q eu faco p resolver as minhas duvidas q eu passei acima?
Obrigado.
(eu jah andei estudando um pouco os codigos em assembler... tipo o basico mesmo..)
Eu to querendo aprender um pouco d asm... esse q eu quero fazer eh leve... poderia fazer mto bem em delphi mesmo... Mas to querendo aprender um pouco d ASM... serah q vc poderia dar um ex d como q eu faco p resolver as minhas duvidas q eu passei acima?
Obrigado.
(eu jah andei estudando um pouco os codigos em assembler... tipo o basico mesmo..)
GOSTEI 0
Cebikyn
26/01/2004
Para passar os valores, vc pode fazer uma função ou procedure totalmente em assembler e os parâmetros são desta forma:
Ou se preferir, vc pode colocar o asm... end dentro do begin..end (como mostrado na sua primeira msg) e fazer um MOV entre um registrador e uma variável comun (como se estivesse fazendo entre dois registradores) vc pode fazer desta forma para entrada ou saida de dados na função, tipo um MOV entre um registrador e o result por exemplo.
function FastCharMove(parametro1; parametro2; parametro3); asm // O Delphi põe os parâmetros automaticamente assim: // ECX = parametro1 // EAX = parametro2 // EDX = parametro3 // Qnd tem mais de 3 parâmetros, eles são passados na stack // O resultado da função tem um registrador específico, mas eu esqueci end;
Ou se preferir, vc pode colocar o asm... end dentro do begin..end (como mostrado na sua primeira msg) e fazer um MOV entre um registrador e uma variável comun (como se estivesse fazendo entre dois registradores) vc pode fazer desta forma para entrada ou saida de dados na função, tipo um MOV entre um registrador e o result por exemplo.
GOSTEI 0
Osocram
26/01/2004
Hummmm
Eh acho q entendi sim.... acho q hj a noite vou testar isso... dae se eu tiver duvidas... vc vai ficar sabendo
hehehehehe
Mas por enqto valeu...
Eh mto dificil encontrar ajuda nesse assunto....
Ah.. vc sabe tem alguns tutoriais ou paginas q explicam sobre isso?
Poderia me passar?
Valeu.. vou testar isso q vc me passou.
Eh acho q entendi sim.... acho q hj a noite vou testar isso... dae se eu tiver duvidas... vc vai ficar sabendo
hehehehehe
Mas por enqto valeu...
Eh mto dificil encontrar ajuda nesse assunto....
Ah.. vc sabe tem alguns tutoriais ou paginas q explicam sobre isso?
Poderia me passar?
Valeu.. vou testar isso q vc me passou.
GOSTEI 0
Cebikyn
26/01/2004
Sites e páginas sobre ASM no Delphi:
[b:c542d63f4a]Inline Assembler in Delphi (I) - Introduction[/b:c542d63f4a]
http://www.delphi3000.com/articles/article_3766.asp
(no mesmo lugar vc encontra as outras partes, falando sobre AnsiStrings, Arrays, Objetos, etc...)
[b:c542d63f4a]Programação Assembly[/b:c542d63f4a] - em português
http://www.geocities.com/SiliconValley/Park/3174/prog/asm/asm.htm
[b:c542d63f4a]Inline Assembler in Delphi (I) - Introduction[/b:c542d63f4a]
http://www.delphi3000.com/articles/article_3766.asp
(no mesmo lugar vc encontra as outras partes, falando sobre AnsiStrings, Arrays, Objetos, etc...)
[b:c542d63f4a]Programação Assembly[/b:c542d63f4a] - em português
http://www.geocities.com/SiliconValley/Park/3174/prog/asm/asm.htm
GOSTEI 0
Maicongabriel
26/01/2004
Tem também a função que o [b:c2a306bf7b]cebikyn[/b:c2a306bf7b] esqueceu de te passar completa...
//My move is not as fast as MOVE when source and destination are both //DWord aligned, but certainly faster when they are not. //As we are moving characters in a string, it is not very likely at all that //both source and destination are DWord aligned, so moving bytes avoids the //cycle penality of reading/writing DWords across physical boundaries procedure FastCharMove(const Source; var Dest; Count : Integer); asm //Note: When this function is called, delphi passes the parameters as follows //ECX = Count //EAX = Const Source //EDX = Var Dest //If no bytes to copy, just quit altogether, no point pushing registers cmp ECX,0 Je @JustQuit //Preserve the critical delphi registers push ESI push EDI //move Source into ESI (generally the SOURCE register) //move Dest into EDI (generally the DEST register for string commands) //This may not actually be neccessary, as I am not using MOVsb etc //I may be able just to use EAX and EDX, there may be a penalty for //not using ESI, EDI but I doubt it, this is another thing worth trying ! mov ESI, EAX mov EDI, EDX //The following loop is the same as repNZ MovSB, but oddly quicker ! @Loop: //Get the source byte Mov AL, [ESI] //Point to next byte Inc ESI //Put it into the Dest mov [EDI], AL //Point dest to next position Inc EDI //Dec ECX to note how many we have left to copy Dec ECX //If ECX <> 0 then loop Jnz @Loop //Another optimization note. //Many people like to do this //Mov AL, [ESI] //Mov [EDI], Al //Inc ESI //Inc ESI //There is a hidden problem here, I wont go into too much detail, but //the pentium can continue processing instructions while it is still //working out the result of INC ESI or INC EDI //(almost like a multithreaded CPU) //if, however, you go to use them while they are still being calculated //the processor will stop until they are calculated (a penalty) //Therefore I alter ESI and EDI as far in advance as possible of using them //Pop the critical Delphi registers that we have altered pop EDI pop ESI @JustQuit: end;
GOSTEI 0
Osocram
26/01/2004
:D
Valeuuuuuuuuuuuuu, vcs ajudaram bastante...
acho q c essas dicas eu jah posso aprender bem o basico d asm no delphi...
Valeuuuuuuuuuuuuu, vcs ajudaram bastante...
acho q c essas dicas eu jah posso aprender bem o basico d asm no delphi...
GOSTEI 0