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

[复制链接]
7455|40
 楼主| tianheyun 发表于 2011-4-3 23:44 | 显示全部楼层 |阅读模式
mov是访问片内数据存储器(ram)用的,mov a,#12h  而这条指令在程序存储器内(rom),这就奇怪了,立即数在rom内不用通过ram直接可以读rom里的数据放到cpu的acc内。那为什么要用mov呢?不知道大家明不明白我的意思?
 楼主| tianheyun 发表于 2011-4-3 23:46 | 显示全部楼层
刚学汇编真的很费力,
 楼主| tianheyun 发表于 2011-4-3 23:56 | 显示全部楼层
这个问题很难解决吗:o
aihe 发表于 2011-4-4 01:00 | 显示全部楼层
你每次买东西从银行取钱出来直接交商店不用放兜里?
李冬发 发表于 2011-4-4 01:14 | 显示全部楼层
这个问题,不能用LS的这个比喻。
应该是:你不用mov,MCU怎么知道你的这个立即数是要送到哪的?!
原野之狼 发表于 2011-4-4 01:25 | 显示全部楼层
不用MOV的话这个立即数还在ROM里
MOV到RAM里以用于后续的操作
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的区别而已...
 楼主| tianheyun 发表于 2011-4-4 10:33 | 显示全部楼层
我的意思是mov是访问ram用的 立即数在rom里,为什么要用mov而不是movc?mov直接就到acc里了,根本不通过ram.。
 楼主| tianheyun 发表于 2011-4-4 10:33 | 显示全部楼层
4# aihe
你再看看我的意思,
 楼主| tianheyun 发表于 2011-4-4 10:35 | 显示全部楼层
5# 李冬发 我是问为什么用mov而不是movc
 楼主| tianheyun 发表于 2011-4-4 10:43 | 显示全部楼层
7# linbei1988 ,我上面的rom和ram写错了吗,帮我看看我哪一点搞错了?谢谢啊,新手确实有很多疑问.
yirongfu 发表于 2011-4-4 11:13 | 显示全部楼层
本帖最后由 yirongfu 于 2011-4-4 11:18 编辑

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


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

本帖子中包含更多资源

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

×
linbei1988 发表于 2011-4-4 11:14 | 显示全部楼层
11# tianheyun
立即数在ROM里?你从哪里看出,还是你自己定义了?
 楼主| tianheyun 发表于 2011-4-4 11:26 | 显示全部楼层
13# linbei1988 ,写的源代码通过编译成目的代码就是存放在rom里,我什么是自己定义的?
linbei1988 发表于 2011-4-4 11:32 | 显示全部楼层
13# linbei1988  ,写的源代码通过编译成目的代码就是存放在rom里,我什么是自己定义的?
tianheyun 发表于 2011-4-4 11:26

所以..这里要你搞清楚的是:放在ROM里的是代码,立即数十立即数,代码是代码...你想把代码直接放在累加器吗?
tianheyun1 发表于 2011-4-4 11:36 | 显示全部楼层
12# yirongfu 谢谢啊,这就是我问的问题呵呵呵
tianheyun1 发表于 2011-4-4 11:38 | 显示全部楼层
15# linbei1988 还是谢谢你,12楼是我的疑问
yirongfu 发表于 2011-4-4 11:40 | 显示全部楼层
本帖最后由 yirongfu 于 2011-4-4 12:21 编辑

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

mov a,#12的#12是固化到代码中放ROM里头的,翻译成机器码是74 0C
刘前辈 发表于 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

查看全部评分

原野之狼 发表于 2011-4-4 15:13 | 显示全部楼层
LZ看书很仔细~
刘前辈给你解答也很仔细:P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

157

帖子

1

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