赞助论坛
  • 3899阅读
  • 0回复

敬请汇编高手共商国芯之原码 [复制链接]

楼层直达
发帖
17
精华
0
金币
43
威望
0
贡献
0
好评
2
注册
2010-03-21
楼主    chongcao 发表于: 2012-03-26 08:51:37 
纯碎是为了学习,对汇编兴趣所致。
有请汇编高手指点学习。
目前搜集了一些资料:
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   //写控制寄存器
本帖最近评分记录: 1 条评分