Originariamente inviato da Vincent81
fin qui tutt'ok ma il codice in alcune parti proprio non mi è chiaro e ve lo riporto:
1 Mov BX, 0200
2 Mov CL, 14
questo è un numero decimale quindi effettivamente leggi 14 numeri, per scrivere l'esadecimale devi aggiungere h alla fine, quindi scrivere 14h
3 Mov DL, 0
4 Mov CH, 0 ;fino a qui tutto chiaro azzeriamo i due registri e mettiamo 0200 e 14 (20in decimale in CL
5 Mov AL, [BX] ; mettiamo in AL il contenuto del registro BX (AL in teoria è 8 bit mentre il contenuto di BX non dovrebbe essere a 16 bit?)
non ci metti il contenuto di bx, ma il valore puntato dall'indirizzo in memoria dal registro bx. se avessi fatto mov bx, array_numeri il valore in al sarebbe stato il primo numero nell'array
6 Mov AL, 00 ; che senso ha se si e' appena inserito il contenuto di BX?
7 JE5 ;Salta se operatore1 = operatore2 (questo salto non mi e' chiaro)
8 INC DL
9 INC BX
10 DEC CL
11 JNE 5 ; Salta se l'operatore1 <> operatore2 (se flag zero è 0)
12 MOV [0301], DL
13 MOV [0300], CH ; mette i risultati nei rispettivi registri
14 INT 20 ;e in questo caso finirebbe il programma
15 INC CH ; altrimenti incrementa CH (dovrebbe essere)
16 JMP 9
17 INC BX
18 DEC CL ; passiamo al numero successivo e decrementiamo i numeri da confrontare
19 JNE 5
20 MOV [0300], CH
21 INT 20
se qualcuno mi chiarisse le idee (mi rinfrescherebbe alla grande la memoria XD) ne sarei veramente grato