|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 1501
|
[assembler8086] potenza tramite stack
Raga cerco esperto di assembler...ho bisogno di una mano per questo problema....
creare una sub che fa la potenza...che riceve come parametri la base e l'esponente ( dallo stack )e dà la risposta al programma principale mediante i registri in pratica devo passare base ed esponente tramite lo Stack...ed è questo il punto che non so fare...x poi dare il risultato tramite registri... |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
Direttamente in assembly:
Codice:
push ecx push BASE push ESPONENTE call potenza add esp, 8 pop ecx potenza: mov ecx, [esp+8] mov eax, [esp+0xC] eleva: imul eax, eax dec ecx jnz eleva ret Ovviamente lo puoi aggiustare come vuoi. Se invece ti serve il calcolo con valori reali divertiti, perché dovrai usare un po' di fld e fmul Nota: nel codice che chiama in questo caso BASE e ESPONENTE sono da rimpiazzare con apposite costanti. Inoltre la sintassi usata è quella intel (quindi mov dst, src / imul dst, src / ... e non AT&T) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 1501
|
ehm scusa forse ho sbagliato ad esprimermi in pratica devo usare lo stack senza push e pop..
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
Poco male...
Codice:
mov [esp-4], ecx mov [esp-0xC], BASE mov [esp-8], ESPONENTE sub esp, 0xC call potenza add esp, 8 mov ecx, [esp] sub esp, 4 potenza: mov ecx, [esp+8] mov eax, [esp+0xC] eleva: imul eax, eax dec ecx jnz eleva ret Codice:
mov [esp-4], operand sub esp, 4 |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 1501
|
Quote:
-esp -ecx ed il mov che comprende ad esempio 0xC come posso sostituire con qualcosa di piu semplice? grazie ancora |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
Non mi risulta che tu possa, perché se devi passare dati sullo stack devi scriverceli ed adeguare lo stack pointer. Se per la prima operazione sono possibili numerose soluzioni, lo stack pointer è modificato - per quanto ne so - solo da istruzioni call, ret, push, pop e operazioni aritmetiche effettuate direttamente su (E)SP. Quanto al mov, se avete studiato mov non importa se non avete studiato quella forma, dovrebbero lasciartelo usare. Alla fine, ad esempio
mov ebx, [esp+4] non ha niente di diverso se non l'agilità e il consumo di risorse dal fare: Codice:
mov edx, esp add esp, 4 mov ebx, [edx] |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 1501
|
Quote:
in maniera traviale ?cosa intendi..forse è quello che fa al caso mio.. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
!k-0t1c!: la prossima volta dai indicazioni, ma non risolvere completamente l'esercizio
umberto1211: probabilmente tu hai fatto l'assembly a 16 bit per 8086 e non quello a 32 bit della soluzione proposta. |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
Ok cionci, scusa, temo di esser stato preso da un eccesso di zelo, ma mi asterrò dal fornire ulteriori indicazioni in questo post onde lasciar qualcosa allo spirito d'iniziativa di umberto1211
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:34. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:50.




















