5 Bestimmungsgemäße Verwendung der Register

Ein weiterer Ansatz, das Problem des unbeabsichtigten Überschreibens bestehender Registerinhalte (Seiteneffekte) in den Griff zu bekommen, ohne die Register ständig zu sichern und wieder herstellen zu müssen, ist das Festlegen definierter Register auf bestimmte Verwendungen.

In diesem Projekt wurden alle 32 Register mit symbolischen Namen versehen, um damit eine bestimmte Verwendung zu bewirken und zu dokumentieren, weiters wurden mehrere Register mit den vorhin beschriebenen High/Low Prefixen versehen, um sie als 16-Bit Operanden für die 16-Bit Makrobibliothek verwenden zu können.

Beispiele:
	.def sched_temp       = r12 ; sheduler temporary usage 
	.def reserved_reg     = r13 ; reserved (PUSHF, POPF macros) 
	;...
	; ----------------------------- 
	; upper temporary immeadiate registers (usually not saved) 
	; should be used only inside of functions or 'visible' area 
	.def temp1            = r16 ; usuallay subroutine call input 
	.def temp2            = r17 ; usuallay subroutine call input
	; ----------------------------- 
	;;; common used return values 
	.def return1          = r18 ; reserved return value for calls 
	.def return2          = r19 ; reserved return value for calls 
	; ----------------------------- 
	;;; i/o definitions 
	.def iic_receivebyte  = r20 ; i2c receive buffer 
	.def iic_sendbyte     = r21 ; i2c send buffer 
	; ----------------------------- 
	;;; registers for word arithmetics
	.def REG_AL           = r22 ; operand low  byte for 16-bit operations
	.def REG_AH           = r23 ; operand high byte for 16-bit operations  
Mit Konventionen dieser Art wird die Verwendung der Register vergleichbar mit der Verwendung von Speicher-Variablen, jedoch werden die Operationen wesentlich schneller ausgeführt (auf Grund der ATmel RISC-Prozessorarchitektur in einem Prozessortakt) da keine Speicheradressierungen und Transfers benötigt werden.

Alle Register-Definitionen dieses Projektes sind in der Datei inc/reg_defs.inc definiert.

gerhard.reithofer@tech-edv.co.at