| Autore |
Discussione  |
|
|
pinux
Utente Mamone
 

Regione: Puglia
|
Inserito il - 21/01/2005 : 21:53:29
|
chi mi da gentilmente una procedura che stampa a video dei valori esadecimali presenti in un vettore?
Spero che qualcuno sia così gentile.. vi ringrazio in anticipo
|

|
|
|
feeb
Cantù Che Conta Col Cayenne
  

Prov.: Zara
|
Inserito il - 22/01/2005 : 06:19:39
|
Bi_Asc proc near ; Subroutine che converte i due hexdigit XY di un byte push cx push dx ; in due caratteri ASCII mov bh,0 ; Input XY in BL - Out ASCII(X) in BH , ASCII (Y) in BL push bx and bx,0fh add bx,offset numeri mov dl,[bx] pop bx and bx,0f0h mov cl,4 shr bx,cl add bx,offset numeri mov dh,[bx] mov bx,dx pop dx pop cx ret
questa ti dovrebbe restituire due caratteri ascii corrispondenti al valore in esadecimale del numero che gli passi poi il resto e' semplice |
http://www.avaaz.org/it/ - http://www.flickr.com/photos/dimethyltryptamine/ |
 |
|
|
fabbattista
utente SEMPRE giovane
 

Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 22/01/2005 : 08:51:19
|
ppinux non ho capito bene la domanda.
Tu hai un vettore che continene dei valori in esadecimale o in base 10? E vuoi stamparli a video sempre in esadecimale o no?
|
 |
|
|
pinux
Utente Mamone
 

Regione: Puglia
|
Inserito il - 22/01/2005 : 17:16:06
|
Citazione: Messaggio inserito da fabbattista
ppinux non ho capito bene la domanda.
Tu hai un vettore che continene dei valori in esadecimale o in base 10? E vuoi stamparli a video sempre in esadecimale o no?
forse è meglio se spiego il problema nei dettagli.
1-ho un vettore di valori esadecimali 2-devo stampare a video gli elementi del vettore 3-devo effettuare la somma di tutti gli elementi del vettore 4-devo stampare a video la somma
premessa: ho effettuato il trasferimento presso informatica da circa un mese, quindi l'assembler l'ho studiato tutto da solo
il dubbio principale è questo: posso lavorare su dei valori esadecimali (es nel punto 3) oppure devo convertire tutti i valori in decimale => efettuare la somma => convertirla in esadecimale => stamparla
per quanto riguarda la stampa del vettore: devo effettuare delle conversioni? |

|
Modificato da - pinux in data |
 |
|
|
pinux
Utente Mamone
 

Regione: Puglia
|
Inserito il - 22/01/2005 : 17:17:44
|
Citazione: Messaggio inserito da feeb
Bi_Asc proc near ; Subroutine che converte i due hexdigit XY di un byte push cx push dx ; in due caratteri ASCII mov bh,0 ; Input XY in BL - Out ASCII(X) in BH , [cut] questa ti dovrebbe restituire due caratteri ascii corrispondenti al valore in esadecimale del numero che gli passi poi il resto e' semplice
senti ho creato un ciclo all'interno: carico vet[i] in BL chiamo bi_asc stampo bx
ma nn mi funziona... ho sbagliato qualcosa? |

|
Modificato da - pinux in data |
 |
|
|
fabbattista
utente SEMPRE giovane
 

Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 23/01/2005 : 21:03:23
|
Citazione: Messaggio inserito da pinux
forse è meglio se spiego il problema nei dettagli.
1-ho un vettore di valori esadecimali 2-devo stampare a video gli elementi del vettore 3-devo effettuare la somma di tutti gli elementi del vettore 4-devo stampare a video la somma
premessa: ho effettuato il trasferimento presso informatica da circa un mese, quindi l'assembler l'ho studiato tutto da solo
il dubbio principale è questo: posso lavorare su dei valori esadecimali (es nel punto 3) oppure devo convertire tutti i valori in decimale => efettuare la somma => convertirla in esadecimale => stamparla
per quanto riguarda la stampa del vettore: devo effettuare delle conversioni?
Allora vediamo un po'. Puoi tranquillamente lavorare con gli esadecimali e farci tutte le operazioni che vuoi.
Per quanto riguarda la stampa in esadecimale, il codice che ti ha dato feeb è solo un pezzo di un programma piu' grosso. Se hai riscritto il codice di feeb senza adattarlo al tuo è normale che non funzioni.
In ogni caso si, devi effettuare delle conversioni. Il byte che contiene il tuo valore lo devi convertire in due byte corrispondenti ai codici ascii delle cifre del numero esadecimale da stampare.
|
 |
