This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

在汇编中,读写C文件中结构体 的问题!



c文件中,定义一个结构体

struct  CtrlTag

{

struct  CtrlTag

{

int32_t var1:

int32_tvar2:

.

.

.

.int32_t var512

}buck;

}l_ctrl;

在asm中 

.ref l_ctrl

MOVL XAR0, #_l_Ctrl.buck.var1 
MOVL *XAR0,ACC

。。。。。

MOVL XAR0, #_l_Ctrl.buck.var2
MOVL *XAR0,ACC

。。。。。

MOVL XAR0, #_l_Ctrl.buck.var3
MOVL *XAR0,ACC

。。。。。

MOVL XAR0, #_l_Ctrl.buck.var4
MOVL *XAR0,ACC

。。。。。

MOVL XAR0, #_l_Ctrl.buck.var5
MOVL *XAR0,ACC

问题:

我的ASM文件中,在不同的地方,要将 ACC的数据写入到结构体中的var1 ~ var5。

仿真时发现,var1 ~ var5这5个变量中,有的变量可能会出现写入错误(可能是var1,var2,var4是正确的,var3,var5是错误的)。

断点定到MOVL *XAR0,ACC,通过查看 Registers -> core Registers -> XARn ,  

发现 XARn 保存的并不是 #_l_Ctrl.buck.varN的地址!

请问,这是什么问题?

  • 为什么不直接用汇编写结构体呢 如下
    .DATA
    aligned_student STRUC 4
    m_Age DWORD ? ;不初始化
    m_Name BYTE 30 DUP(0) ;大小为30字节的字符串数组,初始化为0
    m_Score DWORD 0 ;INT型分数,初始化为0
    m_Interests BYTE "No",0 ;初始化为 "No\0"
    aligned_student ENDS
  • 好建议,谢谢!

    下次可以尝试一下。

    想确认一下。

    MOVL XAR0, #_l_Ctrl.buck.var5  :将 var5的地址放到XAR0
    MOVL *XAR0,ACC                         ;将ACC 写到var5

    这样理解没问题吧?