Jsou tyto '51 rutiny identicke ?
Jan Waclawek
konfera@efton.sk
Sobota Říjen 4 09:49:00 CEST 2008
Funkciou su rovnake, ale moze to byt priprava na moznost realokacie docasnych premennych v r6/r7 do ineho paru registrov. V povodnom zdrojaku mohli byt pouzite symbolicke mena pre r6/r7, napr.
OffsetLo EQU r6
OffsetHi EQU r7
..
mov OffsetLo,#LOW(someoffset)
mov OffsetHi,#HIGH(someoffset)
call CalculateEffectiveOffset
..
CalculateEffectiveOffset:
mov a, OffsetLo
add a, dpl
mov dpl, a
atd.
V takomto pripade sa v ino kontexte moze dat tomuto registrovemu paru zase ine symbolicke meno a potom ma vyznam tu rutinu mat napisanu znova s tym inym symbolickym menom, aby sa v pripade potreby dal pouzit iny par registrov v celej sustave rutin, jednoducho prepisanim tych dvoh EQU.
Neprekvapilo by ma tiez, keby sa jedna z tych rutin volala v kontexte, kde je prepnuta ina nez defaultna registrova banka. Ony tie rutiny su stale rovnocenne, ale menej informovany programator to trebars nechapal a bal sa ju znova pouzit.
wek
wek
-----Original Message-----
Zdravim,
mam tu na sobotu zajimavou otazku. Delam reverzni inzenyring jednoho stareho
x51 software a narazil jsem tam na dvojici podprogramu tesne za sebou:
ADDW_DPTR_R67:
mov a,r7
add a,dpl
mov dpl,a
mov a,r6
adc a,dph
mov dph,a
ret
ADDW_DPTR_R67_2:
mov a,dpl
add a,r7
mov dpl,a
mov a,dph
adc a,r6
mov dph,a
ret
Dle mne jsou oba podprogramy naprosto jasne a hlavne zcela funkcne identicke.
Ty nazvy jsem vymyslel ja. Otazkou tedy je, proc tam jsou takhle hezky za
sebou ? Krizove odkazy ukazuji, ze oba jsou volany, jeden ale asi jen sestkrat
a druhy v radu desitek volani. Nechce se mi verit, ze by programator byl
natolik ozraly, ze by toto vedome udelal, tak v tom hledam nejaky vyssi
zamer, ktery mi unika.
Další informace o konferenci Hw-list