资源描述:
《编写汇编语言常见错误分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、编写汇编语言常见错误分析:—、MAS51汇编软件汇编失败原因分析:平片机的汇编语言编写时要注意一记的语法,详细介绍讨以参考相关参考书,语法错误汇会造成汇编失败,常见的?I:编错误如下:1.标号重复常见于复制、粘贴程序时忘记修改标号,造成出现多个相同的标号,标号是不允许重复的。2.标点符号以全角方式输入MAS51程序要求称点符号为半角方式,否则汇编失败。可以在输入:,;时切换到半角方式,或者在大写状态输入标点符号,这也是很界易犯而且不界易发觉的错误。3.注释太长奋时为了以后读懂程序,写了很长的注释,站长发现超过20个汉子时也会造成汇编失败,
2、解决办法可以将太长的注释分成多个注释。4.数值#FFH前遗漏0,根据要求应该在a〜f前加0,写成井0FFH5.字付0和数字0摘浞介时候这两个字肴上去完全相同,要注意哦〜〜6.标号后边遗翩":"7.标号使川了特殊字符,比如:T1、T2、A、B这些字符有特记的含义,不允许川于标号。8.AJMP跳转超过2K地址,AJMP属于短跳转命令,有2K地址范围的限制。9.JBP3.2,EXIT跳转超过一128〜127个地址范凼。这个是最容秘出现的错误!你冇讨能程序刚才还能汇编编译成功,你加了一段程序后程序就提示出错了,你可以把JBP3.2,EXIT转换成
3、JNBP3.2,UUUAJMPEXITUUU:10.字母I和数字1混淆,3失鬼的常见问题。11.创造发明不存在的汇编语言指令,在编写程序程序的过程屮讨不欢迎这种创新,这种指令汇编程序不支持,芯八也不认对。12.符兮“:”“;”最好用半角书写。二、程序出错:1.寄存器重复调用比如主程序中设定了R4=5,表示主程序循环执行5次,而其中的一个延时子程序又用到R4,使R4的值发生紊乱,造成程序无法正常执行。2.硬件不熟悉平片机一般采用下拉输出,往往端门输出0驱动外没工作,和常见的正逻辑相反,容鉍搞错。想想我还不只一次犯这样的错误.要养成良好的程序
4、书写>J惯,比如标号对齐、参数对齐、注释对齐,这样看起米贷心悦也不容易出错。标号最好采用有意义的英文,这样比较直观,注释尽ffi详细准确,便于以后读悌,而且冇利于其它程序屮作为子程序模块的调用。还冇耍注意典型程序模块的积累,WS杂的程序也是山一个个小程序模块组成的,在初学阶段可以对典型程序比如:延时子程序、杏表子程序、按键消抖子程序等编写实践一次,这样印象深刻,便于以后引川。常见汇编语言指令解释:1234567Rn表示R0〜R7屮的一个#data表示8位的数值00H〜FFHdirect表示8位的地址00H〜FFH@Ri农示寄存器间接寻址以
5、能是R0或者R1@DPTR表示数据指针间接寻址bit表示位地址$表示当前地址寄存器寻址MOVA,R1将R1屮的数值赋予A直接寻址MOVA,3AH将地址3AH中的数值赋予A立即寻址MOVA,#3AH将3AH数值赋予A寄存器问址MOVA,@RO将R0中地址的数值赋予A变址寻址MOVCA,@A+DPTR以A屮的数值为地址偏移贵进行杏农相对寻址AJMPMATN跳转到行兮为MATNC处位寻址MOVC,7FH将位地址7FH的数值赋予CMOVA,#3AH数据传输、赋值命令PUSHdirect将direct为地址的数ffl压入堆拽中POPdirect将d
6、irect为地址的数似弹出堆栈XCHA,direct4^-direct中的数值与A进行交换ADDA,directdirect中的数值与INCdirect将direct中的数值加1SUBBA,direct将A屮的数值减去direct中的数值和Cy值,并保存在A中,如果想使用不带Cy减法,可以在运算前对Cy清零CLRCDECdirect将direct中的数值减1DAA川子对BCD码加减法后进行10进制调整MULAB将A和B相乘,丼把商八位放在B中,低八位放在A中DIVAB将A和B相除,并把商放在A屮,余数放在B屮ANLA,direct将A与d
7、irect屮的数值进行与运算,结果保留在A屮(与运算规律:冇0出0,全1出1)ORLA,direct将A与direct屮的数值进行或运算,结果保留在A屮(或运算规律:有1出1,全0出0)XRLA,direct将A与direct中的数值进行异或运算,结果保留在A中(异或运算规律:全0出0,全1出0,01、10出1)CRLA对A清零CPLA对A取反RLA对A中数右移RRA对A中数左移RLCA对A屮数带Cy右移RRCA对A中数带Cy左移SWAPA对A中的数髙4位低4位互相交换LJMP长跳转指令,64K地址范围AJMP短跳转指令,2K地址范围JZ
8、rel如果A为0就跳转到rel行号处JNZrel如果A不为0就跳转到rel行号处CJNEA,#data,rel如果A不等于data就跳转到rel行兮处DJNZR1,rel如果R1减1后不为0就