Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
HONOR Magic V6 è arrivato in Italia a 2.299,90 euro con una promessa precisa: unire 4 mm di spessore da aperto (8,75 mm chiuso nel modello White, 9 mm negli altri colori) a una batteria da 6.660 mAh, la più capiente mai vista su un pieghevole. Lo abbiamo usato per oltre una settimana in versione Red 16/512 GB per capire se lo Snapdragon 8 Elite Gen 5 tiene testa alla concorrenza anche fuori dai benchmark ufficiali
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-12-2012, 20:05   #1
andros94
Member
 
Iscritto dal: Feb 2010
Messaggi: 57
[ASM] modificare variabile

mi sto addentrando nel assembly e vorrei modificare questo codice
Codice:
.386 
.model flat,stdcall 
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\user32.inc 
includelib \masm32\lib\user32.lib 

.data 
MsgBoxCaption	db "Esempio finestra",0 
MsgBoxText	db "Ciao mondo!",0 

.code 
start:
	invoke MessageBox,
			NULL,
		        addr MsgBoxText,
			addr MsgBoxCaption,
			MB_ICONERROR OR MB_ABORTRETRYIGNORE
        
	.IF eax==IDABORT
		;interrompi
		
	.ELSEIF eax==IDRETRY
		; riprova

	.ELSEIF eax==IDCANCEL
		;ignora
	.ENDIF

	invoke ExitProcess,NULL
end start
in modo che in ogni blocco IF/ELSEIF debba solo invocare MessageBox pero oppurtunamente modificando il testo dentro la variabile MsgBoxText
(per esempio mi dica ciò che ho commentato nel blocco) ma non so proprio come fare...

Ultima modifica di andros94 : 16-12-2012 alle 20:10.
andros94 è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2012, 23:24   #2
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Premetto che non ho capito esattamente cosa tu voglia fare ma ti propongo del codice per vedere se ci capiamo

Codice:
.386 
.model flat,stdcall 
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\user32.inc 
includelib \masm32\lib\user32.lib 

.data 
MsgBoxCaption	db "Esempio finestra",0 
MsgBoxText	db "Ciao mondo!",0 
MsgBoxText1	db "abort",0 
MsgBoxText2	db "retry",0 
MsgBoxText3	db "cancel",0 

.code 
start:
	invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_ICONERROR OR MB_ABORTRETRYIGNORE
        
	cmp eax,IDABORT
      jnz nxt1
	invoke MessageBox, NULL, addr MsgBoxText1, addr MsgBoxCaption, MB_OK
      jmp fine
      		
nxt1:
	cmp eax,IDRETRY
      jnz nxt2
	invoke MessageBox, NULL, addr MsgBoxText2, addr MsgBoxCaption, MB_OK
      jmp fine
      
nxt2:
	cmp eax,IDIGNORE
      jnz fine
	invoke MessageBox, NULL, addr MsgBoxText3, addr MsgBoxCaption, MB_OK

fine:
	invoke ExitProcess,NULL
end start
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2012, 06:20   #3
andros94
Member
 
Iscritto dal: Feb 2010
Messaggi: 57
Intendevo dere che ci dovrebbe essere una sola variabile per il testo e che vorrei
modificare il suo contenuto nei blocchi IF/ELSE
andros94 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2012, 08:33   #4
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Se ti esprimi in maniera così criptica non avrai molte risposte.
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2012, 11:14   #5
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da lorenzo001 Guarda i messaggi
Se ti esprimi in maniera così criptica non avrai molte risposte.
Credo che lui intenda dire che non vuole definire nessuna stringa MsgBoxText, ma inserire la stringa da visualizzare direttamente "inline" all'interno dei blocchi if.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2012, 12:58   #6
andros94
Member
 
Iscritto dal: Feb 2010
Messaggi: 57
Quote:
Originariamente inviato da VegetaSSJ5 Guarda i messaggi
Credo che lui intenda dire che non vuole definire nessuna stringa MsgBoxText, ma inserire la stringa da visualizzare direttamente "inline" all'interno dei blocchi if.
la stinga la definisco e la assegno in .DATA ma poi voglio poter cambiare il suo valore nel corso del programma

Codice:
.386 
.model flat,stdcall 
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\user32.inc 
includelib \masm32\lib\user32.lib 

.data 
MsgBoxCaption	db "Esempio finestra",0   
MsgBoxText	db "Ciao mondo!",0       ;questo rimane così

.code 
start:
	invoke MessageBox,
			NULL,
		        addr MsgBoxText,
			addr MsgBoxCaption,
			MB_ICONERROR OR MB_ABORTRETRYIGNORE
        
	.IF eax==IDABORT
		;qui vorrei modificare il valore di MsgBoxText	
                ; per esempio come si fa ne C MsgBoxText="hai selezionato interrompi "
                ; e poi richiamare di nuovo 
                ;invoke MessageBox,
		;NULL,
		;addr MsgBoxText,
		;addr MsgBoxCaption,
		;MB_ICONERROR OR MB_ABORTRETRYIGNORE
		
	.ELSEIF eax==IDRETRY
		; riprova

	.ELSEIF eax==IDCANCEL
		;ignora
	.ENDIF

	invoke ExitProcess,NULL
