打印

哪位汇编高手帮我解释下。谢谢

[复制链接]
3194|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a369000753|  楼主 | 2013-4-3 17:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    20:         RCC->APB2ENR|=1<<2;    //使能PORTA时钟              
0x08000564 4816      LDR      r0,[pc,#88]  ; @0x080005C0   ;PC是什么呢?
0x08000566 6980      LDR      r0,[r0,#0x18]
0x08000568 F0400004  ORR      r0,r0,#0x04
0x0800056C 4914      LDR      r1,[pc,#80]  ; @0x080005C0
0x0800056E 6188      STR      r0,[r1,#0x18]
    21:         RCC->APB2ENR|=1<<5;    //使能PORTD时钟   
    22:                  
0x08000570 4608      MOV      r0,r1   
0x08000572 6980      LDR      r0,[r0,#0x18]
0x08000574 F0400020  ORR      r0,r0,#0x20   ;为什么这里是这样呢? 不是 ORR R0 ,R0,#0A
0x08000578 6188      STR      r0,[r1,#0x18]

哪位高手帮忙全部翻译下。谢谢
沙发
lirunze| | 2013-4-3 19:16 | 只看该作者
反汇编出来的啊!

使用特权

评论回复
板凳
LDTEST| | 2013-4-4 00:12 | 只看该作者
   20:         RCC->APB2ENR|=1<<2;    //使能PORTA时钟              
0x08000564 4816      LDR      r0,[pc,#88]  ; @0x080005C0   ;PC是什么呢?
0x08000566 6980      LDR      r0,[r0,#0x18]
读取 寄存器 RCC->APB2ENR 的值
0x08000568 F0400004  ORR      r0,r0,#0x04
运算  寄存器值|=0x04

0x0800056C 4914      LDR      r1,[pc,#80]  ; @0x080005C0
0x0800056E 6188      STR      r0,[r1,#0x18]
存入新值
    21:         RCC->APB2ENR|=1<<5;    //使能PORTD时钟   
    22:                  
0x08000570 4608      MOV      r0,r1   
0x08000572 6980      LDR      r0,[r0,#0x18]
读取 寄存器 RCC->APB2ENR 的值
0x08000574 F0400020  ORR      r0,r0,#0x20   ;为什么这里是这样呢? 不是 ORR R0 ,R0,#0A
运算  寄存器值|=0x20 , 1<<5 = 0x20  
0x08000578 6188      STR      r0,[r1,#0x18]
存入新值


整个过程就是读寄存器值 ,运算,写入 的过程,貌似楼主没有开优化

使用特权

评论回复
地板
hwwss| | 2013-4-4 08:31 | 只看该作者
这是那款单片机

使用特权

评论回复
5
a369000753|  楼主 | 2013-4-4 10:12 | 只看该作者
hwwss 发表于 2013-4-4 08:31
这是那款单片机

STM32

使用特权

评论回复
6
a369000753|  楼主 | 2013-4-4 10:13 | 只看该作者
LDTEST 发表于 2013-4-4 00:12
20:         RCC->APB2ENR|=1APB2ENR|=1

1 << 5 =0X20 不是等于 10 嘛?

使用特权

评论回复
7
LDTEST| | 2013-4-4 10:20 | 只看该作者
a369000753 发表于 2013-4-4 10:13
1

……………………………………  
1<<n   就相当于 在后面添 n个0

使用特权

评论回复
8
a369000753|  楼主 | 2013-4-4 10:40 | 只看该作者
LDTEST 发表于 2013-4-4 10:20
……………………………………  
1

大湿。。。你说说的优化是怎么一回事。。请指点下、。、。。。。

使用特权

评论回复
9
a369000753|  楼主 | 2013-4-4 10:40 | 只看该作者
LDTEST 发表于 2013-4-4 10:20
……………………………………  
1

大湿。。。你说说的优化是怎么一回事。。请指点下、。、。。。。

使用特权

评论回复
10
LDTEST| | 2013-4-4 11:02 | 只看该作者
a369000753 发表于 2013-4-4 10:40
大湿。。。你说说的优化是怎么一回事。。请指点下、。、。。。。

………………
优化什么的不用管了

使用特权

评论回复
11
a369000753|  楼主 | 2013-4-4 11:17 | 只看该作者
LDTEST 发表于 2013-4-4 11:02
………………
优化什么的不用管了

   20:         RCC->APB2ENR|=1<<2;    //使能PORTA时钟              
0x08000564 4816      LDR      r0,[pc,#88]  ; @0x080005C0   ;PC是什么呢?
0x08000566 6980      LDR      r0,[r0,#0x18]
读取 寄存器 RCC->APB2ENR 的值

我看了RCC的地址是是0x4000000+0x2000+0x1000 为什么这里这样就可以操作这个地址的值呢?我很不明白。。求解答

使用特权

评论回复
12
LDTEST| | 2013-4-4 11:27 | 只看该作者
a369000753 发表于 2013-4-4 11:17
20:         RCC->APB2ENR|=1

PC 就是 R15
因为 值就存在那个地址  所以那么操作

楼主需要加强基础知识………………

使用特权

评论回复
13
a369000753|  楼主 | 2013-4-4 12:22 | 只看该作者
LDTEST 发表于 2013-4-4 11:27
PC 就是 R15
因为 值就存在那个地址  所以那么操作

谢谢 大湿指点、、、本人对汇编不熟悉。。。也不懂。所以才提问。。。

使用特权

评论回复
14
cjhk| | 2013-4-4 18:34 | 只看该作者
汇编这一块不是很了解   楼主   对不住   只能帮你顶一个   呵呵   

使用特权

评论回复
15
cjhk| | 2013-4-4 18:34 | 只看该作者
希望有高手能够解决你的问题   呼唤一下版主   他应该可以解决这个问题   呵呵

使用特权

评论回复
16
a369000753|  楼主 | 2013-4-7 11:26 | 只看该作者
LDTEST 发表于 2013-4-4 11:02
………………
优化什么的不用管了

大师。。我现在想请教你一些问题。。。假如上面的这些代码没有C语言,,。全部给的是汇编。那我怎么知道它操作的是什么呢、

使用特权

评论回复
17
LDTEST| | 2013-4-7 13:35 | 只看该作者
a369000753 发表于 2013-4-7 11:26
大师。。我现在想请教你一些问题。。。假如上面的这些代码没有C语言,,。全部给的是汇编。那我怎么知道 ...

不要总是大师  大湿……………………

纯汇编的话,就看个人素养了,熟能生巧,自然会明白~

使用特权

评论回复
18
a369000753|  楼主 | 2013-4-7 13:40 | 只看该作者
LDTEST 发表于 2013-4-7 13:35
不要总是大师  大湿……………………

纯汇编的话,就看个人素养了,熟能生巧,自然会明白~ ...

就是我很想知道。怎么知道它操作的是那个存储器地址。。。

使用特权

评论回复
19
LDTEST| | 2013-4-7 13:49 | 只看该作者
a369000753 发表于 2013-4-7 13:40
就是我很想知道。怎么知道它操作的是那个存储器地址。。。

查官方的 reference manul……

使用特权

评论回复
20
hawksabre| | 2013-4-7 18:07 | 只看该作者
汇编这一块还真的不能搞定  呵呵   有难度  呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

39

帖子

0

粉丝