|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ n0 `' e8 O9 Z6 y1.减法指令的误区" x; N/ }8 t& D0 s2 r
1 ~3 D. e9 ` K9 |5 t' o; D
之一:关于ACC) p( k0 @2 V, A
+ Z! y+ Y- X( U6 O. k
EMC的减法指令有三条,如下:- x& y8 F Y7 G3 Z9 Z0 X
; m4 W; j0 P2 G+ lSUB A,R (R-A→A)7 y4 v4 _4 C( {4 ^6 z; A4 U
+ I) G' Z X5 P$ Y& q6 {9 w( `SUB R,A (R-A→R)9 |6 I! A! Z8 D3 {6 k ?" L
. L* Q" E( h6 Q$ R' m4 Y& n
SUB A,K (K-A→A)% J7 ]# b* w% h9 Y# ~
% e A- F! B' J0 H' r9 j
需要注意的是,不论A的位置在前面还是后面,A都是减数,不是被减数。 c$ m+ l' @3 ~
( |: N' }% i" g也就是說如果我們想計算A-2的值,如果寫成:
4 \+ J/ k4 h" ~9 i4 _, W
1 k' v0 |) F8 S. k. r' JSUB A,@2; h2 j0 w# K. N" M: o1 v- b; N
, O6 @: f2 J) b& ]/ |2 b其實是執行2-A
. b' q; o% Q6 G- q! ?% P2 ]
# Z* X4 ?1 H, W解決方法如下:
& A* n+ N1 e1 _, h
9 N0 E! S+ N% uADD A,@256-2 或- l1 F% r1 {' J' @8 L; x/ N
5 f( Q. ~ u! j# i/ XADD A,@254
$ d/ H% o# i! @2 z+ B; y( z/ j' s- g$ ^1 O" m" m
之二:关于CY
! o! x: P+ T6 o" L3 q6 b4 [2 p4 R! X4 A$ }4 c5 t" a5 X
一般来说,加/减法都会影响到进位标志CY., u2 ?9 m! W/ g$ n. t' ~! K! ~
, u+ X/ a6 {$ N在其它一些 单片机 指令系统中,当减法发生借位时,CY=1,未发生借位时CY=0.+ [/ m% K& W* E5 t) E/ a" w
+ R. ]: d+ Q; ^: c; _8 y
如果你以为EMC的减法也是如此,哈哈,你就要吃药了!( G5 c6 f% _9 R8 {
; Z- U0 O, i! V, E3 r: K原来,在EMC的指令系统中。当减法发生借位时,CY=0,未发生借位时CY=1.: h5 \% m4 b/ t. _5 L
5 J8 |7 |9 D% ], \3 M2 C6 J
如果不注意这点,很容易在一些运算或判断程序中留下BUG
$ J( G1 w" O' d j
7 C7 j. d* i7 N9 O+ [1 P2.查表(散转)指令的误区# _3 v3 G, T! S* t7 h5 r; R8 F
4 p" `$ m. W& J7 {之一:关于“ADD R2,A”指令1 q! O2 f, U8 a$ \8 @9 S" _
4 V2 V; N4 k2 x1 G2 E
在EMC153/156的指令系统中,没有TBL指令(这一点要切记),当要查表时只好用“ADD R2,A”(或MOV R2,A)来代替; C, b) O1 H. R; v$ ?! o% C
/ r3 n: E% k- k4 I) n3 e
但是使用“ADD R2,A”时要注意,这条指令只能改变PC指针的低8位(即256字节),高位其它位一律清零!
- n6 G/ n( p; c/ r$ P" L# d' r4 c: t. J0 U1 A3 _1 j1 X7 X8 M: Q5 \
所以使用“ADD R2,A”时必须保证整个表格都在ROM的每一页的前256字节区间内。(153/156只有一页)
* M, b# R8 `! l- k F4 F% k" `# o6 [- i; J! g5 @; r
大表格的使用受到了限制,而且为了将表格“挤入”00H~FFH的ROM空间,程序的结构受到破坏。5 }2 h: C9 i; |8 n% t4 \0 _1 @( L
g+ p$ ~( f) I, I! v* {9 }' T; o2 I
之二:关于“TBL”指令
- c* ^5 ]* [1 P6 x) W+ l7 C( P/ q7 s: t% j" H! k
刚才说道,“ADD R2,A”指令使用的诸多不爽之处。
$ D3 }4 n0 [- K. z* b' y1 B: J* u
为此,EMC在447/458及后续的芯片的指令系统中,增加了一条新指令----就是TBL指令。0 g n2 d& j% o& W: u; v' K
0 F! o& f6 i6 N nTBL是查表指令。号称可以放在程序的任何位置。 |
|