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

Błąd w mnożeniu liczb dwubajtowych na mikrokontrolerze 8051 - analiza kodu

KingArtur87 04 Kwi 2009 13:06 1522 4
REKLAMA
  • #1 6373074
    KingArtur87
    Poziom 9  
    Posty: 30
    Ocena: 2
    Witam ponownie, na cwiczeniach doatslismy zadanie, ktore polegalo na pomnozeniu przez siebie dwoch liczb dwubajtowych, ale moj program nie dziala dokonca poprawnie. nie wiem gdzie zrobilem blad wiec prosze o pomoc.

    ( sposob ktory napisalemnei jest moze najkrotszy ale narazie chcialem zrobic go w prosty dla mnie sposob zeby zaskoczyc o co wogole chodzi, a potem bede kombinowal :) )

    
    	org 0000h
    	mov a,0x02
    	mov b,0x04
    	mul ab
    	mov 0x0b,a
    	mov 0x15,b
    
    	mov a,0x02
    	mov b,0x03
    	mul ab
    	mov 0x16,a
    	mov 0x20,b
    
    	mov a,0x01
    	mov b,0x04
    	mul ab
    	mov 0x17,a
    	mov 0x21,b
    
    	mov a,0x01
    	mov b,0x03
    	mul ab
    	mov 0x22,a
    	mov 0x2c,b
    
    
    	mov 0x4b,0x0b
    	mov a,0x15
            add a,0x16
    	addc a,0x17
    	mov 0x4a,a
    	clr a
    	addc a,0x20
    	addc a,0x21
    	addc a,0x22
    	mov 0x49,a
    	clr a
    	addc a,0x2c
    	mov 0x48,a
    
    	end
    
  • REKLAMA
  • #2 6375450
    VanThor
    Poziom 19  
    Posty: 224
    Pomógł: 34
    Ocena: 5
    Źle dodajesz iloczyny częściowe w końcowej części programu.


    Moim zdaniem to powinno wyglądać jakoś tak:

    KingArtur87 napisał:


    
    	org 0000h
    	mov a,0x02
    	mov b,0x04
    	mul ab
    	mov 0x0b,a
    	mov 0x15,b
    
    	mov a,0x02
    	mov b,0x03
    	mul ab
    	mov 0x16,a
    	mov 0x20,b
    
    	mov a,0x01
    	mov b,0x04
    	mul ab
    	mov 0x17,a
    	mov 0x21,b
    
    	mov a,0x01
    	mov b,0x03
    	mul ab
    	mov 0x22,a
    	mov 0x2c,b
    
    ;-------
    	mov 0x4b,0x0b
    	mov a,0x15
       add a,0x16
       mov 0x4a,a
       mov a,0x20
    	addc a,0x21
    	mov 0x49,a
    	mov a,0x2c
    	addc a,#0
       mov 0x48,a
    	mov a,0x4a
    	add a,0x17
    	mov 0x4a,a
    	mov a,0x49
    	addc a,0x22
    	mov 0x49,a
       mov a,0x48
       addc a,#0
       mov 0x48,a
    ;-------
    	end
    
  • REKLAMA
  • #3 6375718
    adamwesola
    Poziom 24  
    Posty: 499
    Pomógł: 71
    Ocena: 22
    Przy takim zapisie
    Cytat:
    mov a,0x02
    mov b,0x04
    do rejestrów a i b , ładujesz zawartość komórek pamięci , spod adresów 2 i 4 , zamiast argumentów natychmiastowych , czyli #2 i #4
  • REKLAMA
  • #5 6379767
    kasjo
    Poziom 26  
    Posty: 775
    Pomógł: 94
    Ocena: 90
    W celu zwiększenia akumulatora o 1 gdy ustawiony jest znacznik przeniesienia (np przy dodaniu 2 liczb gdy wynik może nie mieścić się w jednym bajcie)
REKLAMA