原创 单片机汇编语言常见错误分析

2009-8-12 16:31 1525 10 10 分类: MCU/ 嵌入式
一、汇编软件汇编失败原因分析:电子园51单片机学习网OFT8B9j%b)n

C*|+Q {a7F,K{TE44606     这里采用Keil C51软件包中的宏汇编器A51作为编绎器,单片机的汇编语言编写时要注意一定的语法,详细介绍可以参考相关参考书,语法错误会造成汇编失败,常见的汇编错误如下:

NOC)m%o5iO4[+p44606

'H&Lt*I}+_ ZbymiB44606
#{'a _r+\BO*K446061. 标号重复:
a'\ K`o9I%^s,l44606    常见于复制、粘贴程序时忘记修改标号,造成出现多个相同的标号,标号是不允许重复的。电子园51单片机学习网.s0j.J|HZIw


@r7H-g| V44606
R4}S*r W z1l446062.标点符号以全角方式输入:电子园51单片机学习网 gF:C |W
   汇编程序要求标点符号为半角方式,否则汇编失败。可以在输入:,;时切换到半角方式,或者在大写状态输入标点符号,这也是很容易犯而且不容易发觉的错误。

fNL5D9Wn E44606 电子园51单片机学习网j-R9`2l4KG!O3b_p M1Z

电子园51单片机学习网;@G-bOL;@!x
3.数值#FFH 前遗漏0:电子园51单片机学习网N4U3s,}+PrFU|
   根据要求应该在a~f前加0,写成#0FFH电子园51单片机学习网{1A/Pao1^9b


U+B}#` A8}#k`44606电子园51单片机学习网v&_3G+OX
4.字母O和数字0搞混:电子园51单片机学习网U|eb3iu-yj;MB
   有时候这两个字看上去完全相同,要注意哦~~电子园51单片机学习网'm(B7X)}4cE5Zp-Ox


)d-lt EhO'S44606电子园51单片机学习网&n2Dw \u2C6v
5.标号后边遗漏":"

8?S j I m _s;N D*KI44606 电子园51单片机学习网2D}g5w m|6j?@8Y


I9Q&jr7A%Hcg446066.标号使用了特殊字符:
L)X+^)S0y"V44606
   标号不能用指令助记符、伪指令、特殊功能寄存器名和8051在指令系统中用的“#”、“@”等,长度以2~6字符为宜,第一字母必须是英文字母。比如:T1、T2、A、B这些字符有特定的含义,不允许用于标号。

d1uNCb2yh44606

