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

Zadanie w debug.exe i odejmowanie za pomocą asemblera.

samuray5 15 Mar 2007 19:42 2796 3
REKLAMA
  • #1 3681848
    samuray5
    Poziom 12  
    Posty: 87
    Pomógł: 1
    Ocena: 5
    Witam wszystkich forumowiczów.
    Miałbym małą prośbę o pomoc. Otóż jutro mam sprawdzian z mikroprocesorów, no i mój problem polega na tym ze nie umiem wykonać jednego z zadań, które ma być na tym sprawdzianie. Zadanie polega na odejmowaniu za pomocą asemblera. Dlatego chciałbym prosić o pomoc tych, którzy maja pojecie i wiedze na ten temat, aby pokazali mi sposób rozwiązywania takiego zadania na przykładzie:
    Wykonaj działanie 10 - 50 wykorzystując uzupełnienie do 2.
    - Napisz program w asemblerze.
    - napisz procedurę odejmowania i podaj wynik z znak -moduł.


    Gdybym mógł jeszcze o pomoc w przedstawieniu tego działania w debug.exe był bym wdzienczny i zobowiązany.

    Wszystkich za szybka odpowiedz z góry dziękuje.
  • REKLAMA
  • Pomocny post
    #2 3682098
    funak
    Poziom 27  
    Posty: 1092
    Pomógł: 101
    Ocena: 461
    Hej,

    Na początek, odejmować, to znaczy dodawać
    zanegowaną wartość.

    Czyli:


    10 - 50
    to nic innego jak 10 + (-50)

    Skomplikowanie to wygląda, ale zaraz tłumaczonko będzie, tylko uruchomię sobie SIM51ENG, bo taki mam dostępny symulator 51, bo rozumiem, że to dla MCS-51 ma być?


    Oto kod w asemblerze.


    mov R0,#10 przesyła do rejestru R0, pierwsza liczbe
    mov A,#50 przesyła do akumulatora drugą liczbę

    cpl A neguję bitowo akumulator, czyli tą drugą liczbę, chcę z niej zrobić -50
    setb CY aby liczba 50 była -50, muszę do zanegowanej wartości dodać jedynkę, ponieważ w kolejnym rozkazie będę dodawał liczby do siebie, toteż ustawiam flagę CY, jako wskaźnik przeniesienia

    addc A,R0 dodaję do siebie obie wartości


    Troszkę tłumaczenia:

    
    
    
     10: 0000 1010
    -50: 0011 0010
    ---------------
            1 111
     10: 0000 1010
    -50: 1100 1101
     +1:         1
    ---------------
         1101 1000 
    
    pierwszy bit, oznacza znak liczby:
    1 - liczba ujemna
    0 - liczba dodatnia
    
    Jaka to liczba?
    
         1101 1000
    
    Ja to robię w ten sposób:
    
         1101 1000
    
               11
         0010 0111 negacja bitów
                +1 plus jeden
    ---------------
         0010 1000
    
    i liczymy: 1x2^5+1x2^3=32+8=40
    A że to liczba ujemna, to wynik: -40.
    
    
  • REKLAMA
  • #3 3682126
    samuray5
    Poziom 12  
    Posty: 87
    Pomógł: 1
    Ocena: 5
    funak napisał:
    Hej,

    Na początek, odejmować, to znaczy dodawać
    zanegowaną wartość.

    Czyli:


    10 - 50
    to nic innego jak 10 + (-50)

    Skomplikowanie to wygląda, ale zaraz tłumaczonko będzie, tylko uruchomię sobie SIM51ENG, bo taki mam dostępny symulator 51, bo rozumiem, że to dla MCS-51 ma być?


    ??? nie zabardzo wiem o co ci teraz chodzi :) hehe ale własnie cos ma byc z tym dodawaniem ale własnie nie zabardzo wiem o co chodzi bo mnie nie bylo na tej lekcji w szkole. Wiem tylko tyle ze wcześniej bylo cos o mikroprocesorze 8086 omawiane.

    Zadanie ma cos wygladać jak to zamieszczam nizej
    Załączniki:
    • Zadanie w debug.exe i odejmowanie za pomocą asemblera. 2.jpg (193.86 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Zadanie w debug.exe i odejmowanie za pomocą asemblera. 1.jpg (219.24 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #4 3682506
    samuray5
    Poziom 12  
    Posty: 87
    Pomógł: 1
    Ocena: 5
    funak napisał:
    Hej,

    Na początek, odejmować, to znaczy dodawać
    zanegowaną wartość.

    Czyli:


    10 - 50
    to nic innego jak 10 + (-50)

    Skomplikowanie to wygląda, ale zaraz tłumaczonko będzie, tylko uruchomię sobie SIM51ENG, bo taki mam dostępny symulator 51, bo rozumiem, że to dla MCS-51 ma być?


    Oto kod w asemblerze.


    mov R0,#10 przesyła do rejestru R0, pierwsza liczbe
    mov A,#50 przesyła do akumulatora drugą liczbę

    cpl A neguję bitowo akumulator, czyli tą drugą liczbę, chcę z niej zrobić -50
    setb CY aby liczba 50 była -50, muszę do zanegowanej wartości dodać jedynkę, ponieważ w kolejnym rozkazie będę dodawał liczby do siebie, toteż ustawiam flagę CY, jako wskaźnik przeniesienia

    addc A,R0 dodaję do siebie obie wartości


    Troszkę tłumaczenia:

    
    
    
     10: 0000 1010
    -50: 0011 0010
    ---------------
            1 111
     10: 0000 1010
    -50: 1100 1101
     +1:         1
    ---------------
         1101 1000 
    
    pierwszy bit, oznacza znak liczby:
    1 - liczba ujemna
    0 - liczba dodatnia
    
    Jaka to liczba?
    
         1101 1000
    
    Ja to robię w ten sposób:
    
         1101 1000
    
               11
         0010 0111 negacja bitów
                +1 plus jeden
    ---------------
         0010 1000
    
    i liczymy: 1x2^5+1x2^3=32+8=40
    A że to liczba ujemna, to wynik: -40.
    
    


    Dzieki za pomoc
REKLAMA