找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4016|回复: 0
打印 上一主题 下一主题
收起左侧

[原创]用寄存器间接寻址巧妙使程序变得简短

[复制链接]
跳转到指定楼层
楼主
ID:49290 发表于 2013-4-12 22:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    首先,我是一名初学者,我希望和大家一起进步、一起成长。

    这里,我要跟大家分享:汇编语言中巧用间址寄存器使程序简短。

     例一,将内部RAM中30H开始的8个单元全部清零。

     最原始最笨重的办法是顺序传送立即数:

L1:     MOV 30H,#00H

         MOV 31H,#00H

         。。。。。。

         MOV 37H,#00H

         RET

     采用以上办法,如果要作用的不是8个、而是16个甚至更多个字节单元,那程序将会很长。

而以下的程序就简短得多:

S1:    MOV RO,#30H

         MOV R1,#08H

S11:  MOV @R0,#00H

        INC R0

        DJNZ R1,S11           ;R1减一等于0表示MOV @R0,#00H已执行8次

        RET  

    我们经常会在很多程序中的初始化部分发现上面形式的程序段。

    而我的习惯则是:

S12:    MOV R0,#30H

S121:  MOV @R0,#00H

         INC R0

         CJNE R0,#38H,S121   ;R0等于38H,表示最后的37H已执行清零操作    

         RET                      

  

例二,给30H送0,31H送1,32送2,33H送3等等,37H送7

顺序传送立即数:

L2:      MOV 30H,#00H

           MOV 31H,#01H

           .。。。。。。

           MOV 37H,#07H

           RET

  采用间址寄存器:

S2:       MOV R0,#30H

            MOV A,#00H

S21:     MOV @R0,A

            INC R0

            INC A

            CJNE R0,#38H,S21

            RET

 

例三,将30H内容送至50H,31H内容送至51H,32H内容送至52H,等等,37H内容送至57H

顺序传送方式:略

 

采用间址寻址方式:

S3:      MOV R0,#30H

           MOV R1,#50H

S31:    MOV A,@R0

           MOV @R1,A

           INC R0

           INC R1

           CJNE R0,38H,S31

           RET

例四,已知30H至33H四个单元内容均小于十进制数100,把30H个位送50H,十位送51H,31H个位送52H,十位送53H,依此类推

 

顺序方式:

L4:     MOV A,30H

          MOV B,#0AH

          DIV AB

          MOV 50H,B

          MOV 51H,A

          MOV A,31H

          MOV B,#0AH

          DIV AB

          MOV 52H,B

          MOV 53H,A

          MOV A,32H

          MOV B,#0AH

          DIV AB

          MOV 54H,B

          MOV 55H,A

          。。。。。。

          RET

 

采用间址寻址方式: 

S4:     MOV R0,#30H

          MOV R1,#50H

S41:    MOV A,@R0

           MOV B,#0AH

           DIV AB

           MOV @R1,B

           INC R1

           MOV @R1,A

           INC R0

           INC R1

           CJNE R0,#34H,S41

           RET

 

例五,采用动态扫描显示30H至33H四个单元内容,P1段选,P2位选

顺序方式:

L5:       MOV A,30H

            MOVC A,@A+DPTR           ;查表

            MOV P1,A

            SETB P2.0                        ;选中第一位数码管,这里是共阳数码管位选同相驱动,或者共阴数码管反相驱动

             ACALL DEL                       ;延时1毫秒

             CLR P2.0

             MOV A,31H

             MOVC A,@A+DPTR

             MOV P1,A

             SETB P2.1

             ACALL DEL

             CLR P2.1

            MOV A,32H

            MOVC A,@A+DPTR

            MOV P1,A

            SETB P2.2

            ACALL DEL

            CLR P2.2

             。。。。。。

             RET

 

采用间址寻址方式:

S5:       MOV R0,#30H

            MOV R1,#01H

S51:     MOV A,@R0

            MOVC A,@A+DPTR

            MOV P1,A

            MOV P2,R1

            INC R0

            MOV A,R1

            RL A                          ;选中数码管左移一位

            MOV R1,A

            CJNE RO,#34H,S51

            RET 

               

 

 

             

 

    

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表