Char1 db "k" ; Carattere Num dd 45 ; Numero di ripetizioni .......... Buf1 resb 256 ; Buffer di lavoro
Char2 dw "ab" ; Coppia di caratteri Num dd 45 ; Numero di ripetizioni .......... Buf1 resb 256 ; Buffer di lavoro
Char4 dd "xyzh" ; Blocco di 4 caratteri Num dd 45 ; Numero di ripetizioni .......... Buf1 resb 256 ; Buffer di lavoro
Msg1 db "Prova di copiatura" ; Messaggio Sorgente .......... Buf1 resb 256 ; Buffer Destinazione
Msg1 db "Copia speculare" ; Messaggio Sorgente .......... Buf1 resb 256 ; Buffer Destinazione
Msg1 db "Il mare di Catania " ; Primo Messaggio Msg2 db "ha un bel colore azzurro." ; Secondo Messaggio .......... Buf1 resb 256 ; Buffer Destinazione
Msg1 db "Copia solo i dispari" ; Messaggio Sorgente .......... Buf1 resb 256 ; Buffer Destinazione
Msg1 db "Copia i dispari e zappa i pari" ; Messaggio Sorgente Char1 db "z" ; Carattere di Zapping .......... Buf1 resb 256 ; Buffer Destinazione
Buf1 db "ciao??....." ; messaggio di n caratteri/byte (1 carattere = 1 byte) _start: MOV AL,'z' ; Dato di 1 byte caricato in AL
MOV [Buf1],AL ; Scrittura in memoria del byte contenuto in AL
MOV [Buf1+1],AL ; Scrittura in memoria del byte contenuto in AL
Buf1 db "ciao??....." ; messaggio di n caratteri/byte (1 carattere = 1 byte)
_start: MOV AL,'z' ; Dato di 1 byte caricato in AL
MOV EDI,Buf1 ; L'indirizzo Buf1 viene duplicato (copiato) nel registro EDI
MOV [EDI],AL ; Scrittura in memoria del byte contenuto in AL
INC EDI ; Variazione dell'indirizzo, EDI punta alla locazione successiva
MOV ECX,5 ; Impostazione contatore per scrivere su 5 caselle
ancora: MOV [EDI],AL ; Scrittura in memoria del byte contenuto in AL
INC EDI ; Variazione dell'indirizzo, EDI punta alla locazione successiva
LOOP ancora ; Ricicla ECX volte
MOV ECX,5 ; Impostazione contatore per scrivere su 5 caselle
ancora: STOSB ; Scrittura in memoria di AL e Variazione dell'indirizzo EDI
LOOP ancora ; Ricicla ECX volte
MOV ECX,5 ; Impostazione contatore per scrivere su 5 caselle
REP STOSB ; Ricicla ECX volte: Scrittura in memoria di AL e Variazione dell'indirizzo EDI
MOV AL,'z' ; Dato di 1 byte caricato in AL
MOV EDI,Buf1 ; Indirizzo iniziale del buffer di memoria nel registro EDI
MOV ECX,5 ; Impostazione contatore nel registro ECX
REP STOSB ; Ricicla ECX volte: Scrittura in memoria di AL e Variazione dell'indirizzo EDI
MOV AX,'zk' ; Dato di 2 byte caricato in AX
MOV EDI,Buf1 ; Indirizzo iniziale del buffer di memoria nel registro EDI
MOV ECX,5 ; Impostazione contatore nel registro ECX
REP STOSW ; Ricicla ECX volte: Scrittura in memoria di AX e Variazione dell'indirizzo EDI
; Ogni volta EDI viene incrementato automaticamente di 2
; Alla fine saranno scritti: 5x2=10 byte
MOV EAX,'zkst' ; Dato di 4 byte caricato in EAX
MOV EDI,Buf1 ; Indirizzo iniziale del buffer di memoria nel registro EDI
MOV ECX,5 ; Impostazione contatore nel registro ECX
REP STOSW ; Ricicla ECX volte: Scrittura in memoria di EAX e Variazione dell'indirizzo EDI
; Ogni volta EDI viene incrementato automaticamente di 4
; Alla fine saranno scritti: 5x4=20 byte
myspace resb 4 ; blocco di 4 byte in RAM
_start: MOV AX,4F75h ; Informazione di 2 byte caricata in AX
MOV [myspace],AX ; Scrittura di 2 byte in RAM
msg db "Ciao a tutti." ; stringa di 13 caratteri in RAM
_start: MOV AL,"M" ; Carica il Registro AL con il codice ASCII della lettera "M"
MOV [msg],AL ; Scrive in memoria RAM, all'indirizzo msg
_start: MOV AL,"b" ; Carica il Registro AL con il codice ASCII della lettera "b"
MOV [msg+2],AL ; Scrive in memoria RAM, all'indirizzo msg+2
_start: MOV AX,[msg+1] ; Legge in AX 2 byte dalla memoria RAM
XCHG AH,AL ; Scambia il contenuto dei Registri AH ed AL
MOV [msg+1],AX ; Scrive 2 byte in memoria RAM, all'indirizzo msg+1
MOV AL,"e" ; Carica il Registro AL con il codice ASCII della lettera "e"
MOV [msg+5],AL ; Scrive in memoria RAM, all'indirizzo msg+5
MOV AX,"To" ; Carica il Registro AX con i codici ASCII delle lettere "To"
MOV [msg+7],AX ; Scrive 2 byte in memoria RAM, all'indirizzo msg+7
%define STDIN 0
%define STDOUT 1
%define STDERR 2
mov eax, codice-Servizio ; da comunicare esclusivamente nel registro eax int 80h ; chiamata del Servizio
...... msg1 db "Ciao a tutti." ...... mov eax, 4 ; Codice del servizio richiesto (visualizza messaggio) mov ebx, 1 ; Codice del terminale (STDOUT) su cui mandare il messaggio mov ecx, msg1 ; Indirizzo del primo carattere del messaggio mov edx, 13 ; Lunghezza del messaggio (spazi inclusi) int 80h ; Chiamata Linux ......
...... buf1 resb 256 ; Spazio riservato in memoria (256 byte) ...... mov eax, 3 ; Codice del servizio richiesto (ricevi messaggio) mov ebx, 0 ; Codice del terminale (STDIN) da cui ricevere il messaggio mov ecx, buf1 ; Indirizzo del primo byte della memoria riservata al messaggio mov edx, 256 ; Quantità di spazio dedicata al messaggio int 80h ; Chiamata Linux ......
mov eax, 1 ; Codice del servizio "Chiusura Programma" int 80h ; Chiamata Linux
msg1 db "Ciao a tutti." ; stringa messaggio Lmsg1 $-msg1 ; calcolo Lunghezza stringa messaggio
buf1 resb 256 ; spazio/blocco di 256 byte di memoria RAM
Siano dati: il messaggio, Msg1 db 'Prova SMS !'
ed il buffer Buf1 resb 50
1) Visualizzare Msg1 sul terminale, utilizzando la chiamata a sys_write.
2) Riempire i primi 30 byte di Buf1 con il carattere 'x'.
3) Copiare Msg1 in Buf1.
4) Visualizzare su terminale una stringa contenente solo i caratteri di posto dispari di Msg1.
NOTE: Per costruire le soluzioni è possibile aggiungere dei caratteri sia a Msg1 sia a Buf1.
In Msg1, considerare la 'P' di posto 1 e gli spazi come caratteri.
| Esc[Line;ColumnH Esc[Line;Columnf |
Cursor Position: Moves the cursor to the specified position (coordinates). If you do not specify a position, the cursor moves to the home position at the upper-left corner of the screen (line 0, column 0). This escape sequence works the same way as the following Cursor Position escape sequence. |
|---|---|
| Esc[ValueA | Cursor Up: Moves the cursor up by the specified number of lines without changing columns. If the cursor is already on the top line, ANSI.SYS ignores this sequence. |
| Esc[ValueB | Cursor Down: Moves the cursor down by the specified number of lines without changing columns. If the cursor is already on the bottom line, ANSI.SYS ignores this sequence. |
| Esc[ValueC | Cursor Forward: Moves the cursor forward by the specified number of columns without changing lines. If the cursor is already in the rightmost column, ANSI.SYS ignores this sequence. |
| Esc[ValueD | Cursor Backward: Moves the cursor back by the specified number of columns without changing lines. If the cursor is already in the leftmost column, ANSI.SYS ignores this sequence. |
| Esc[s | Save Cursor Position: Saves the current cursor position. You can move the cursor to the saved cursor position by using the Restore Cursor Position sequence. |
| Esc[u | Restore Cursor Position: Returns the cursor to the position stored by the Save Cursor Position sequence. |
| Esc[2J | Erase Display: Clears the screen and moves the cursor to the home position (line 0, column 0). |
| Esc[K | Erase Line: Clears all characters from the cursor position to the end of the line (including the character at the cursor position). |
q: esce dall'ambiente gdb;
h: aiuto sui comandi gdb;
l: lista alcune righe del sorgente;
l num_riga: lista le righe del sorgente subito prima e subito dopo quella indicata;
info address var: restituisce l'indirizzo di var;
info variables: restituisce nome e indirizzo di tutte le variabili;
info registers: visualizza lo stato dei registri;
breakpoint num_riga: inserisce un blocco subito dopo la riga indicata;
r: esegue il programma fino al primo blocco;
c: riprende l'esecuzione;
s: esegue solo l'istruzione successiva.
| ls -l | lista il contenuto della directory corrente |
| ls -l /mnt | lista il contenuto della directory /mnt |
| cd /home/live/Desktop | Cambia cartella di lavoro, posizionandosi in /home/live/Desktop |
| cd .. | Cambia cartella di lavoro, posizionandosi in quella di livello superiore |
| man mkdir | visualizza la pagina di manuale relativa al comando mkdir |
| cp file1 file2 | copia file1 in file2 |
| cp -r dir1 dir2 | copia dir1 in dir2 (da notare l'opzione -r che attiva la ricorsione) |
| geany & | avvia geany (da notare il parametro & che disimpegna la console per altri comandi) |
| su | richiesta passaggio modalita' amministratore |
| mkdir /mnt/sda7 | creazione della directory /mnt/sda7 |
| mount /dev/sda7 /mnt/sda7 | montaggio della partizione /dev/sda7 nel punto /mnt/sda7 dell'albero delle directory |