Ensuring 16-bit THUMB Instruction Encoding for Code Execution from SRAM on STM32F103
I'm working on a project where I want to execute code from internal SRAM on an STM32F103 as an exercise. My goal is to write some THUMB assembly by hand, assemble it using
The assembly code I wrote is a simple loop:
Here are the commands I used to assemble and disassemble the code:
The disassembler output is as follows:
My understanding is that THUMB instructions should be 16 bits long, but the disassembler is showing some instructions (like
Why are some of my instructions encoded as 32-bit THUMB-2 instructions, and how can I ensure that the machine code is 16-bit THUMB-only instructions for loading into SRAM?
arm-none-eabi-as, load the machine code into SRAM with OpenOCD's mwh command, set the PC to the beginning of SRAM using reg pc 0x20000000, and step through the instructions.The assembly code I wrote is a simple loop:
Here are the commands I used to assemble and disassemble the code:
The disassembler output is as follows:
My understanding is that THUMB instructions should be 16 bits long, but the disassembler is showing some instructions (like
mov.w r0, #40 as f04f 0028) that are 32 bits. I was expecting 16-bit instructions since I am working with THUMB.Why are some of my instructions encoded as 32-bit THUMB-2 instructions, and how can I ensure that the machine code is 16-bit THUMB-only instructions for loading into SRAM?