在看LDR和STR指令时,有下面一段程序
GPIO-BASE EQU 0xe0028000
LDR R0,=GPIO-BASE
LDR R1,=0x00ffff00
STR R1,[R0,#0x0c]
我不是很明白,第一句是把GPIO-BASE的地址装载到R0寄存器中,所以在第三句中R0的值加上#0x0c是GPIO-BASE的地址加了#0x0c,并不是GPIO-BASE的值0xe0028000加上了#0x0c,所以R1的值没有存储到0xe002800c中去,而是存到变量GPIO-BASE的地址向后偏移0x0c的地址中去了。所以无法实现对 地址0xe002800c处寄存器的有效控制。
说白了GPIO-BASE就是一个指针,程序中是对指针的地址也就是指针的指针进行了操作,而不是对指针的值进行操作,所以无法改变指针所指向的寄存器。
但书上的历程是这么写的,是不是我理解错了,希望大家帮助解答一下!
共5条
1/1 1 跳转至页
你在看汇编的时候,建议不要考虑指针的概念。大概解释一下你贴的程序:
1》 GPIO-BASE EQU 0xe0028000
2》 LDR R0,=GPIO-BASE
3》 LDR R1,=0x00ffff00
4》 STR R1,[R0,#0x0c]
1》定义GPIO-BASE的值为0XE0028000
2》将GPIO-BASE的值装载到R0,执行完毕后,R0的值为0XE0028000
3》将R1的值置为0X00FFFF00,执行完毕后,R0的值为0X00FFFF00
4》将R1的值存储到R0+0x0C的地方去,也就是将0X00FFFF00存储到(0XE0028000+0X0C)去。
1》 GPIO-BASE EQU 0xe0028000
2》 LDR R0,=GPIO-BASE
3》 LDR R1,=0x00ffff00
4》 STR R1,[R0,#0x0c]
1》定义GPIO-BASE的值为0XE0028000
2》将GPIO-BASE的值装载到R0,执行完毕后,R0的值为0XE0028000
3》将R1的值置为0X00FFFF00,执行完毕后,R0的值为0X00FFFF00
4》将R1的值存储到R0+0x0C的地方去,也就是将0X00FFFF00存储到(0XE0028000+0X0C)去。
共5条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 告别手动建模:我让AI用FreeCAD画了个开发板外壳被打赏¥30元 | |
| 【瑞萨RA8D1测评】总结收官——从IMU动作识别到LVGL桌宠被打赏¥33元 | |
| 【瑞萨BLE/WIFI模块测评】MPU6050双链路对比被打赏¥30元 | |
| 【瑞萨BLE/WIFI模块测评】DA14531被打赏¥28元 | |
| 【瑞萨BLE/WI-FI模块测评】DA16200被打赏¥28元 | |
| 【瑞萨BLE/WIFI模块测评】环境搭建被打赏¥32元 | |
| 【瑞萨RA8D1测评】LVGL显示动画被打赏¥30元 | |
| 【瑞萨RA8D1测评】IMU动作识别的数据采集与模型训练被打赏¥33元 | |
| 【S32K3学习整理】时钟系统 ClockOut 功能被打赏¥28元 | |
| 【S32K3学习整理】以太网LoopBack模式功能验证被打赏¥26元 | |
我要赚赏金
