作者WolfLord (呆呆小狼)
看板ASM
标题Re: [问题] 请问8051 组合语言 怎麽把两组PORT的值 …
时间Fri Sep 25 03:07:17 2009
我来龟毛一下好了,这个比ruemann的方法没效率,但是可以只使用A :P
B T
MOV A,P0 ;A=P0.7.6.5.4.3.2.1.0 2 1
MOV C,P1.3 2 1
RLC A ;A=P0.6.5.4.3.2.1.0 P1.3 1 1
MOV C,P1.2 2 1
RLC A ;A=P0.5.4.3.2.1.0 P1.3.2 1 1
MOV C,P1.1 2 1
RLC A ;A=P0.4.3.2.1.0 P1.3.2.1 1 1
MOV C,P1.0 2 1
RLC A ;A=P0.3.2.1.0 P1.3.2.1.0 1 1
14 9
总共14BYTE 9个执行周期,ruemann的程式码只需要11个BYTE跟7个执行周期
所以,效率比较差 :P
※ 引述《ruemann (树海游魂)》之铭言:
: 总之因为推文很麻烦,推错了又不能改,所以…
: 我的方法一向是以简单直觉为主,大家可能会觉得方法有点笨,不过应该很好理解
: mov a, P1 ; a = P1[7..0]
: swap a ; a = P1[3..0]P1[7..4]
: anl a, #0xF0 ; a = P1[3..0]0000
: mov R0, a ; R0= P1[3..0]0000
: mov a, P0 ; a = P0[7..0]
: anl a, #0x0F ; a = 0000P0[3..0]
: orl a, R0 ; a = P1[3..0]P0[3..0]
: 大概就是这样
: ※ 引述《nicebluesky (最长的电影)》之铭言:
: : 请问各位大师
: : 我想写一个程式
: : 有关於感测器的
: : 因为有两组感测器
: : 一组里面有四个CYN70
: : 由於硬体的关西
: : 第一组感测器所用到的脚位是
: : P0.0 P0.1 P0.2 P0.3
: : 第二组是
: : P1.0 P1.1 P1.2 P1.3
: : 想把两组的值
: : 都放进累积器A里面
: : 变成
: : P1.3 P1.2 P1.1 P1.0 P0.3 P0.2 P0.1 P0.0
: : 这样子摆放在A理面来执行其他动作指令
: : 不知道该怎模样才可以同时存入
--
作别人不愿作的事,是好人!。 作别人不敢作的事,是坏人!。
作别人不能作的事,是天才!。 作别人不会作的事,是…脑残!!
WolfLord
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.46.178.209
1F:推 ruemann:嗯嗯…果然还是有可以不用到额外的暂存器……GJ 09/25 03:14
2F:推 ruemann:mov c, bit 这个指令我几乎没在使用……忘了它的存在 09/25 03:17
3F:→ WolfLord:我倒常常在用,因为常常暂存器大爆炸 >"< 09/25 14:36