«« ( Date ) »» // «« ( Thread ) »» // csidc - 2004

Problem

by Stojlljkovic Predrag
sreda, 07. april 2004 - 01:21.

Desava mi se nesto strasno cudno kada izvrsavam sledeci deo programa za deljenje dva broja:
divfix .macro deljenik, delilac, kolicnik
st deljenik, ar1
st delilac, ar2
st kolicnik, ar3
ld *ar1, 8, a
abs a
ld *ar2, b
cmpm *ar2, #0x8000
xc 2, TC
add #1, b
abs b
stl b,*ar3
rpt #15
subc *ar3, a
stl a, *ar3 ;provera da li je doslo do OVF
bit *ar3, 15-15
xc 2, TC
ld #0x7fff, a ;ako jeste, upisati najveci broj
ld *ar1, b ;a onda upis znaka
xor *ar2, b
stl b, *ar3
ld *ar3, b
sfta b, -15
add b, a
xor b, a
stl a, *ar3
.endm

Kriticna mesta su obojena. Instrukcija XC 2, TC bi trebalo da dovede do toga da se sledece 2 reci izvrse (u ovim slucajevima to su instrukcije add #1, b i ld #0x7fff, a) samo ukoliko je TC=1 (prema opisu instrukcije XC). Medjutim, kod mene se desava sasvim suprotno!!! Instrukcije se izvrsavaju samo kada je TC=0 !!!!!! Zbog toga sam u kodu morao da napravim ispravku i (kod mene na masini) umesto TC stavim NTC kako bi sve radilo kako valja, ali je to sasvim suprotno od onoga kako bi trebalo da bude. Molim ljude koji imaju instaliran CCS da testiraju ovaj deo koda kod sebe na masinama i jave mi kako se kod njih ponasa instrukcija XC. Ako neko ume da mi objasni fenomen koji se javlja kod mene, bio bih mu vrlo zahvalan.
Pedja