Итак, в основном я декомпилировал неоптимизированную простую программу и увидел, что она запускается через gcrt1.S, и погрузился в язык ассемблера и попытался понять, что именно он делает. Вот мой код и мое предположение о том, что он делает
00000034 CLR R1 Clear Register
00000035 OUT 0x3F,R1 Out to I/O location
00000036 SER R28 Set Register
00000037 LDI R29,0x08 Load immediate
00000038 OUT 0x3E,R29 Out to I/O location
00000039 OUT 0x3D,R28 Out to I/O location
0000003A CALL 0x00000040 Call subroutine
0000003C JMP 0x00000050 Jump
0000003E JMP 0x00000000 Jump
Clear R1
Clear stratus register
Set R28 1111 1111
Here is where my questions start:
Load R29 from 0x08 (PORTC ?)
OUT to SPH <-R29
OUT to SPL <-R28
Call Main
У меня есть такое понимание, почему он загружает байт из регистра PORT C, так как по умолчанию будет 0x00 в любом случае
Микроконтроллер atmega328p ссылка на таблицу данных