51单片机c语言与汇编的疑问

[复制链接]
2448|14
 楼主| 醉心369 发表于 2013-1-3 12:19 | 显示全部楼层 |阅读模式

左边33行到38行的C语言程序对应右边的汇编,烦请大虾门能逐句讲解一下右边的汇编吗

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2013-1-3 13:33 | 显示全部楼层
本帖最后由 ayb_ice 于 2013-1-3 13:34 编辑

这有什么好解释的,不就是一一对应吗,可能有上些优化,想要防止优化变量加volatile修饰一下即可
 楼主| 醉心369 发表于 2013-1-3 14:14 | 显示全部楼层
ayb_ice 发表于 2013-1-3 13:33
这有什么好解释的,不就是一一对应吗,可能有上些优化,想要防止优化变量加volatile修饰一下即可 ...

MOV   R5,0x06
是什么意思啊
uet_cache 发表于 2013-1-3 14:16 | 显示全部楼层
MOV是赋值语句。如果你用C语言写程序就不用考虑汇编。如果你非要搞懂汇编,可以看下单片机课本,上面一般有讲汇编语言。
ayb_ice 发表于 2013-1-3 14:24 | 显示全部楼层
醉心369 发表于 2013-1-3 14:14
MOV   R5,0x06
是什么意思啊

直接寻址嘛
0x06 = 0R6
 楼主| 醉心369 发表于 2013-1-3 15:07 | 显示全部楼层
ayb_ice 发表于 2013-1-3 14:24
直接寻址嘛
0x06 = 0R6

这句话的意思不就是把地址0x06(即R6)的内容赋给R5嘛,是不是也可以写成MOV   R5,@R6  ?

那为什么要把地址0x06(即R6)的内容赋给R5呢
ayb_ice 发表于 2013-1-3 15:40 | 显示全部楼层
醉心369 发表于 2013-1-3 15:07
这句话的意思不就是把地址0x06(即R6)的内容赋给R5嘛,是不是也可以写成MOV   R5,@R6  ?

那为什么要 ...

意思是那意思,
可是51不支持你说的那个写法,实际是没有那个寻址方式,要么用直接寻址,要么用多条语句实现,当然直接寻址效率高些。。。
 楼主| 醉心369 发表于 2013-1-3 15:43 | 显示全部楼层
ayb_ice 发表于 2013-1-3 15:40
意思是那意思,
可是51不支持你说的那个写法,实际是没有那个寻址方式,要么用直接寻址,要么用多条语句 ...

把地址0x06(即R6)的内容赋给R5,是不是想把表达式i++保存下来啊
望断云山 发表于 2013-1-4 11:28 | 显示全部楼层
51的r0-r7寄存器是可以切换的,0x06是r6,但r6就不一定是0x06
 楼主| 醉心369 发表于 2013-1-4 15:36 | 显示全部楼层
其实我想问的是这句话的意思,我个人理解:把地址0x06(即R6)的内容赋给R5,并把表达式i++保存下来啊
xuyaqi 发表于 2013-1-4 17:13 | 显示全部楼层
MOV   R5,0x06 没有把表达式i++保存下来的作用,INC R6才是i++
 楼主| 醉心369 发表于 2013-1-4 18:43 | 显示全部楼层
xuyaqi 发表于 2013-1-4 17:13
MOV   R5,0x06 没有把表达式i++保存下来的作用,INC R6才是i++

那这句话的意思到底起什么作用,如果不起作用直接去掉就oK了,我相信他存在的作用
 楼主| 醉心369 发表于 2013-1-5 14:33 | 显示全部楼层
自己顶一下
xuyaqi 发表于 2013-1-6 18:13 | 显示全部楼层
醉心369:你是怎么理解 i++ 的。
 楼主| 醉心369 发表于 2013-1-7 07:54 | 显示全部楼层
xuyaqi 发表于 2013-1-6 18:13
醉心369:你是怎么理解 i++ 的。

公式i++ 不是就等于i++后的i吗,MOV   R5,0x06 我就想弄明白这句话的意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

283

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部