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