[原创]A51 ACALL instrution 读STC数据手册心得体会
2012-09-30 11:32
176 查看
;该程序用于测试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指令的详解中,便出错了两次,希望中国人以后能够做到严谨,如同德国人的处事风格一样。
附:截图如下
;以下内容摘自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指令的详解中,便出错了两次,希望中国人以后能够做到严谨,如同德国人的处事风格一样。
附:截图如下
相关文章推荐
- [原创]QQ农场外挂辅助制作一点心得体会1
- 院外培训:GIS数据处理与建模高级培训班学习心得体会 来自
- [数据结构]原创!amor详解 快速排序 使用以及心得
- [原创]作业心得体会:VS2008下反汇编观察switch语句
- C语言学习历程(一)数据类型及变量之心得体会
- 【原创】触发器及其应用的心得体会。。。。。。。
- 虚拟现实游戏开发之心得体会(原创)
- 大数据量(已测500W或1000W数据)分页读取的一点心得体会
- 静态数据static的初始化的要点及个人心得体会
- 大数据量(已测1000W数据)分页读取的一点心得体会
- 心得体会--网页制作 by volcano
- 心得体会 2017/3/14
- 开发心得体会
- 【原创】devkit8000刷wince心得
- [使用心得]maven2之m2eclipse使用手册之五添加新的依赖项目到本地仓库
- 项目需求和客户交流的心得体会
- 测试分析心得体会
- 【原创】Android 判断默认数据网络是否为开,若关则跳转到网络配置页面
- Android开发体会与心得
- 升级 PG9.3的一点心得体会 -- 关于python 3.3