LINUX.ORG.RU

Волшебный регистр r16 в ассемблере для AVR контроллеров

 ,


0

1

В большинстве программ заметил, что именно регистр r16 чаще всего используют для временного хранения чисел.

Почему именно этот регистр принято считать самым удобным, чем ему уступает, скажем, R31 регистр?

CPI	R16,1		; Сравниваем R16 с 1
BREQ	ActionA		; Переход если равно (EQual, Z=1)
			; Если не равно, то идем дальше

CPI 	R16,2		; Сравниваем R16 с 2
BREQ	ActionB		; Переход если равно 
			; Если не равно, то идем дальше

CPI	R16,13		; Сравниваем R16. т.е. R16-13
BRCS	ActionC		; Если возник перенос, значит R16 меньше 13
			; Если не возник - идем дальше
RJMP	NoAction	; Переход на выход

Просто пример. R16-R31 равнозначны.

Deleted
()

Ничем не уступает.

ymn ★★★★★
()

тараканам в голове автора этот регистр больше нравится

Harald ★★★★★
()

Почему именно этот регистр принято считать самым удобным, чем ему уступает, скажем, R31 регистр?

Понятия не имею, но можно поспекулировать.

Только регистры с r16 по r31 могут быть использованы с непосредственными аргументами. То есть сравнивать с числом регистры с r0 по r15 нельзя, поэтому в твоих примерах кода с ними код будет использовать дополнительный регистр и займёт больше места. Пары r27:r26, r29:r28 и r31:r30 используются как адресные регистры, поэтому их тоже лучше не занимать. Остаются r16—r25. Из них можно использовать любой. Если нет особой разницы, просто использовать первый. Это r16.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.