Мне интересно, что ассемблер (газ) позволяет вам пытаться перемещаться с более чем 8 значащими битами без ошибок ... он просто кодирует mvn для вас.
d6008030 <TESTFUN>:
d6008030: e3e00000 mvn r0, #0
d6008034: e3c000bf bic r0, r0, #191 ; 0xbf
d6008038: e12fff1e bx lr
Я получаю 0xFFFFFF40, которыйявляется ожидаемым ответом.
Если вы хотите установить бит 7, то
orr r0,r0,#0x80 ;@ (corrected from 0x70)
Или вы хотели установить бит 6
orr r0,r0,#0x40
, если выхотел удалить все биты, кроме бита 6, оставив только установленный бит 6.
and r0,r0,#0x40
Если вы хотите оставить все, кроме бита 6, установленным (очистить бит 6) (bic = сбросить бит)
bic r0,r0,#0x40
Или вы пытались это сделать
mov r0,#0xFFFFFFFF ;@ this is an interesting shortcut
mov r1,#0xFFFFFFBF ;@ might as well keep using it
bic r0,r0,r1
, что дает 0x00000040, что совпадает с
mov r0,#0xFFFFFFFF ;@ this is an interesting shortcut
and r0,r0,#0x40
, за исключением того, что последний использует меньше инструкций и регистров