witam wszystkich,
mam do napisania pewien program, w którym będę musiał odjąć dwie pięciobajtowe zmienne w upakowanym kodzie BCD. Przygotowałem sobie takie zmienne:

liczbaLL db 0,0,0,10h,0h
liczbaPP db 0,0,0,0,25h
wynik db 0,0,0,0,0 

chcę oczywiście od liczby pierwszej odjąć drugą, a wynik zapisać w ostatniej zmiennej. Napisałem taki kawałek kodu:

mov al,[liczbaLL+4]
sub al,[liczbaPP+4]
das
mov [wynik+4],al

mov al,[liczbaLL+3]
sbb al,[liczbaPP+3]
das
mov [wynik+3],al 

mov al,[liczbaLL+2]
sbb al,[liczbaPP+2]
das
mov [wynik+2],al

mov al,[liczbaLL+1]
sbb al,[liczbaPP+1]
das
mov [wynik+1],al

mov al,[liczbaLL+0]
sbb al,[liczbaPP+0]
das
mov [wynik+0],al

jednakże dzieją się jakieś anomalie... tak wygląda wynik: http://i.imgur.com/dpOwSKo.png

co ciekawe, gdy zamienię to na dodawanie, wszystko działa w porządku. Ponadto, gdy odejmuję od siebie tylko dwa bajty, też wszystko jest w porządku... o co tutaj chodzi? Próbowałem trochę prześledzić to debuggerem i zauważyłem, że te dziwne wartości w stylu 99h, 9Ah pojawiają się po korekcji das. Dlaczego?

Z góry dziękuję za pomoc, pozdrawiam!