注册 登录
编程论坛 汇编论坛

汇编语言入门问题,求指点

云帆沧海 发布于 2011-11-08 20:22, 810 次点击
小弟正在学习单片机,看书时遇到这么一个例题,有些迷茫,求高手指点。
题目:将累加器A中的压缩BCD码拆成非压缩BCD码,低位放入30H,高位放入31H单元中。
解答:
PUSH ACC     ;保存A中的内容             (1
ANL  A,#0FH  ;清除高四位,保留低四位    (2
MOV  30H,A   ;低四位放入30H中           (3
POP  ACC     ;恢复A中原数据             (4
SWAP A       ;高低四位呼唤              (5
ANL  A,#0FH  ;清除高四位,保留低四位    (6
MOV  31H,A   ;低四位放入30H中           (7

我的问题是这为什么要高低位互换,如果高低位不互换,直接写成“ANL  A,#F0H”行么?
求指教!

9 回复
#2
云帆沧海2011-11-08 21:41
补充一下,我的意思是写成以下程序行么
PUSH ACC     ;保存A中的内容             (1
ANL  A,#0FH  ;清除高四位,保留低四位    (2
MOV  30H,A   ;低四位放入30H中           (3
POP  ACC     ;恢复A中原数据             (4
ANL  A,#F0H  ;清除低四位,保留高四位    (6
MOV  31H,A   ;低四位放入30H中           (7

#3
李尸尸2011-11-09 13:21
第一个,是这样的,假如A中存储的是34H,那么我们需要先提取出A的低四位,存入30H中,然后取高四位放在31H中,结果是0100存于30H,0011存于31H。如果按你的想法直接存放,那么30H依旧是存的0100,但是,31H中存放的结果就是01110000了,明白我的意思么?
第二个,
按照ANL  A,#F0H  ;清除低四位,保留高四位    (6
这一步来看,你的答案依旧是错的......
#4
xinxi2011-11-09 18:52
我觉得楼主的 想法 也没错,,没有任何规定一定要使用 低半字节,,如果在某些情况要提高运行速度 想省去 一句SWAP A  也是可行的,,只要楼主注意 以后处理31H单元内容的时候 是高半字节有效。
#5
云帆沧海2011-11-09 19:09
呵呵,谢谢两位大侠的回帖,小弟不胜感激。
#6
李尸尸2011-11-09 22:30
那个AX可以拆分为高低各8位,AL不能拆分高低四位,这就是问题的所在了......
#7
云帆沧海2011-11-10 19:42
小弟刚刚学习,AX和AL分别是什么呀?
#8
李尸尸2011-11-10 22:09
AX是累加器,AL是AX的低8位,AH是AX的高8位,AX是计算机的寄存器,这方面的知识建议你去补充一下,汇编学好了,单片机自然就简单了,循序渐进还是合理的学习方法,推荐你王爽老师的《汇编语言》,绝对有帮助。呵呵,单片机我们下一年才学呢,如果你有什么好的资料也可以告诉我,提前看看。与君共勉
#9
云帆沧海2011-11-10 22:46
李尸尸你是现在在校学生么?能告诉我你在哪里读书么?想和你交个朋友。
#10
李尸尸2011-11-10 23:44
大学生 嵌入式专业 呵呵 我们学校软件工程系最变态的专业,内蒙古的学校 呵呵
1