logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Odejmowanie 8-bitowych liczb w kodzie U1 - problem z wynikiem i działaniem programu

dun1 12 Cze 2007 18:30 2495 1
REKLAMA
  • #1 3977853
    dun1
    Poziom 10  
    Posty: 35
    Ocena: 2
    Pisze drugi raz o tym odejmowaniu i coś tam wymyśliłem.
    Wersja pierwsza:
    MOV R0,#2
    MOV R1,#8
    MOV A,R1
    CPL A
    MOV R1,A
    MOV A,R0
    ADD A,R1
    CPL A
    MOV R3,A
    END
    Gdy odejmuje np mniejsza - większa daje wynik dobry tylko że dodatni.
    Co gorsza program całkowicie nie działa gdy odejmujemy większa-mniejsza. PROSZĘ o POMOC!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
  • REKLAMA
  • #2 3978059
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    dun1 napisał:
    Pisze drugi raz o tym odejmowaniu i coś tam wymyśliłem.
    Wersja pierwsza:
    MOV R0,#2
    MOV R1,#8
    MOV A,R1
    CPL A
    MOV R1,A
    MOV A,R0
    ADD A,R1
    CPL A
    MOV R3,A
    END
    Gdy odejmuje np mniejsza - większa daje wynik dobry tylko że dodatni.
    Co gorsza program całkowicie nie działa gdy odejmujemy większa-mniejsza. PROSZĘ o POMOC!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11


    Dla MSP430 wyglądało by to tak:
    
     RSEG DATA_N
    
    Liczba1         DS8        1                         // Zmienna  o wielkości 1 bajta
    Liczba2         DS8        1                         // Zmienna  o wielkości 1 bajta
    
     RSEG CODE
     
    // Inicjalizacja zmiennych
                      MOV.B #0x01,Liczba1               //Liczba1 = 1 w U1
                      MOV.B #0x04,Liczba2               //Liczba2 = 4 w U1
    // Odejmujemy Liczba1-Liczba2
    
                     MOV.B Liczba1,R4                     //R4 = Liczba1
                     MOV.B Liczba2,R5                     //R5 = Liczba2
                     INV.B R5                                  //R5 = -Liczba2
                     CALL #Dodawianie_U1              //Wywołanie procedury dodwawającej
                     JMP $                                       //Stop
    
    //Dodawanie U1
    Dodawanie_U1
                   ADD.B R4,R5                           //R5 = R5 + R4
                   JNC Exit                                  //Jeżeli nie ma przeniesienia to Exit
                   ADD.B #1,R5                          //Jeżeli jest przeniesienie to dodaj 1
    Exit           RET
    
    

    w R5 otrzymujesz wynik odejmowania. Tak pokrótce wyjaśniając odejmowanie jest dodawania liczby przeciwnej. W kodzie U1 liczba przeciwna jest negacją liczby. A dodawanie jest prawie "normalne" z wyjątekiem tego że gdy otrzymamy przeniesienie na ostatnim bicie to dodajemy do wyniku 1.
REKLAMA