刚接触中颖的4位单片机,一直在看中颖的资料,很郁闷有些资料有问题,也浪费了大量的时间。在论坛上提问也解决了几个问题。
关于SBC指令的,问题已经解决
http://bbs.sinowealth.com/viewthread.php?tid=1549&extra=page%3D1
你好,我们公司是无法使用QQ的,所以没有办法提供QQ联系方式。
资料的话,由于你拿来做比较的两份资料,不是同一时期写的(英文版是刚出SH66系列时的,而印刷中文版是后来我们编写四位教材时写的,此时SH69系
列已出了很久了,两者相差4、5年左右),写的人不同而且当时对指令集的使用也不尽相同,而且教材有270页,所以存在错误也是难以避免的,在此我们表示
深深的歉意,也请多见谅。
其实只要你学会方法,就能够自己来分析对与错了。
要分析这个题,我们需要弄懂几件事:
1.LDI和LDA是不会影响到CY位的,因此加入一开始是CY = 1,那么在进行SBC处理时,CY =1要带入进去计算。
2.SBC Mx ,
bbb的运算方式为 Mx - A + CY,结果保存到A中,此处最容易造成误解的地方就是“+CY”,其实应该是这样的,如果计算前CY =
0,则应该是 Mx - A - 1,如果计算前CY = 1,则应该是Mx - A + 0
3.SBC的运算对CY的影响:假如Mx - A + CY结果大于等于0,那么结果CY = 1,反之CY = 0。
只要知道了上述三点,你就能够自己分析了。
以第一题为例,$21H = 06h $20H = 05h,CY = 0,那么
LDA $20H
 ************************
下面是我自己的另外一点总结
SBC常常与SUB指令配合使用,比如
;$21H=06H ,$20H=05H ,$22H=09H
LDA 20H,00H ; 这里的00H是RAM BANK ,一个RAM BANK 128,就是LDA 20H,BANK0的意思,他们说现在多是
SUB 21H,00H ; LDA Mx ,不是LDA Mx,bb了,Mx是RAM地址,bbb是BANK地址
; 06H-05H = 01H AC=$21H=01H CY=1
SBC 22H,00H ; 上面的CY=1 说明没有借位发生 SBC 是 AC <- Mx-AC+CY 这里就是 09H-01H+0=08H,结果 ;大于0 ,CY就是等于1;
以前搞 Verilog 二进制运算,数字逻辑 ,还有点转不过来。 我大概猜的,就是对于减法指令, CY是=1的
如果2数相减大于等于0的话,CY没有被借位 ,否则CY被借位 CY=0;
文章评论(0条评论)
登录后参与讨论