asm_book/section_3/bitfields/naive.s
2022-07-27 09:23:55 -05:00

65 lines
No EOL
1.2 KiB
ArmAsm

.global SetA
.global SetB
.global SetC
.global ClearA
.global ClearB
.global ClearC
.text
.align 2
ClearA: ldrb w1, [x0]
mov w2, 1
mvn w2, w2
and w1, w1, w2
strb w1, [x0]
ret
ClearB: ldrb w1, [x0]
mov w2, 6
mvn w2, w2
and w1, w1, w2
strb w1, [x0]
ret
ClearC: ldrb w1, [x0]
and w1, w1, 7
strb w1, [x0]
ret
SetA: ldrb w1, [x0]
mov w2, 1
mvn w2, w2
and w1, w1, w2
orr w1, w1, 1
strb w1, [x0]
ret
SetB: ldrb w3, [x0]
and w1, w1, 3 // value &= 3
lsl w1, w1, 1
mov w2, 6
mvn w2, w2
and w3, w3, w2 // B is cleared
orr w3, w3, w1
strb w3, [x0]
ret
SetC: ldrb w3, [x0]
mov w2, 0x1F
and w1, w1, w2
lsl w1, w1, 3
lsl w2, w2, 3
mvn w2, w2
and w3, w3, w2
orr w3, w3, w1
strb w3, [x0]
ret
.end