In accordance with our meta agreement, since one candidate received more votes than the others, we have a new featured language! Throughout July 2021, our Language of the Month will be:
ARM
What's a Language of the Month?
See the meta post for nominations. In short, during July, those who wish to participate should learn (at least the basics of) ARM, and use it to solve challenges. Participation is completely optional, but is anticipated to be fun!
Information about ARM
ARM is probably the most successful architecture for the digital world. From mobile phones to supercomputers, ARM is everywhere!
As of 2013 more than 10 billion ARMs were shipped, as compared to 0.3 billion 80x86s. -- ISSBF
- ARM has a much better design than e.g. x86. It involves a lot less concepts, making it more beginner-friendly.
- ARM has a very low learning curve. Due to its RISC nature, ARM has less than 100 highly generalized assembler directives that perform tasks in a very compact way.
- To some extent, it makes ARM easier to learn than its competitors.
- The RISC architecture also makes programs faster to execute, since it takes less time on decoding the instruction opcodes.
- The ARM instruction set is very compact.
- Most instructions allow for conditional execution. This saves instruction cycles since no conditional jumps are necessary around conditional blocks.
- ARM also has the barrel shifter (which means that you can perform bitshifts to some value before using it).
- This is a comparison copied verbatim from the SizeCoding wiki:
The following shows an example:
ARM (8 Bytes)
cmp r0,r1 addhi r0,r2,r3,lsr#4
x86 (11 Bytes)
cmp eax,ebx jna skip mov eax,edx shr eax,4 add eax,ecx skip:
Bounty
hyper-neutrino will be providing a 50-reputation bounty for any user's first answer in ARM during this month. Tips and ARM-related challenges (that are actually connected to ARM's core mechanisms and don't just mention them or implement some one feature) may be rewarded a bounty at hyper-neutrino's discretion.
Links
- ARM official website
- A tutorial website
- Online simulator
- ARM calling convention
- Syscall reference (subtract
0x900000
fromr7
) - Thumb instruction set reference
- Hello, world! in Thumb (includes a full program answer example and running instructions)
- Sum square difference in Thumb (includes how to write a function and test cases for it)