Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
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


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Dopo 23 anni di silenzio, Warcraft 3 spi...
Roblox sfida l'ecosistema gaming: app st...
OpenAI accusata di plagio dai migliori m...
Altro attacco hacker dell'IA: gli agenti...
Stiamo davvero perdendo il controllo del...
Microsoft perde un pilastro: Frank Shaw ...
Diablo V annunciato a sorpresa: il colpo...
Meno di 5 euro per il 5G: l'offerta Kena...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
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: 18:35.


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