ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
3 мая
22738 Топик полностью
ShiphT (24.02.2005 10:34, просмотров: 1) ответил ttsltd на Вопрос по АРМУ
Приведу маааленький пример. Из работающего кода. 
main    ldr     R0, =0xE002C000		;PINSEL0
	ldr	R1, =0x00020000
	str	R1, [R0]
	ldr     R0, =0xE0028008		;IODIR
	ldr	R1, =0xFFFFFFFF
	str	R1, [R0]
В общем смысл такой, У АРМА все команды длиной 32 бита, посему нельзя в опкод вставить константу в 32 бита (иначе для опкода места не хватит), но благодаря неплохо развитой адресации можно положить недалеко в память эту константу, например на расстоянии 0x100 от команды, и выполнить ldr R0, [PC+0x100], Но обычно лениво считать смещение, писать лишний код, поэтому асм имеет макрокоманду (типа равно - "=") которая находит местечко, считает все сдвиги, смещения и т.д. и заменяет на вышеназванную команду. Хотя, в принципе, у АРМА есть команды непосредственной загрузки регистра, но они загружают 8-ми битное значение сдвинутое на нужное кол-во единиц влево. Т.е. Числа типа 0x0016C000, 0x0FF00000? и т.д. можно загрузить ей, а с числами типа 0xE0002800 уже будет облом.