Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-12-2012, 21: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 21:10.
andros94 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2012, 00: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, 07: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, 09: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, 12: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, 13: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 14:36.
andros94 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2012, 19: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, 21: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, 01: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, 07: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 07:50.
andros94 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2012, 10: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, 13: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, 18: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


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Bentornati nel 2007: le memorie DDR3 rin...
Stellantis aderisce ad AI4I e Fondazione...
Google Pixel 10a: prime conferme sul pre...
ISRO potrebbe lanciare la capsula Gagany...
Un nuovo leak conferma dimensioni e novi...
Steam Machine: requisiti Verified piu' s...
NVIDIA GeForce RTX 5070 Ti fuori produzi...
Sony ha annunciato i nuovi giochi che en...
IBM Sovereign Core: la sovranità ...
Cerchi un'asciugatrice conveniente su Am...
Ayaneo Pocket Play arriverà in ri...
iPad Pro 11'' con chip M4 scende a 949€ ...
The Sims entra in una nuova era, ma l'ac...
Netflix, Disney o Prime Video: qual &egr...
Perplexity blocca la generazione di imma...
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: 04:56.


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