打印

刚学单片机问大家一个弱智的问题

[复制链接]
5429|40
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
tianheyun|  楼主 | 2011-4-3 23:46 | 只看该作者
刚学汇编真的很费力,

使用特权

评论回复
板凳
tianheyun|  楼主 | 2011-4-3 23:56 | 只看该作者
这个问题很难解决吗:o

使用特权

评论回复
地板
aihe| | 2011-4-4 01:00 | 只看该作者
你每次买东西从银行取钱出来直接交商店不用放兜里?

使用特权

评论回复
5
李冬发| | 2011-4-4 01:14 | 只看该作者
这个问题,不能用LS的这个比喻。
应该是:你不用mov,MCU怎么知道你的这个立即数是要送到哪的?!

使用特权

评论回复
6
原野之狼| | 2011-4-4 01:25 | 只看该作者
不用MOV的话这个立即数还在ROM里
MOV到RAM里以用于后续的操作

使用特权

评论回复
7
linbei1988| | 2011-4-4 08:36 | 只看该作者
mov是访问片内数据存储器(ram)用的,mov a,#12h  而这条指令在程序存储器内(rom),这就奇怪了,立即数在rom内不用通过ram直接可以读rom里的数据放到cpu的acc内。那为什么要用mov呢?不知道大家明不明白我的意思 ...
tianheyun 发表于 2011-4-3 23:44

楼主的问题应该是搞不清ROM和RAM的区别而已...

使用特权

评论回复
8
tianheyun|  楼主 | 2011-4-4 10:33 | 只看该作者
我的意思是mov是访问ram用的 立即数在rom里,为什么要用mov而不是movc?mov直接就到acc里了,根本不通过ram.。

使用特权

评论回复
9
tianheyun|  楼主 | 2011-4-4 10:33 | 只看该作者
4# aihe
你再看看我的意思,

使用特权

评论回复
10
tianheyun|  楼主 | 2011-4-4 10:35 | 只看该作者
5# 李冬发 我是问为什么用mov而不是movc

使用特权

评论回复
11
tianheyun|  楼主 | 2011-4-4 10:43 | 只看该作者
7# linbei1988 ,我上面的rom和ram写错了吗,帮我看看我哪一点搞错了?谢谢啊,新手确实有很多疑问.

使用特权

评论回复
12
yirongfu| | 2011-4-4 11:13 | 只看该作者
本帖最后由 yirongfu 于 2011-4-4 11:18 编辑

“mov是访问片内数据存储器(ram)用的”这个论断不对吧?!


51单片机有多种寻址方式,相应地MOV也有多条指令。MOVC最方便的一个应用是查表,你也可以用MOVC来实现“mov a,#12”,这时候数据表就一个数据#12。
汇编并不难,看你怎么学,我们只是应用,不是搞研究,一开始学没必要去研究指令的机理,只要懂得格式和怎么用就行了,而且最最关键的是,多写代码多看例程,发扬一直去模仿,超越不强求的精神,慢慢地你就会对指令系统和系统架构有更新的认识了。

使用特权

评论回复
13
linbei1988| | 2011-4-4 11:14 | 只看该作者
11# tianheyun
立即数在ROM里?你从哪里看出,还是你自己定义了?

使用特权

评论回复
14
tianheyun|  楼主 | 2011-4-4 11:26 | 只看该作者
13# linbei1988 ,写的源代码通过编译成目的代码就是存放在rom里,我什么是自己定义的?

使用特权

评论回复
15
linbei1988| | 2011-4-4 11:32 | 只看该作者
13# linbei1988  ,写的源代码通过编译成目的代码就是存放在rom里,我什么是自己定义的?
tianheyun 发表于 2011-4-4 11:26

所以..这里要你搞清楚的是:放在ROM里的是代码,立即数十立即数,代码是代码...你想把代码直接放在累加器吗?

使用特权

评论回复
16
tianheyun1| | 2011-4-4 11:36 | 只看该作者
12# yirongfu 谢谢啊,这就是我问的问题呵呵呵

使用特权

评论回复
17
tianheyun1| | 2011-4-4 11:38 | 只看该作者
15# linbei1988 还是谢谢你,12楼是我的疑问

使用特权

评论回复
18
yirongfu| | 2011-4-4 11:40 | 只看该作者
本帖最后由 yirongfu 于 2011-4-4 12:21 编辑

唉。。。还是要好好学习汇编和机器码呀

mov a,#12的#12是固化到代码中放ROM里头的,翻译成机器码是74 0C

使用特权

评论回复
19
刘前辈| | 2011-4-4 11:46 | 只看该作者
本帖最后由 刘前辈 于 2011-4-4 12:12 编辑

mov a,#12h  
立即数12h 并不在rom 里,也不在任何数据段里。而是一个mov 指令的直接操作数,是由程序员给定(不属于任何数据段)、编译器执行的;12h就在mov 指令的后面(指令操作数的位置),——12h 是指令代码的一部分。而不是数据段部分。和连接定位器(定位在rom 还是ram 还是什么段)根本没关系。

mov   a ,  #12h  叫立即寻址;(最快的寻址方式,操作数位置距离最近。)

movc   a ,   #…… 根本没这类指令。movc  是间接寻址(基址寄存器加变址寄存器间接寻址),先要设置基址指针,还要确定变址寄存器索引,比立即寻址慢多了。  

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
123jj + 1
20
原野之狼| | 2011-4-4 15:13 | 只看该作者
LZ看书很仔细~
刘前辈给你解答也很仔细:P

使用特权

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

本版积分规则

0

主题

157

帖子

1

粉丝