作者:跌蕩起伏的2012_900 | 来源:互联网 | 2023-09-18 19:54
APCS(ARM procedure call standard)ARM过程调用标准
对 PC(program counter)=当前指令+8 的一个解释。
对led_on.dis反编译文件的分析:
led1对应的是GPF4,配置GPF4为输出引脚,只需要将0x100写入到GPFCON[0x56000050],然后点亮led1只需要将0x0写入到GPFDAT[0x56000054]。
可以通过直接修改led_bin,让led2点亮。
查JZ2440_V3的电路图可以知道,led2对应的引脚是GPF5,配置GPF5为输出引脚GPF5[11:10]=ob01=0x400。
那么只需要根据MOV指令的机器码,把0x100的对应数值修改成0x400的数值,烧入bin文件即可点亮led2。
MOV指令的机器码:
从MOV指令的机器码中可以知道,15--12表示Rd的地址,那么R0就表示成0000,11--0就是12位移动操作数(立即数)。
立即数公式=immed_8循环右移(2×rotate)位
0x100的12位立即数为:
由图可知,11--08为高四位rotate,把1100转换成十进制=8+4=12。
07--00为低八位immed_8=1。
根据立即数公式=immed_8循环右移(2×rotate)位
0x100=1循环右移24位
同理怎么把0x400用立即数表示呢??????
计算得到0x400的12位立即数=101100000001
所以0x400的MOV指令的机器码为0xe3a00b01
也可以直接去led_on.S的文件里,把0x100改写成0x400后,上传到服务器里,重新编译出led2_on.bin文件,这样做比较效率。
可以不用去了解MOV指令的机器码。
2018.4.22温故而知新,可以为师矣。