1) Все обращения к стеку выровнены по слову. Должно ли это быть DWORD вместо WORD, чтобы компенсировать 32 бит? Если нет, то почему Word или 16 бит, а не 32 бита для всех обращений к стеку?
Размер слова зависит от архитектуры процессора. На 32-битном Cortex-M слово состоит из 32 бит или 4 байта.
2) Почему два младших разряда SP всегда должны быть равны нулю?
Это другой способ сказать, что стек всегда должен быть выровнен по границе 4 байта или указатель стека должен всегда содержать адрес, кратный четырем байтам.
Например, двоичный адрес 0000 равен 0 десятичному. Три следующих адреса, 0001 (1 десятичный), 0010, (2 десятичный) и 0011 (3 десятичный) двоичные адреса имеют свои младшие значащие биты, установленные в 01, 10 и 11. 0100 (4 десятичных) - это первый адрес, следующий за 0000 с двумя младшими значащими битами, установленными в 0: это то же самое, что сказать, что это кратное 4 байта или, если вы предпочитаете, кратное размеру слова ЦП в байтах.