We use some essential cookies to make our website work.

We use optional cookies, as detailed in our cookie policy, to remember your settings and understand how you use our website.

4 posts • Page 1 of 1
haruharu
Posts: 6
Joined: Thu Apr 24, 2025 3:52 am

[SOLVED] ADC - Carry is being weird. Am I doing something wrong?

Sat Jun 14, 2025 12:12 pm

I am learning assembly and tried below code and I'm confused because ADC keeps adding 1. Am I completely misunderstanding on this? :(

Code: Select all

.section .text
.thumb_func
_start:
 movs r0, #0 
 movs r1, #0 
 adcs r0, r1 @ 1 instead of 0
 movs r0, #0xFFFFFFFF
 movs r1, #1 
 adcs r0, r1 @ 0 instead of 1
 nop
Last edited by haruharu on Sat Jun 14, 2025 5:29 pm, edited 1 time in total.

dp11
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 1694
Joined: Thu Dec 29, 2011 5:46 pm

Re: ADC - Carry is being weird. Am I doing something wrong?

Sat Jun 14, 2025 12:31 pm

What was the state of the carry flag before your code runs?

MikeDB
Posts: 2862
Joined: Sun Oct 12, 2014 8:27 am

Re: ADC - Carry is being weird. Am I doing something wrong?

Sat Jun 14, 2025 12:36 pm

Always interested in innovative audio startups needing help and investment. Look for InPoSe Ltd or Future Horizons on LinkedIn to find me (same avatar photograph)

haruharu
Posts: 6
Joined: Thu Apr 24, 2025 3:52 am

Re: ADC - Carry is being weird. Am I doing something wrong?

Sat Jun 14, 2025 5:26 pm

Ah thanks! I now understand the behavior of carry bit in xpsr. I somehow imagined carry bit would be updated after every instruction which now I see how silly that thought was :D Now things are appearing as expected.

Code: Select all

.section .text
.thumb_func
_start:
 movs r0, #0
 movs r0, #1
 cmp r0, r1 @ This clears carry bit in xpsr.
 mov r0, #0 @ r0 = 0
 mov r1, #0 @ r1 = 0
 adc r0, r1 @ r0 = r0 + r1 + carry(0) = 0
 movs r0, #0xFFFFFFFF @ r0 = max
 movs r1, #1 @ r1 = 1
 adds r0, r1 @ Overflowed, r0 becomes 0 and carry bit is set.
 adc r0, r0 @ r0 = r0 + r0 + carry(1) = 1
 
 nop

4 posts • Page 1 of 1

Return to "Bare metal, Assembly language"

AltStyle によって変換されたページ (->オリジナル) /