打印

按键按下,数值加一,汇编的程序

[复制链接]
3124|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
superbigbaby|  楼主 | 2010-3-17 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我自学的51,对51应该非常熟悉了。用的C语言,现在学校里教51了,用汇编, 老师教的很搞, 不是很理解 求大神
在C语言中很简单, 按键按下 i++
这个是老师写的加一子程序,看不懂。
jia1:
      mov A,run0    把run0给A
      ADD A,#91H  看不懂
      DA A                干嘛?
      ANL A,0FH       与?
      mov run0,A
      mov A,run1
      ADDC A,#90
      。。。。。。RET
      后面省略 叫我们自己写?


     key:jb P1.0,dd
      dd1: lcall display
      jnb P1.0,dd1
      lcall jia1
      dd:  ret

看不懂呀看不懂  求大神解释  如果有更简便的方法 求教

相关帖子

沙发
liao_fangxing| | 2010-3-17 11:49 | 只看该作者
:lol拿着指令集来一条一条的对照,注意些特殊寄存器的使用…………

使用特权

评论回复
板凳
superbigbaby|  楼主 | 2010-3-17 12:21 | 只看该作者
:'(

使用特权

评论回复
地板
HWM| | 2010-3-17 13:06 | 只看该作者
“对51应该非常熟悉了”? 过于自信! 原因就在于用了C语言,那根本无助于“非常熟悉”MCS-51。

那是一段BCD码加一操作,一个字节放一个BCD码(虽然其实可以放两个)。关键在于“DA A”指令,自己仔细看书去理解这条指令的具体意义。这里用了加BCD码“9nH”来将进位跳过那个没用的高位BCD。

        ......

        MOV                A,run0                ;
        ADD                A,#91H                ; 加 BCD 91(实际上是加一),若个位进位则进到百位(实际上十位没用)
        DA                A                ; BCD 码调整
        ANL                A,0FH                ; 取低位BCD码,抛弃高位BCD码
        MOV                run0,A
        MOV                A,run1
        ADDC                A,#90H                ; 加进位(原理如同“ADD A,#91H ”那条指令),
        DA                 A                ; BCD 码调整(这是必须加的)。

        ......

使用特权

评论回复
5
QuakeGod| | 2010-3-17 14:48 | 只看该作者
晕菜程序,不知道谁写的。
虽然能实现同样功能,但是目的就是使人晕菜。
程序的主要意思就是,用10进制表示一个计数值,每个字节存一位数。run0是个位,run1是十位,.....
实际上完全可以用二进制存储,待要输出的时候,再转化成10进制,计算机使用二进制就是因为发现了它的优点,现在倒反过来了。
即使非要用10进制存储,也可以使用压缩BCD码,或者不使用DA语句,而是直接用条件判断。这样程序还要容易懂些。

使用特权

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

本版积分规则

19

主题

44

帖子

1

粉丝