DOMANDA Programma Assembly Winasm Sui Bit

EkeyDanger

Nuovo Utente
47
0
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.
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:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!