Ciao, frequento una terza informatica e mi è stato dato da fare un esercizio in Assembly WinAsm 16Bit che richiede di trovare la serie massima di bit 0 e 1 all'interno di un numero.
Es.
14 = 0000000000001110
Max Serie 0 = 12
Max Serie 1 = 3
Premetto che ho iniziato da pochissimo a scrivere in Assembly e conosco poco e nulla, quindi non riesco a capire dov'è che ho sbagliato in questo codice.
Grazie a tutti per l'eventuale aiuto. Penso comunque che ci sia qualcosa che non va nel richiamo dell'etichetta ciclo, che dovrebbe finire quando la Variabile Index è pari a 100000000000000b.
Es.
14 = 0000000000001110
Max Serie 0 = 12
Max Serie 1 = 3
Premetto che ho iniziato da pochissimo a scrivere in Assembly e conosco poco e nulla, quindi non riesco a capire dov'è che ho sbagliato in questo codice.
Codice:
.model small
.stack 100h
.data
;Numero su cui lavorare
wNum DW 55
wIndex DW 0000000000000001b
bCurrentBit DB ?
bLastBit DB 0
biSerie0 DB 0
biSerie1 DB 0
biMax0 DB 0
biMax1 DB 0
.code
.startup
ciclo:
MOV AX, wNum
AND AX, wIndex
JZ zero
MOV bCurrentBit,1
JMP count
zero:
MOV bCurrentBit, 0
count:
MOV AL, bLastBit
CMP bCurrentBit, AL
JE inc_serie
JMP not_equal
inc_serie:
CMP bCurrentBit, 0
JE equal_to_0
ADD biSerie1,1
JMP after
equal_to_0:
ADD biSerie0,1d
JMP after
not_equal:
MOV biSerie0, 0
MOV biSerie1, 0
JMP inc_serie
after:
MOV AL, biMax0
CMP biSerie0, AL
JG max_0
JMP after2
max_0:
MOV AL, biSerie0
MOV biMax0, AL
after2:
mov AL, biMax1
CMP biSerie1, AL
JG max_1
JMP after3
max_1:
MOV AL,biSerie1
MOV biMax1, AL
after3:
MOV AL, bCurrentBit
MOV bLastBit, AL
CMP wIndex, 100000000000000b
JE fine
SHR wIndex, 1
JMP ciclo
fine:
MOV DL, biMax0
ADD DL, 30h
MOV AH, 02h
INT 21h
MOV DL, biMax1
ADD DL, 30h
MOV AH, 02h
INT 21h
MOV AH, 01
INT 21h
MOV AH,4Ch
INT 21h
end
Grazie a tutti per l'eventuale aiuto. Penso comunque che ci sia qualcosa che non va nel richiamo dell'etichetta ciclo, che dovrebbe finire quando la Variabile Index è pari a 100000000000000b.
Ultima modifica da un moderatore: