|
|
|
![]() |
|
Strumenti |
![]() |
#21 | |
Member
Iscritto dal: Sep 2011
Messaggi: 72
|
Quote:
Adesso ho un groooossssoo problema. Il programma deve fare,attraverso le procedure e le macro (tramite un menù),la potenza,il calcolo di un fattoriale,e l'mcd. Funziona tutto,ma sono troppe righe di codice (600 circa)...come posso fare a ridurlo? Così il professore ha detto non lo legge nemmeno esempio per la divisione con 3 cifre ho fatto così,devo arrivare a 9 sicchè mi si aggiungeranno minimo 100 righe di codice..non c'è un metodo più veloce? Codice HTML:
mov dx,0 mov cx,100 div cx add ax,30h mov ris_ascii,ax mov bx,dx ;salviamo il resto mov ax,bx mov dx,0 mov cx,10 div cx add ax,30h mov bx,dx mov ris_ascii+1,ax add bx,30h mov ris_ascii+2,bx lea dx, ris mov ah,09h int 21h call a_capo jmp inizio Ultima modifica di jyciap11 : 14-05-2013 alle 22:23. |
|
![]() |
![]() |
![]() |
#22 | |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Si rende conto che è Assembly questo, si? ![]() Devo dire che qua andiamo molto sul tecnico, e sapere come ottimizzare il programma credo che richieda un certo livello di conoscenza del linguaggio. Quello che ti posso suggerire è: ricontrolla il tuo codice e guarda se ci sono delle parti ripetute, in tal caso riservagli una macro/procedura e richiamale all'occorrenza. Io ho spesso usato quest'espediente quando scrivevo in assembly per stampare rapidamente il linefeed e il carriage return ( o anche gli spazi ). Per il resto, non so che dirti.. ![]()
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
![]() |
![]() |
![]() |
#23 | |
Member
Iscritto dal: Sep 2011
Messaggi: 72
|
Quote:
Vabè,tralasciando questo,vi faccio l'ultima domanda poi vi mollo. Ho usato variabili DW,quindi vanno bene per numeri fino a 65536. se faccio 9 alla 9 = 387 420 489 come faccio a spezzare il numero,metterlo in due variabili e riunirlo? |
|
![]() |
![]() |
![]() |
#24 | |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Questo tipo di variabili permette di salvarci dentro fino a, rispettivamente, 4,8 e 10 Byte. Nota che doubleword, quadword e tenbyte possono essere per salvare numeri e fino a 2 caratteri. Questo perchè gran parte delle istruzioni agiscono su un indirizzo di memoria di massimo 2 byte. Questo tipo di dati si definisce così: Codice:
variabile DD ? ;Una doubleword variabile DQ ? ;Una quadword variabile DT ? ;Una tenbyte Tuttavia, nel caso volessi intraprendere questa strada, devi rivedere tutto il meccanismo di somme e sottrazioni perchè con così tanti bit la gestione è più complessa. Ti riporto un esempio del mio libro per sommare due numeri rappresentati su 32 bit: Codice:
.MODEL small .DATA NUMA DD ? NUMB DD ? NUMC DD ? .CODE ... MOV AX, WORD PTR NUMA ADD AX, WORD PTR NUMB ;Somma tra loro le 2 word meno significative MOV WORD PTR NUMC, AX MOV AX, WORD PTR NUMA+2 ADC AX, WORD PTR NUMB+2 ;Somma tra loro le 2 word più significative + l'eventuale ;carry della somma precedente MOV WORD PTR NUMC+2, AX ![]()
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
Ultima modifica di kwb : 15-05-2013 alle 11:46. |
|
![]() |
![]() |
![]() |
#25 |
Member
Iscritto dal: Sep 2011
Messaggi: 72
|
chiarissimo,mi metto all'opera e vi faccio sapere
|
![]() |
![]() |
![]() |
#26 |
Member
Iscritto dal: Sep 2011
Messaggi: 72
|
Ragazzi mi sapete consigliare un'istruzione che chiuda il dos?
.exit non lo chiude ma esce dall'esecuzione del programma,a me serva che proprio chiuda il dos. |
![]() |
![]() |
![]() |
#27 |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Io dico che non esiste...
Se DOS è un sistema operativo, chiuderlo significa arrestare il sistema. Che senso avrebbe? Magari mi sbaglio eh, però boh, prova a guardare tra gli interrupt vari... Ricorda però che quello che vedi stampato nella finestrella dal tuo codice non è altro che un po' di caratteri in un'astrazione di sistema operativo (MS-Dos ) EDIT: Io terminavo sempre i programmi con .EXIT END Prova...
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
![]() |
![]() |
![]() |
#28 | |
Member
Iscritto dal: Sep 2011
Messaggi: 72
|
Quote:
p.s. giocando con le procedure e le macro sono riuscito a ridurre il programma (che ricordo calcola potenza,fattoriale e mcd) a sole 200 righe di codice ![]() ![]() p.p.s .exit non chiude la finestra ma termina il programma. |
|
![]() |
![]() |
![]() |
#29 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
quindi dev'essere il tuo programma a termine, non il dos
in questo caso basta richiamare la funzione 4C dell'interrupt 21 |
![]() |
![]() |
![]() |
#30 |
Member
Iscritto dal: Sep 2011
Messaggi: 72
|
Ragazzi come faccio a controllare se c'è un overflow?
Cioè se io ho un registro dw e il risultato supera la dimensione massima di quel registro,come faccio per stampare un errore? |
![]() |
![]() |
![]() |
#31 |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
L'8086 dispone di una componente, chiamata registro di stato o Processor Status Word ( PSW ) che non è altro che un registro di 16 bit contente 9 flag.
I bit del registro vengono alterati al termine di ogni istruzione. Tra questi c'è l'OF ( Overflow Flag ) che se viene impostato a 1 indica la presenza di un overflow. Puoi controllare quello...
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
![]() |
![]() |
![]() |
#32 |
Member
Iscritto dal: Sep 2011
Messaggi: 72
|
Ragazzi ho un grosso problema,in questo codice la macron no funziona,o meglio quando vado a compilare il programma mi dice:
"Pass dependent costruction encountered : CLEAR_SCHERMO" Codice:
controllo proc mov ah,1 int 21h cmp al,49 je calcolo_potenza ; se 1 vai alla potenza cmp al,50 je calcolo_fattoriale ; se 2 vai al fattoriale cmp al,51 je calcolo_MCD ; se 3 vai all'MCD clear_schermo endp clear_schermo MACRO MOV AH,00h MOV AL,03h INT 10h ENDM |
![]() |
![]() |
![]() |
#33 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Ma è un warning? E che assembler stai usando?
|
![]() |
![]() |
![]() |
#34 |
Member
Iscritto dal: Sep 2011
Messaggi: 72
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:46.