• [原创]A51 ACALL instrution 读STC数据手册心得体会


    ;该程序用于测试STC90C516RD+ ACALL 执行时的16位二进制编码中addr8~addr12是否为10010

    ;以下内容摘自STC90C51RC-RD+-CHINESE数据手册
    ;ACALL addr 11
    ;功能:绝对调用
    ;说明:ACALL指令实现无条件调用位于addr11参数所表示地址的子例程。在执行该指令时,
    ;首先将PC的值增加2,即使得PC指向ACALL的下一条指令,然后把16位PC的低8位和
    ;高8位依次压入栈,同时把栈指针两次加1?然后,把当前PC值的高5位、ACALL指
    ;令第1字节的7~5位和第2字节组合起,得到一个16位目的地址,该地址即为即将调
    ;用的子例程的入口地址。要求该子例程的起始地址必须与紧随ACALL之后的指令处
    ;于同1个2KB 的程序存储页中,ACALL指令在执行时不会改变各个标志位。

    ;ACALL指令二进制编码:
    ;15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
    ;a10a9 a8 1 0 0 1 0 a7 a6 a5 a4 a3 a2 a1 a0

    ;预期
    ;addr11位于0002H->0000000000000010B
    ;000(addr11中a10到a8)+10010+00000010(addr11中a7到a0) =1201H

    ;步骤:
    ;点击DEBUG
    ;点击MEMORY WINDOWS
    ;在address 里输入00
        ORG 00H
    START:
        ACALL TEST1                          ;ACALL 指令操作
    TEST1:                                       ;(PC)<- (PC)+ 2
        END                                       ;(SP) <-(SP) + 1
                                                     ;((SP)<-(PC7-0)
                                                     ;(SP) <-(SP) + 1
                                                     ;((SP)) <-(PC(PC15-8)
                                                     ;(PC10-0)<-页码地址
    ;结果
    ;执行前,SP=0x07,执行后,SP=0x09;
    ;PC值变化与预期相符;
    ;ACALL指二进制编码为1102与预期1202不符;
    ;分析
    ;1:可能是由于STC的内部结构未完全符合msc-51标准
    ;2:STC数据手册出错
    ;3:STC单片机未被keil uVision收录,编绎时才有此现象。

    ;初步判断
    ;根据百度ACALL的说活,ACALL指令二进制编码应该是
    ;(addr11中a10到a8)+10001+(addr11中a7到a0),故可能是STC公司数据手册写错了,
    ;仅当ACALL指令的详解中,便出错了两次,希望中国人以后能够做到严谨,如同德国人的处事风格一样。

    附:截图如下

  • 相关阅读:
    将smarty安装到MVC架构中
    MVC开发模式以及Smarty模板引擎的使用
    LAMP环境搭建+配置虚拟域名
    第四节 块标签、含样式的标签
    第三节 p标签
    第二节 标题标签
    第一节 简单的html
    第十一节 python和集群交互
    第十节 redis集群搭建
    第九节 搭建主从服务
  • 原文地址:https://www.cnblogs.com/lydmom/p/2709138.html
Copyright © 2020-2023  润新知