|
|
pinux
Utente Mamone
 

Regione: Puglia
|
Inserito il - 23/01/2005 : 23:23:21
|
Citazione:
Allora vediamo un po'. Puoi tranquillamente lavorare con gli esadecimali e farci tutte le operazioni che vuoi.
scusate per la totale ignoranza... ma l'assemblatore come fa a capire che stiamo trattando dei valori esadecimali? Il vettore lo devo definire in questa maniera:
VET DB 09,0D,15,1A,1C
oppure
VET DB 09h,0Dh,15h,1Ah,1Ch
o in altra maniera?
|

|
 |
|
|
fabbattista
utente SEMPRE giovane
 

Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 24/01/2005 : 07:26:06
|
Pinux, la seconda che hai detto
|
 |
|
|
pinux
Utente Mamone
 

Regione: Puglia
|
Inserito il - 24/01/2005 : 10:20:09
|
Citazione: Messaggio inserito da fabbattista
Pinux, la seconda che hai detto
ok... qua ci siamo...
per stampare il vettore ho fatto una cosa del genere carico tutti i valori esadecimali (byte) di VET in VET2 (word)
VET DB 09h,0Dh,1Ah,1Bh,1Ch VET2 DW 5 DUP (?)
LEA SI, VET MOV CL, 5 MOV DI, 2 RIPETI: MOV BL, [SI] CALL BI_ASC MOV AH, BL INC SI MOV BL, [SI] CALL BI_ASC MOV AL, BL MOV VET2[DI], AX ADD DI, 2 LOOP RIPETI
è stato così gentile fino ad ora.. mi potrebbe dire anche in questo caso dove sbaglio? grazie!!
|

|
Modificato da - pinux in data |
 |
|
|
fabbattista
utente SEMPRE giovane
 

Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 24/01/2005 : 12:03:31
|
Dunque, non ho capito perke' sposti da vet (byte) a vet2 (word). Se mi fai leggere la tua procedura di stampa forse mi è piu' chiaro. In ogni caso:
1. Perche' DI lo fai partire dal valore 2? 2. Poiche' hai un numero dispari di elementi in vet, potresti avere qualche problema con l'ultimo 3. Se la procedura BI_ASC è quella di feeb, stai attento che lui fa riferimento a un vettore numeri. Tu lo hai definito? |
 |
|
|
pinux
Utente Mamone
 

Regione: Puglia
|
Inserito il - 25/01/2005 : 23:36:58
|
Citazione: Messaggio inserito da fabbattista
Dunque, non ho capito perke' sposti da vet (byte) a vet2 (word). Se mi fai leggere la tua procedura di stampa forse mi è piu' chiaro.
la procedura fatta in precedenza era sbagliata.. nn avevo capito bene cosa dovevo fare... voi avevate detto che il byte che conteneva il valore lo devevo convertire in due byte.. quindi ho fatto un po' di confuzione
In ogni modo questa è la nuova procedura e mi funziona!
MOV CL, TOT MOV SI, 0 OUTP: MOV BL, VET[SI] CALL BI_ASC MOV AL, BH CALL VISASCII ;INT 10H - AH,14 MOV AL, BL CALL VISASCII ;INT 10H - AH,14 INC SI LOOP OUTP
secondo voi è corretta sintatticamente o è solo funzionante? in poche parole.. sta fatta bene o potevo fare di meglio? 
cmq grazie per l'attenzione! siete uno dei pochi prof. in grado di darla! |

|
Modificato da - pinux in data |
 |
|
| |
Discussione  |
|