Sezione |
Indirizzi Base
Registri Interni
|
Capitolo 1 |
Il Processore e il Debugger |
DEBUG 18/22 [46 di 60] |
|
|
|
Aggiornato 24 settembre 2003 e 17 febbraio 2005 |
|
Il comando A (ASSEMBLY, assembla) permette la creazione di programmi eseguibili anche in ambiente debug; si tratta di un esercizio senza futuro, al limite della paranoia, poco pratico e piuttosto complesso; la logica dei debugger (per esempio quella di richiedere numeri esadecimali senza la H finale) rende questo esercizio addirittura controproducente. | |
La precedente ...esplosione di ottimismo per sottolineare di evitare l'uso proprio di questo comando. | |
Anche l'uso per effettuare piccole correzioni locali è assurdo: si fa prima a tornare in editor, correggere, ricompilare e rientrare in debug con la nuova versione dell'eseguibile. | |
Volendo trovare per forza una occasione utile possiamo pensare all'uso in una esercitazione sulla scrittura di istruzioni: poiché l'assemblatore del debug (cioè il comando A) è in grado di riconoscere gli errori, se la stringa digitata non è corretta viene segnalato errore. | |
Vediamo dunque come si usa Assembly: non appena si conferma con Invio la lettera A, sulla riga successiva appare l'indirizzo puntato da CS:IP. La dove sta lampeggiando il cursore dovremo scrivere il codice mnemonico di una istruzione, confermando ogni volta con Invio. | |
Solo quando riteniamo di aver finito bisogna premere Invio 2 volte di fila: si torna così al prompt del debug (il segno meno, a sinistra). | |
Vediamo l'effetto di questo esercizio; sulla sinistra abbiamo scritto alcune istruzioni, decisamente a caso. Il debug, senza mostrarlo esplicitamente le ha compilate: l'unico segno del fatto sta nell'indirizzo successivo, effettivamente incrementato del numero presumibile di bytes associati a ciascuna istruzione. | |
La verifica con il comando U (a destra) dimostra che in memoria sono stati effettivamente allocati i bytes corrispondenti alle istruzioni che abbiamo digitato: |
Se fai click sull'icona a
sinistra si apre l'Ambiente Assembly
e puoi
provare DEBUG
on-line. Scegli il pulsante di opzione "Aprire il file" o "Esegui l'applicazione" e conferma con OK. NB: alcuni gestori di protezione (per esempio SP2 di WinXP) non ti consentono questa operazione: in questo caso scrivi c:\arch-lab\bin\sys\assembler.pif direttamente nel campo indirizzo del Browser |
-a 11A0:0100 mov ax,1234 11A0:0103 mov dx,5678 11A0:0106 add ax,dx 11A0:0108 call 5432 11A0:010B jmp abcd 11A0:010E - |
-u 100 11A0:0100 B83412 MOV AX,1234 11A0:0103 BA7856 MOV DX,5678 11A0:0106 01D0 ADD AX,DX 11A0:0108 E82753 CALL 5432 11A0:010B E9BFAA JMP ABCD 11A0:010E 0000 ADD [BX+SI],AL |
|
Ecco la cosa utile: abbiamo imparato che il codice operativo di call 5432 è E8, quello di jmp abcd è E9; e così via. | |||||
Come detto tutti i valori numerici devono
essere intesi esadecimali (cioè non è necessario aggiungere la H finale,
anzi è un errore!); in linea di massima tutte le istruzioni sono
sostanzialmente identiche, con qualche distinguo. Per esempio:
|
-a 100 1192:0100 jmp 110 1192:0102 jmp 1002 1192:0105 jmp 100 |
-u 100 1192:0100 EB0E JMP 0110 1192:0102 E9FD0E JMP 1002 1192:0105 EBF9 JMP 0100 |
|
in particolare il
numero relativo codificato a fianco
del codice operativo (EB o
E9) è da ritenersi
numero con segno:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
da notare che, se il numero relativo è a 2 bytes, viene scritto in memoria con la solita tecnica Lo-Hi (prima la sua parte bassa e poi la parte alta); per esempio il salto in avanti JMP 1002, proposto nel riquadro iniziale all'indirizzo 0102, salta i bytes da 0105 a 1001 compresi, cioè una quantità espressa dal numero decimale positivo 3837, appunto 0EFDH, codificata quindi da E9FD0E. |
|
Capitolo 1 | DEBUG 18/22 | |||||||
46 di 60 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|