|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2006
Città: Trieste
Messaggi: 3494
|
[ASSEMBLER] Aiuto, non capisco alcune linee di codice...
Salve a tutti!
E' ormai da qualche settimana che bazzico con ASSEMBLER (classico x86) e vi sarei riconoscente se qualcuno mi aiutasse a capire che cosa fa in pratica una ben determinata porzine di codice in grassetto del seguente programma: (Questo non è altro che un giochino che fa rimbalzare una pallina per lo schermo in modalità testo 80x25) ------------------------------------------------------------------------ .model small .stack .data .code inizio: ; imposto la modalità grafica 80x25 mov ah, 00h mov al, 03h int 10h ; Vengono usati 2 flag (ch e cl) che possono avere valore 0 o 1 ; il valore di questi due viene impostato a seconda del valore attuale del cursore ; i flag servono a stabilire se sul contatore di riga o colonna va fatta un operazione di incremento o decremento ; Valori dei flag: ; CH = 0: decremento delle colonne ; CH = 1: incremento delle colonne ; CL = 0: decremento delle righe ; CL = 1: incremento delle righe mov ax, 0B800h ; imposto il segmento extra per la memoria video (il primo carattere in alto a dx è contenuto in quseto indirizzo in ram video) mov es, ax ; BX: punto di partenza mov bh, 0 ; BH: colonne mov bl, 0 ; BL: righe ; DX: carattere da stampare e attributo mov dh, '8' ; codice ascii del carattere riprodotto mov dl, 0Eh ; attributo del carattere ; inizialmente imposto i flag a 1 poiche incremento tutti i contatori mov ch, 1 ; comincio il moto verso il basso e verso sinistra mov cl, 1 ciclo1: mov ah, es:[si] mov al, es:[si+1] mov bp, ax mov di, bx mov al, 80 mov ah, 0 mul bl xchg bh, bl mov bh, 0 add ax, bx mov bx, si mov bl, 2 mov bh, 0 mov si, dx mul bx mov dx, si mov si, ax mov es:[si], dh mov es:[si+1], dl mov bx, di call sleep ; setto i flag (CX) cmp bl, 24 jne pRig2 mov cl, 0 jmp pCol1 pRig2: cmp bl, 0 jne pCol1 mov cl, 1 pCol1: cmp bh, 79 jne pCol2 mov ch, 0 jmp continua pCol2: cmp bh, 0 jne continua mov ch, 1 continua: cmp ch, 0 jne v2 ; decrementa colonne dec bh jmp colonne v2: ; incrementa colonne inc bh colonne: cmp cl, 0 jne v3 ; decrementa righe dec bl jmp salta v3: ; decrementa righe inc bl jmp salta salta: mov ax, bp mov es:[si], ah mov es:[si+1], al jmp ciclo1 mov ah, 4Ch int 21h ; sleep: effettua 10^8 push (15 ck) e pop (15 ck) sleep PROC push cx mov cx, 10000 cicloSleep: push cx mov cx, 10000 ciclo2: loop ciclo2 pop cx loop cicloSleep pop cx ret sleep ENDP END inizio ------------------------------------------------------------------------ Che cosa faccia ogni singola riga la capisco, ma non capisco nel complesso a che cosa serva quella porzione di codice... Grazie mille!
__________________
ASUS PB278Q - Corsair Carbide 500R Black - Thermaltake ToughPower 750W - Intel i7-4790 (Cooled by Corsair Liquid H80i) - ASRock Z97 Extreme 4 - MSI GTX 950 Gaming 2G - 16GB Corsair Vengeance Pro 1600MHz - Samsung SSD 840 Pro 256GB ![]() Ultima modifica di <^MORFEO^> : 22-08-2009 alle 10:27. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2006
Città: Trieste
Messaggi: 3494
|
^UP
__________________
ASUS PB278Q - Corsair Carbide 500R Black - Thermaltake ToughPower 750W - Intel i7-4790 (Cooled by Corsair Liquid H80i) - ASRock Z97 Extreme 4 - MSI GTX 950 Gaming 2G - 16GB Corsair Vengeance Pro 1600MHz - Samsung SSD 840 Pro 256GB ![]() |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2006
Città: Trieste
Messaggi: 3494
|
^UP
__________________
ASUS PB278Q - Corsair Carbide 500R Black - Thermaltake ToughPower 750W - Intel i7-4790 (Cooled by Corsair Liquid H80i) - ASRock Z97 Extreme 4 - MSI GTX 950 Gaming 2G - 16GB Corsair Vengeance Pro 1600MHz - Samsung SSD 840 Pro 256GB ![]() |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:53.










ASUS PB278Q - Corsair Carbide 500R Black - Thermaltake ToughPower 750W - Intel i7-4790 (Cooled by Corsair Liquid H80i) - ASRock Z97 Extreme 4 - MSI GTX 950 Gaming 2G - 16GB Corsair Vengeance Pro 1600MHz - Samsung SSD 840 Pro 256GB 








