纯碎是为了学习,对汇编兴趣所致。
有请汇编高手指点学习。
目前搜集了一些资料:
GX3001--》CK510 等资料,资料缺失匮乏。
自己编写了简单的反汇编程序,可以对二进制原代码 反汇编,所得汇编程序,依据指令表可以观察程序走向!
0x00000000-0x00000080 放置异常向量,80之后就是一些指令程序了,向量为4字节;指令是16位两字节;
简单分析之:上电启动的程序走向,有所明白,深入学习还有很长的路子。目的是想看看、学习ARm c-core之单片机的原理。
此开发(自诩为开发吧、原始级反汇编开发)程序,低级的很,两字节一单元,就开始工作了,大部分翻译对了,32位的字分成两字节翻译为两个指令了,自己明白就行,要分清是数据还是指令,很麻烦。
为了寻找此指令的含义费了一星期光景,程序从这起步!!!
0x0080 0x7f46 > jsri 0x46 //间接跳转到子程序--间接寻址
下一步跳到:
0x0084 0x11f7 > mfcr CR31<-R7 //读控制寄存器
摘录一段反汇编程序:
0x0000 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x0002 0x0080 > decf R0 //条件假减1
0x0004 0x3001 > bclri 0x0,R1 //位清除
0x0006 0x55aa > *** 0x5aa //
0x0008 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x000a 0x00d4 > jsr R4 //跳转到子程序--寄存器寻址
0x000c 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x000e 0x00da > jsr R10 //跳转到子程序--寄存器寻址
0x0010 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x0012 0x00e0 > ff1 R0 //找寄存器中第一个1位置
0x0014 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x0016 0x00e6 > ff1 R6 //找寄存器中第一个1位置
0x0018 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x001a 0x00ec > ff1 R12 //找寄存器中第一个1位置
0x001c 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x001e 0x00f2 > brev R2 //位前后反转
0x0020 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x0022 0x00f8 > brev R8 //位前后反转
0x0024 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x0026 0x00fe > brev R14 //位前后反转
0x0028 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x002a 0x0104 > xtrb3 R4 //提取寄存器RX中的字节3 到RY,高位0扩展
0x002c 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x002e 0x013f > xtrb0 R15 //提取寄存器RX中的字节0 到RY,高位0扩展
0x0030 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x0032 0x0140 > zextb R0 //字节高位以0扩展
0x0034 0x0000 > bkpt //断点
0x0036 0x0000 > bkpt //断点
0x0038 0x0000 > bkpt //断点
0x003a 0x0000 > bkpt //断点
0x003c 0x0000 > bkpt //断点
0x003e 0x0000 > bkpt //断点
0x0040 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x0042 0x0146 > zextb R6 //字节高位以0扩展
0x0044 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x0046 0x014c > zextb R12 //字节高位以0扩展
0x0048 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x004a 0x0152 > sextb R2 //字节作符号位扩展
0x004c 0x1000 > mfcr CR0<-R0 //读控制寄存器
0x004e 0x0158 > sextb R8 //字节作符号位扩展
0x0050 0x0000 > bkpt //断点
0x0052 0x0000 > bkpt //断点
0x0054 0x0000 > bkpt //断点
0x0056 0x0000 > bkpt //断点
0x0058 0x0000 > bkpt //断点
0x005a 0x0000 > bkpt //断点
0x005c 0x0000 > bkpt //断点
0x005e 0x0000 > bkpt //断点
0x0060 0x0000 > bkpt //断点
0x0062 0x0000 > bkpt //断点
0x0064 0x0000 > bkpt //断点
0x0066 0x0000 > bkpt //断点
0x0068 0x0000 > bkpt //断点
0x006a 0x0000 > bkpt //断点
0x006c 0x0000 > bkpt //断点
0x006e 0x0000 > bkpt //断点
0x0070 0x0000 > bkpt //断点
0x0072 0x0000 > bkpt //断点
0x0074 0x0000 > bkpt //断点
0x0076 0x0000 > bkpt //断点
0x0078 0x0000 > bkpt //断点
0x007a 0x0000 > bkpt //断点
0x007c 0x0000 > bkpt //断点
0x007e 0x0000 > bkpt //断点
0x0080 0x7f46 > jsri 0x46 //间接跳转到子程序--间接寻址
0x0082 0x0000 > bkpt //断点
0x0084 0x11f7 > mfcr CR31<-R7 //读控制寄存器
0x0086 0x11f0 > mfcr CR31<-R0 //读控制寄存器
0x0088 0x7345 > lrw RZ3,0x45 //相对寻址的存储器数到寄存器
0x008a 0x1813 > mtcr CR1<-R3 //写控制寄存器
0x008c 0x7345 > lrw RZ3,0x45 //相对寻址的存储器数到寄存器
0x008e 0x1230 > mov R3,R0 //寄存器之间传送
0x0090 0xf8b3 > bsr 0xb3 // 跳到子例程--11位位移量寻址
0x0092 0xfae8 > bsr 0x2e8 // 跳到子例程--11位位移量寻址
0x0094 0xfa41 > bsr 0x241 // 跳到子例程--11位位移量寻址
0x0096 0xf98e > bsr 0x18e // 跳到子例程--11位位移量寻址
0x0098 0x1114 > mfcr CR17<-R4 //读控制寄存器
0x009a 0x3404 > bseti 0x0,R4 //按立即数值设置寄存器某位
0x009c 0x3414 > bseti 0x1,R4 //按立即数值设置寄存器某位
0x009e 0x3444 > bseti 0x4,R4 //按立即数值设置寄存器某位
0x00a0 0x1914 > mtcr CR17<-R4 //写控制寄存器