ASM51, ako by ste nakodovali?
MK
info@mcu.cz
Neděle Leden 22 17:06:53 CET 2006
> tak nic, myslel som ze rutinu "CASE" maju borci co programuju v
> asembleri dobre zvladnutu. Tak sa idem trapit a skusim nieco nakodit :-/
Balu promin, ale pokud vim, tak jsi dostal jiz dva navody jak to spachat a
pritom se jedna o elementarni zaklad, ktery se s oblibou uci na nasuch
prohnilych strednich skolach :-)))))) Neco obdobneho by snad mel prumerny
doktor pres potrubi zvladnout, ne :-)))))
V pripade nesouslednych hodnot je vhodne zretezene porovnani ala
if then
else if then
else uf then
....
else
coz je realizovatelne velice jednoduse pomoci
cjne a, #x0, next1
jmp xx_0
next1:
cjne a, #x1, next2
jmp xx_1
next2
cjne a, #x2, next2
jmp xx_2
next1:
............................
pripadne variant pomoci JZ, JNZ a SUBB (pozor XRL neovlivmuje Z flag)
rotace a JC, JNC pripadne co Te jen napadne :))))
Nebo pro sousledne hodnoty primo
switch (x) of{
case 1:
case 2:
.....
}
coz se necha jednoduse realizovat pomoci rozskokove tabulky
rr A
rr A
mov DPTR, #tab
jmp @A+DPTR
kde
tab: je tabulka s adresami skoku
nebo muzes pouzit na prvni pohled slozitejsi, ale DPTR nevyuzivajici (zase
zabere misto na stacku)
mov A,xxx ; kterou rutinou mame pokracovat ????
anl A,#01111110B
mov B3,A
add A,#tab-$-2
movc A,@A+PC
push ACC ; Lo(Adr) a ulozime ji na vrchol STACKu
mov A,B
add A,#tab-$-3
movc A,@A+PC
push ACC ; Hi(Adr)
ret ; a skocime tam
kde
tab: je opet tabulka adres prislusnych rutin
Kdy pouzit co je jiz na Tvem zvazeni a Tvych schopnostech.
S pozdravem
MK
Další informace o konferenci Hw-list