Salve di nuovo all'intera sezione e grazie per l'aiuto e per il supporto che ci fornite,ma soprattutto per la pazienza! Arrivo al dunque,ho il seguente codice e ci sono dei passaggi che non mi sono chiari quindi vi sarei grati se mi poteste dare delle delucidazioni in merito.
.MODEL SMALL
.STACK 100H
.DATA
prompt db "Inserisci un numero: $"
numero db 6,?,6 dup(0)
answer_hit db "Il numero e' divisibile per 3",13,10,"$"
answer_fail db "Il numero non e' divisibile per 3",13,10,"$"
invio db 13,10,"$"
.CODE
.STARTUP
mov ax,@DATA
mov ds, ax
lea dx,prompt ;STAMPO LA RICHIESTA DI INSERIRE UN NUMERO
mov ah,9
int 21h
lea dx,numero
mov ah,0ah
int 21h
lea dx,invio
mov ah,9
int 21h
sub ax,ax ;azzero AX
mov cl,numero+1 ; Inizializzo CX con la lunghezza della stringa letta
sub ch,ch
sub si,si ;si quindi vale 0
ciclo: mov dl,numero[si+2] ; Converto il carattere numerico in cifra numerico
sub dl,48 ;30h=48 decimale
add al,dl
adc ah,0
inc si
loop ciclo
mov bl,3
div bl ; Verifico AH che contiene dopo la divisione il resto se ; vale 0
or ah,ah ;se il risultato dell'or e' 1 il resto non e' 0
jz successo
lea dx, answer_fail
jmp visualizza
successo: lea dx,answer_hit
visualizza:mov ah,9
int 21h
mov ah, 4ch ; Passa il controllo al sistema operativo
int 21h
end ;
Ora i miei dubbi sono i seguenti:
Perchè inizializzo numero proprio in quel modo? E' un vettore? Perchè se cambio la prima casella quella con il 6 con un altra cifra (per esempio non funziona più?
perchè faccio l'addizione usando ADC ossia considerando anche il carry?
Grazie della disponibilità!