AVR gcrt1.S奇怪的呼叫

问题描述 投票:0回答:1

因此,基本上,我已经对未优化的简单程序进行了反编译,并看到它运行在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

我的疑惑是为什么它从PORTC寄存器加载字节,因为无论如何默认值是0x00

微控制器为atmega328p link to a datasheet

avr avr-gcc
1个回答
1
投票

从0x08加载R29(PORTC吗?]

指令为LDI R29,0x08,它将8加载到R29中。 LDI是“立即加载以进行注册”;它不会从内存中读取数据,请参见所用ATmega328手册中的“ 31.指令集摘要”部分。该代码正在从符号Y初始化帧指针__stack,请参见gcrt1.S中的启动代码。

© www.soinside.com 2019 - 2024. All rights reserved.