end start
in pratica vorrei usare una sola variabile per il testo e quindi riassegnare il valore durante il corso del programma

Ultima modifica di andros94 : 17-12-2012 alle 13:36.
andros94 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2012, 18:12   #7
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Prima considerazione : da dove arriva il nuovo valore della stringa? da tastiera ? Oppure? Se è una costante, allora l'esempio che ti ho mostrato prima è quello che cerchi.

Seconda considerazione : lo spazio allocato per MsgBoxText è ben definito. Se devi sostituire il suo contenuto con un'altra stringa (supponendo che arrivi da tastiera) allora devi prevedere un buffer di dimensioni adeguate.
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2012, 20:37   #8
andros94
Member
 
Iscritto dal: Feb 2010
Messaggi: 57
scusate ma sto appena imparando l' asm

io ho la variabile MsgBoxTex che è uguale a "Ciao mondo!" giusto,
nella struttura If vorrei assegnare un altro valore a MsgBoxText che è uguale a ciò che ho scelto (per esempio la stringa "hai premuto annulla").

la suddetta stringa non viene da tastiera ma è scritto nel codice.

dopo la prima msgbox (quella di scelta)dovrebbe apparinre un' altra che dice cosa ho premuto

**********************************************************

ciò che voglio sapere è se nell 'asm si può cambiare il valore della variabile in seguito alla dichiarazione

tipo :
MsgBoxText="abort" o qualcosa del genere

oppure devo per forza dichiarare 4 variabili
andros94 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2012, 00:25   #9
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Devi comprendere che nel tuo caso si può parlare di costanti stringa dato che la frase è nel codice.

In realtà MsgBoxText non è proprio una variabile (come in un linguaggio di alto livello) ma il puntatore ad un buffer di memoria, con dimensioni ben definite e non modificabili.

Quindi, non potrai inserire in quell'area una stringa di dimensioni maggiori e non ha senso utilizzarla per un'altra stringa che comunque dovrai memorizzare nel testo.

A questo punto usa diverse stringhe (dai un'occhiata al codice che ti ho postato).

Se poi dovrai usare un buffer per l'input da tastiera (o da file) allora avrà senso dimensionare un buffer adeguatamente e fornirne l'indirizzo e la massima dimensione alle funzioni di input.
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2012, 06:47   #10
andros94
Member
 
Iscritto dal: Feb 2010
Messaggi: 57
non potrei inserire una stringa minore delle dimensioni massime o comunque scrivere su quel buffer?
topo MOV msgboxtest,"abc"

Ultima modifica di andros94 : 18-12-2012 alle 06:50.
andros94 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2012, 09:34   #11
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
In assembly non hai a disposizione tutto quello che ti appare normale in un linguaggio di alto livello, proprio perché lavori direttamente con memoria e registri della CPU.

Su quel buffer ci puoi scrivere ma la stringa sorgente (quella che tu indichi con "abc") deve stare da qualche parte prima di essere copiata e quindi la devi inserire in un buffer. Ovvero avrai

MsgBoxText db "Ciao mondo!",0
AltraStringa db "abc",0

e potrai trasferire con le apposite istruzioni (per esempio una rep movsb) i caratteri di AltraStringa in MsgBoxText. Ma come ti dicevo prima, se hai già in memoria il buffer contenente AltraStringa perché non utilizzarla direttamente invece di copiarla?
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2012, 12:23   #12
andros94
Member
 
Iscritto dal: Feb 2010
Messaggi: 57
Quote:
Originariamente inviato da lorenzo001 Guarda i messaggi
Ma come ti dicevo prima, se hai già in memoria il buffer contenente AltraStringa perché non utilizzarla direttamente invece di copiarla?
volevo sapere se era possibile fare come dicevo io,per capire le dinamiche del linguaggio

grazie 1000
andros94 è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2012, 17:09   #13
pinosx
Senior Member
 
Iscritto dal: Jun 2011
Città: Cassino
Messaggi: 326
state proprio avanti... io proprio adesso sto facendo asm MIPS... ma qui vedo già cose i386...
pinosx è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Vexilar W15, il robot aspirapolvere con ...
Lombardia, i cittadini si ribellano ai d...
Einstein aveva ragione anche in chimica:...
Wi‑Fi lento e zone morte in casa? ...
L'IA continua a riempire le casse di TSM...
Clamoroso Ubisoft: il vecchio Assassin's...
Non serve aprire il cranio per le interf...
Sedie da ufficio in offerta: un modello ...
Christopher Nolan dice la sua sull'IA al...
Compra un Apple-1 nel 1976 e lo dimentic...
DOOM sul Casio Loopy, la console giappon...
Il chip che non ha bisogno della litogra...
Xbox a un bivio: per l'ex capo di PlaySt...
Meta AI non userà più le f...
Stop ai giochi fisici su PlayStation: pe...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:38.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v