PDA

View Full Version : asm e programmazione


elbompr
08-11-2002, 11:25
la domanda riguarda è rivolta a chi conosce l'assembler ma non solo :

dunque i valori che leggo in memoria verrano caricati all'interno dei registri,per essere elaborati e fornire un risultato, o fanno parte del codice operativo(bytes) andando ad agire sui registri,memoria e quant'altro gli permetta di ottenere un risultato ????

ciò che non mi e' chiaro e' la funzionalità dei codici contenuti in memoria(da quello che ho letto i codici sono contenuti da 0100H)

cionci
08-11-2002, 13:36
Pensa soltanto che in memoria sono contenuti contemporaneamente dati e codice...

Se tu potessi andare a leggere interamente il conenuto della memoria non ti accorgeresti quali locazioni contengono codice o quali dati...

Tutto sta nell'entry point...ovvero nel modo di inizilizzare EIP...

Quando il PC si accende IP va a puntare va a 0000 e CS va a FFFF ovvero il segmento del primo megabyte corrispondente all'entry point del BIOS...parlo di CS:IP perchè si parte a 16 bit...

Il BIOS finite le sue operazioni carica il settore di boot in memoria ed esegue il suo contenuto cioè viene caricato il sistema operativo...

Se non ci sono errori quello che verrà sempre eseguito sarà codice e mai dati...

Se ad un certo punto si eseguono per sbaglio dati può succedere l'imprevedibile o anche che il formato dei dati non corrisponda ad una istruzione esistente (hai presente quando Windows dice "il programma ha tentato di eseguire una istruzione non valida" ?)...

elbompr
11-11-2002, 22:27
continuando a leggere fra appunti online e dispense ho trovato il termine ORTOGONALE nella frase il set di istruzioni non può essere considerato ortogonale che significa?? comunque cionci sei stato rapido nella prima risposta e per questo ti ringrazio

elbompr

cionci
11-11-2002, 22:51
Mai sentito questo termine...

elbompr
12-11-2002, 23:49
è legato alla possibilità per le istruzioni di utilizzare qualunque registro come operando . ho provato ad utilizzare il debug per cercare di capire alcune operazioni svolte dall'assembler ora sono passato a leggere qualcosina sul nasm. hai qualche sito da consigliarmi in merito ??? SE HAI ICQ PARLIAMONE LI .

p.s. di siti di asm ho trovato http://www.giobe2000.it ma è assai discorsivo e cercavo qualcosa di + pratico .


grazie per l'aiuto e buon proseguimento di giornata

icq 172908772

cionci
13-11-2002, 08:13
Sì...è vero...non tutti i registri non possono essere usati con tutte le istruzioni...

Purtroppo di assembler x86 oltre alle basi so ben poco...
Comunque non credo che sia il caso di programmare in assembler di questi tempi ;)

elbompr
19-11-2002, 18:14
thanks x l'aiuto . comunque cio' che dici tu Tutti i registri non posson essere utilizzati per tutte le istruzioni e' vero.

volevo chiedertì il registro ip nel debug parte da 0100 ma una volta che punta 0102 come riesco a farlo puntare di nuovo a 0100h ?? sto leggendo una guida su degli appunti e stanno effettuando la somma ADD AX,BX tramite l'ausilio dei
3756:0100--> 01h
3756:0101--> D8h (che entrambi compongono i 2 byte dell'istruzione ADD)

alla prima somma tutt'ok ma poi alla seconda somma fra ax e bx non capisco come riescano a riimpostare a 0100 l'IP register.

elbompr

cionci
19-11-2002, 19:43
Per reimpostare l'indirizzo 0100h devi usare la codifica di una Jump Near...

JMP -2

elbompr
19-11-2002, 20:53
se hai icq o una chat dove potermi spiegare questo concetto vorrei chiedertelo . Jump Near su 2 piedi non mi dice nulla comunque sui miei appunti da per scontato che si sappia riportare il valore dell'IP a 0100H ma io non so buon;:(

icq 172908772

cionci
20-11-2002, 09:06
Guarda...io non so tradurlo in linguaggio macchina...

I salti si suddividono in salti vicini (near) e lontani (far)... I salti vicini sono quelli all'interno del segmento dati corrente...i salti lontani sono quelli in un altro segmento...

Poi i salti si dividono in condizionati (salto se alcuni bit del flag sono settati o non settati, JZ, JNZ, JO, JA, JB, JNA, JNB ed altri) o incondizionati (JMP)...

I salti vicini prendono come input il displacement rispetti al contenuto corrente di IP...mentre i salti lontani prendono come paramentro una coppia di segmento:offset...

Quindi tu non devi fare altro che trovare come si traduce JMP -2 in linguaggio macchina...

Purtroppo non ti so aiutare di più...vai sul sito Intel e scarica qualche PDF...