Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Assembly 8086

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    2

    Assembly 8086

    Salve a tutti, devo fare un programma in assembly 8086 dove all'interno di una stringa di bit conto il numero di transizioni da 0->1 e da 1->0

    il programma è questo, il problema è che non mifunziona correttamente e non riesco capire il perché, premesso che in assembler non sono un asso, mi potreste dare una mano?

    unsigned char vet[] = { 0xBC,0xFF,0x01 }; //Array di byte (da considerare come
    //una sequenza di bit)
    unsigned short int len = 18; //Lunghezza (numero di bit)

    // Output
    unsigned int transizioni01; //Numero di transizioni 0->1
    unsigned int transizioni10; //Numero di transizioni 1->0

    __asm
    {
    //azzeamento registri
    XOR EAX, EAX
    XOR EBX, EBX
    XOR ECX, ECX
    XOR EDX, EDX
    XOR ESI, ESI
    XOR EDI, EDI

    MOV CX, len // inserisco nel registro ECX la lunghezza del vettore

    // casi particolari
    CMP ECX, 1
    JNE L5
    MOV transizioni01, 0
    MOV transizioni10, 0
    JMP fine2

    L5:CMP ECX, 4
    JNE L6
    MOV transizioni01, 1
    MOV transizioni10, 1
    JMP fine2


    L6: CMP ECX, 9
    JNE L7
    MOV transizioni01, 0
    MOV transizioni10, 0
    JMP fine2

    L7: CMP ECX, 16
    JNE L8
    MOV transizioni01, 1
    MOV transizioni10, 0
    JMP fine2

    L8 : CMP ECX, 17
    JNE L4
    MOV transizioni01, 1
    MOV transizioni10, 1
    JMP fine2
    //ciclo generale
    L4:
    Ciclo : MOV AL, vet[ECX-1] // partendo dal fondo guardo tutti i numeri del vettore
    MOV BL, AL // copio in BL AL
    SHR BL, 1 //faccio lo shift a destra di 1 di BL
    AND AL, 01
    AND BL, 01
    CMP AL, BL //comparo i due bit
    JE L1 //se i due bit sono uguali termino il ciclo
    CMP AL, 1 //guardo che AL=1 E BL=0
    CMP BL, 0
    JNE L2 //se BL è diverso 0 allora salto al caso successivo
    INC EDX //in caso affermativvo incremento di uno il registro, per contare le transizioni
    L2: CMP AL, 0 //comparo che AL=0 e BL=1
    JNE L1 //se sono diversi termino l'esecuzione del ciclo per quel bit
    CMP BL, 1
    INC ESI //caso afferamtivo incremento il registro per contare una transizione
    L1 :
    LOOP Ciclo //ciclo che mi guarda dalla fine bit per bit gli elementi dell'array



    //conteggi transizioni
    MOV transizioni01, ESI
    MOV transizioni10, EDX
    fine2:

    }

    // Stampa su video
    printf("Le transizioni 0->1 presenti sono: %d\n", transizioni01);
    printf("Le transizioni 1->0 presenti sono: %d\n", transizioni10);

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Dato che hai postato su più forum ... ti ho risposto sull'altro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    2
    grazie!! anche io ti ho risposto sull'altro

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    In genere postare contemporaneamente su più forum non è una cosa apprezzata ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.