Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 11-04-2005, 17.39.50   #1
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
[ASSEMBLER] Salvare n valori in memoria

Sto cercando di scrivere un programmino in assembler, ma siccome è un linguaggio che conosco pochissimo anche per fare delle sciocchezze ci metto un botto di tempo.

Come esercizio stavo tentando di inserire 5 valori da input per poi salvarli in memoria, volevo sapere se il procedimento che avevo eseguito era corretto.

Codice:
0100 MOV CX,0005 // Contatore
0101 MOV SI,[1000] // Su questo registro salvo il valore immesso
// Qua parte l'int 16 x l'input da tastiera
0102 MOV AH,00
0103 INT 16
0104 MOV SI,AL
0105 JNZ 0100 seuito da DEC CX (non sapevo dove meterlo)
0106 INT 20
Ha un minimo senso logico sta cosa che ho scritto??

Tnx!
Downloader non è collegato   Rispondi citando
Vecchio 11-04-2005, 22.30.55   #2
Sergio Neddi
Gold Member
Top Poster
 
L'avatar di Sergio Neddi
 
Registrato: 07-04-2000
Loc.: Padova-Vicenza
Messaggi: 4.814
Sergio Neddi promette bene
Azz... sono anni e anni che non programmo più in assembly... comunque la documentazione sull'uso degli interrupt ce l'ho da qualche parte, prima o poi salta fuori.
Vale comunque la regola di salvare i registri che servono in quanto non è detto che la chiamata all'interrupt li conservi, in questo caso prima di INT 16 avrei fatto PUSH CX e dopo avrei messo un POP CX.
Non ricordo bene ma mi pare che ci sia un'instruzione che decrementa CX e salta se non zero, comunque io prima di JNZ avrei messo un DEC CX.
Non ho capito questo MOV SI,[1000], inizializzi SI con il contenuto della locazione 1000 (che avrai inizializzato prima?) o forse volevi salvare nella locazione 1000? in tal caso conveniva mettere un MOV [1000], SI subito dopo MOV SI,AL.

Anzi, AL è un registro 8 bit, mentre SI è un registro 16 bit, quindi dovresti fare:

MOV AH, 0
MOV SI,AX

In questo modo passi nel byte più significativo di SI valore 0 e nel byte meno significativo AL.

Tutto questo sperando di ricordarmi ancora qualcosa di assembly e di non sparare cavolate, sono letteralmente decenni che non ci lavoro più.

Dimenticavo: devi saltare a 103 e non a 100 quindi JNZ 103 e non JNZ 100, altrimenti il loop non finisce più in quanto cx verrà sempre ad ogni giro portato a 5 e quindi non potrà raggiungere lo 0.

Ah, è ovvio comunque che i valori letti dalla tastiera si sovrapporranno sempre nella locazione 1000.
___________________________________

Con il PC risolvo molti problemi che prima non avevo. - Coltiva Linux che Windows si pianta da solo!

Ultima modifica di Sergio Neddi : 11-04-2005 alle ore 22.39.46
Sergio Neddi non è collegato   Rispondi citando
Vecchio 11-04-2005, 22.48.51   #3
Sergio Neddi
Gold Member
Top Poster
 
L'avatar di Sergio Neddi
 
Registrato: 07-04-2000
Loc.: Padova-Vicenza
Messaggi: 4.814
Sergio Neddi promette bene
Ho provato ad assemblare questo, non ho messo le istruzioni di push e pop attorno alla chiamata all'interrupt 16 e funziona (dopo 5 premute di tasto esce), quindi ciò significa che il registro CX viene preservato dalla chiamata dell'interrupt.
Potrebbe essere anche che AH rimanga invariato dopo la chiamata all'interrupt, io, per sicurezza, come dicevo nel post sopra, l'ho inizializzato nuovamente. Meglio ridondare un'istruzione in più che poi impazzire a risolvere un problema.
Per il resto non ho modo di vedere se viene inserito in memoria il valore relativo ai tasti premuti, si potrebbe inserire una chiamata che fa un'eco a video.
Oppure si potrebbe seguire il flusso passo passo con un debugger.

Codice:
0100 B90500        MOV     CX,0005
0103 B400          MOV     AH,00
0105 CD16          INT     16
0107 B400          MOV     AH,00
0109 89C6          MOV     SI,AX
010B 89360010      MOV     [1000],SI
010F 49            DEC     CX
0110 75F1          JNZ     0103
0112 CD20          INT     20
*** EDIT ***

Avevo dimenticato MOV [1000],SI
___________________________________

Con il PC risolvo molti problemi che prima non avevo. - Coltiva Linux che Windows si pianta da solo!

Ultima modifica di Sergio Neddi : 11-04-2005 alle ore 22.55.31
Sergio Neddi non è collegato   Rispondi citando
Vecchio 11-04-2005, 23.04.17   #4
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Domani me lo studicchio un po', pero che iella, mercoledi ho un compito su ste cose e sto a terra...

Tnx!
Downloader non è collegato   Rispondi citando
Vecchio 19-04-2005, 18.55.06   #5
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Il compito è andato benissimo, 8-!!

Meno male avevo una strizza!
Downloader non è collegato   Rispondi citando
Vecchio 20-04-2005, 00.35.24   #6
Sergio Neddi
Gold Member
Top Poster
 
L'avatar di Sergio Neddi
 
Registrato: 07-04-2000
Loc.: Padova-Vicenza
Messaggi: 4.814
Sergio Neddi promette bene
Ottimo! (perché è 8, se era nove sarebbe stato novimo!)
___________________________________

Con il PC risolvo molti problemi che prima non avevo. - Coltiva Linux che Windows si pianta da solo!
Sergio Neddi non è collegato   Rispondi citando
Vecchio 05-05-2005, 12.23.16   #7
Fast-M
Senior Member
 
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
Fast-M promette bene
Salve, comunque il decremento di CX è automatico se viene usata l'istruzione loop seguita dall'etichetta a cui deve essere effettuato il salto ad ogni iterazione:
--------------
MOV CX,[0005]
ETICHETTA:
.
.
LOOP ETICHETTA
--------------
Anche se non ricordo bene come viene gestito l'int 16, ma non credo dovrebbero esserci problemi.
Fast-M non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
compatibilita' ram Joele1965 Hardware e Overclock 3 25-12-2008 19.00.17
[C] Allocatore di memoria braian Programmazione 2 17-06-2008 15.21.47
memoria video condivisa o dedicata? alconf Hardware e Overclock 2 02-03-2006 19.35.59
Nokia PC Suite: "la memoria non poteva essere written" tronco Software applicativo 4 10-01-2006 16.06.55
Problema Pinnacle PCTV Pro e periferiche IDE exion Hardware e Overclock 56 30-01-2005 11.44.47

Orario GMT +2. Ora sono le: 21.39.15.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.