2W}R;I.ah.b vo-l44606
'ec}DuFJ446067.AJMP跳转超过2K地址:
t{9sk3w0R!o44606
   AJMP属于短跳转命令,有2K地址范围的限制。

[ ?l4@p `0dg44606 电子园51单片机学习网-GyF%I o?


No h|1jGe5T4O1_'?446068.超过地址范围:
6@l3RZ{R(Yw44606   JB P3.2,EXIT跳转超过-128~127个地址范围。这个是最容易出现的错误!你有可能程序刚才还能汇编编译成功,你加了一段程序后程序就提示出错了,你可以把电子园51单片机学习网%C4Z+DL_5F%A8Q%E'].J
JB   P3.2,EXIT
6WH8CW-e!hF44606转换成电子园51单片机学习网}w8L(yoO!wP9ION
JNB    P3.2,LD01
go7c k1h%~8XR44606AJMP  EXIT电子园51单片机学习网)v3r N+eR}#z
LD01: AJMP    EXIT电子园51单片机学习网{Y$^LM^9Jt!w-|
……

8w'I rub,HAQ7Bf44606

uV5V-_&u"@8E/rI/?7Y44606
@ e$E2P~kVD446069.字母I和数字1混淆:
? Kt?3{$b/?._ E*L6y _44606  冒失鬼的常见问题。电子园51单片机学习网"T3IT/E([.q re U

电子园51单片机学习网pU;n]}%Zn(x

电子园51单片机学习网2Bt@ s!W6}
10.创造发明不存在的汇编语言指令:电子园51单片机学习网&fU6}%A;Ek.q c? l
  在编写程序程序的过程中可不欢迎这种创新,这种指令汇编程序不支持,芯片也不认可。

5grHlk"m44606

5mI:m[H+u44606电子园51单片机学习网De!@}H-NO
11.符号“:”“;”最好用半角书写。

4K.K6~ TH8n3@44606 电子园51单片机学习网:z`w%qq$gO

 

(}Rw@%i%Pv44606

9uj^:v tnW a.~H44606二、程序出错:电子园51单片机学习网u rN'U?K(o
电子园51单片机学习网!b`!GK/S)f-eY

电子园51单片机学习网;e6b)K/USLW


4Y bPlJl446061.寄存器重复调用:电子园51单片机学习网{ I4pO B r6b
   比如主程序中设定了R4=5,表示主程序循环执行5次,而其中的一个延时子程序又用到R4,使R4的值发生紊乱,造成程序无法正常执行。电子园51单片机学习网*x8l7N/k&x


4k8{QoY)V!hu U _%J44606
P#n l{#dZn#m446062.硬件不熟悉:
n%}_ol]/kh%ck"_44606
   单片机一般采用下拉输出,往往端口输出0驱动外设工作,和常见的正逻辑相反,容易搞错。

u^.ps8\G44606 电子园51单片机学习网E;Fkr)]Lt$d-V*?

 电子园51单片机学习网EG$ob4qmZ ~

电子园51单片机学习网}pusy9h

三、指令系统常用符号和含义电子园51单片机学习网uH&q%~Cn.es

电子园51单片机学习网B.G#i@y

(1)Ri:工作寄存器0和工作寄存器1,i=0或1。即R0~R1。电子园51单片机学习网0a~%X?}

电子园51单片机学习网8H5TAVW+P i-N"B

(2)Rn:工作寄存器R0~R7,n=0~7。电子园51单片机学习网X l%v S$L(ar

电子园51单片机学习网{tT#T"Z4O4|GT+H

(3)@Ri:寄存器Ri间接寻址8位存储器单元00H~FFH。电子园51单片机学习网XIN'EVz v,h[

电子园51单片机学习网HLn:DV5z K X

(4)direct:8位直接地址,它可以是内RAM 00H~7FH或SFR的80H~FFH。

0?n;?n"D#l%dW8s"f44606 电子园51单片机学习网MPPC2Z8H

(5)#data:8位立即数。电子园51单片机学习网i7J4e7n*t~"T5F

电子园51单片机学习网,h\eQ/{5cj;z#X

(6)#data16:16位立即数。电子园51单片机学习网:K*jog o$V M0~

电子园51单片机学习网Ig}\6lQ4o7u&jp

(7)addr16:16位目的地址。用于LCALL和LJMP指令,能调用或转移到64K程序存储器空间的任何地方。

T!P]`S!I44606

*?-||~j&H4d44606(8)addr11:11位目的地址。用于ACALL和AJMP指令,可在下条指令地址所在的2K字节页面内调用或转移。

(d&to)a y8Ec44606

m S-oH6x&x44606(9)rel:带符号的8位偏移地址,用于SJMP和所有的条件转移指令。其范围是相对于下一条指令第1字节地址的-128~+127个字节。

9@$ZY Lo`gfp44606

Xoz*SQ@y'TO44606(10)DPTR:数据指针,可用作16位的地址寄存器。

(U H1G Y4H-Iv^44606 电子园51单片机学习网 M]Q%_"~

(11)bit:位地址。片内RAM中的可位寻址及SFR中的可寻址位。

t @8m'U2\!t0h#r#~_44606 电子园51单片机学习网V~U$Bs+Mg

(12)A:累加器Acc。电子园51单片机学习网/?+wy JR(zRD'Z

电子园51单片机学习网({2E&Y9ZX:rxQ@

(13)B:通用寄存器,主要用于乘法MUL和除法DIV指令中。电子园51单片机学习网gxz CbJ

电子园51单片机学习网*s%ca;T2c2{$f sm/F

(14)Cy:进位标志位或布尔处理器中的累加器。

#F1X8w,o%_Ks:E Y44606

BFN1l'\})l44606(15)@:间接寄存器或基址寄存器的前缀。如@Ri,@DPTR,@A+PC,@A+DPTR。

$a_4{*v2{$y9f44606 电子园51单片机学习网"kc+VB.G x9e;jz{

 

CFv4x4tI1@F44606

3~n8I.x A)IR44606编写汇编语言的忠告:

X5t:FdU44606

7@p'_7`;~6V&B_+D44606       要养成良好的程序书写习惯,比如标号对齐、参数对齐、注释对齐,这样看起来赏心悦目,也不容易出错。标号最好采用有意义的英文,这样比较直观,注释尽量详细准确,便于以后读懂,而且有利于其它程序中作为子程序模块的调用。还有要注意典型程序模块的积累,再复杂的程序也是由一个个小程序模块组成的,在初学阶段可以对典型程序比如:延时子程序、查表子程序、按键消抖子程序等编写实践一次,这样印象深刻,便于以后引用。

,]]2S6{1Iny44606
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条