Ich machs immer so:
Code:
uint16_t var = 6518;
asm ("" : "+r" (var));
Wobei ich allerdings nicht denke, dass eine 8Bit Variable auf 2 Register verteilt wird. Das würde mMn keinen Sinn machen. (Bei Computer-Prozessoren kann eher das umgekehrte auftreten, also das z.b 4 8Bit Variablen auf 4 32Bit Register aufgeteilt werden, da es schneller ist, als ein 32Bit Register mit 4 8Bit Variablen zu verwalten)

Das einzige was an deinem Code "optimiert" werden könnte ist statt system_timer++; ein Pre-Increment zu machen, also: ++system_timer;
Ich nehme aber mal an das der Compiler das ohnehin tut (ohne es getestet zu haben). Dazu müsstest du dir den Assemblecode ansehen

LG