編寫匯編語言常見錯誤分析_第1頁
編寫匯編語言常見錯誤分析_第2頁
編寫匯編語言常見錯誤分析_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、編寫匯編語言常見錯誤分析: 一、 MAS51匯編軟件匯編失敗原因分析: 單片機的匯編語言編寫時要注意一定的語法,詳細(xì)介紹可以參考相關(guān)參考書,語法錯誤匯會造成匯編失敗,常見的匯編錯誤如下:1標(biāo)號重復(fù) 常見于復(fù)制、粘貼程序時忘記修改標(biāo)號,造成出現(xiàn)多個相同的標(biāo)號,標(biāo)號是不允許重復(fù)的。 2標(biāo)點符號以全角方式輸入 MAS51程序要求標(biāo)點符號為半角方式,否則匯編失敗。可以在輸入:,;時切換到半角方式,或者在大寫狀態(tài)輸入標(biāo)點符號,這也是很容易犯而且不容易發(fā)覺的錯誤。 3注釋太長 有時為了以后讀懂程序,寫了很長的注釋,站長發(fā)現(xiàn)超過20個漢子時也會造成匯編失敗,解決辦法可以將太長的注釋分成多個注釋。 4數(shù)值FF

2、H 前遺漏0,根據(jù)要求應(yīng)該在af前加0,寫成0FFH 5字母O和數(shù)字0搞混 有時候這兩個字看上去完全相同,要注意哦 6標(biāo)號后邊遺漏:7標(biāo)號使用了特殊字符,比如:T1、T2、A、B這些字符有特定的含義,不允許用于標(biāo)號。 8AJMP跳轉(zhuǎn)超過2K地址,AJMP屬于短跳轉(zhuǎn)命令,有2K地址范圍的限制。 9JB P3.2,EXIT跳轉(zhuǎn)超過128127個地址范圍。這個是最容易出現(xiàn)的錯誤!你有可能程序剛才還能匯編編譯成功,你加了一段程序后程序就提示出錯了,你可以把 JB P3.2,EXIT 轉(zhuǎn)換成 JNB P3.2,UUUAJMP EXIT UUU: 10.字母I和數(shù)字1混淆,冒失鬼的常見問題。 11.創(chuàng)造發(fā)

3、明不存在的匯編語言指令,在編寫程序程序的過程中可不歡迎這種創(chuàng)新,這種指令匯編程序不支持,芯片也不認(rèn)可。 12.符號“:”“;”最好用半角書寫。 二、程序出錯:1寄存器重復(fù)調(diào)用 比如主程序中設(shè)定了R45,表示主程序循環(huán)執(zhí)行5次,而其中的一個延時子程序又用到R4,使R4的值發(fā)生紊亂,造成程序無法正常執(zhí)行。 2硬件不熟悉 單片機一般采用下拉輸出,往往端口輸出0驅(qū)動外設(shè)工作,和常見的正邏輯相反,容易搞錯。想想我自己,還不只一次犯這樣的錯誤要養(yǎng)成良好的程序書寫習(xí)慣,比如標(biāo)號對齊、參數(shù)對齊、注釋對齊,這樣看起來賞心悅目,也不容易出錯。標(biāo)號最好采用有意義的英文,這樣比較直觀,注釋盡量詳細(xì)準(zhǔn)確,便于以后讀懂,

4、而且有利于其它程序中作為子程序模塊的調(diào)用。還有要注意典型程序模塊的積累,再復(fù)雜的程序也是由一個個小程序模塊組成的,在初學(xué)階段可以對典型程序比如:延時子程序、查表子程序、按鍵消抖子程序等編寫實踐一次,這樣印象深刻,便于以后引用。 常見匯編語言指令解釋:1Rn 表示R0R7中的一個2data 表示8位的數(shù)值 00HFFH3direct 表示8位的地址 00HFFH4Ri 表示寄存器間接尋址 只能是R0或者R15DPTR 表示數(shù)據(jù)指針間接尋址6bit 表示位地址7$ 表示當(dāng)前地址寄存器尋址 MOV A,R1 將R1中的數(shù)值賦予A直接尋址 MOV A,3AH 將地址3AH中的數(shù)值賦予A立即尋址 MOV

5、 A,#3AH 將3AH數(shù)值賦予A寄存器間址 MOV A,R0 將 R0中地址的數(shù)值賦予A變址尋址 MOVC A,A+DPTR 以A中的數(shù)值為地址偏移量進行查表相對尋址 AJMP MATN 跳轉(zhuǎn)到行號為MATNC處位尋址 MOV C,7FH 將位地址7FH的數(shù)值賦予CMOV A,#3AH 數(shù)據(jù)傳輸、賦值命令PUSH direct 將direct為地址的數(shù)值壓入堆棧中POP direct 將direct為地址的數(shù)值彈出堆棧XCH A,direct 將direct中的數(shù)值與A進行交換ADD A,direct 將direct中的數(shù)值與INC direct 將direct中的數(shù)值加1SUBB A,di

6、rect 將A中的數(shù)值減去direct中的數(shù)值和Cy值,并保存在A中,如果想使用不帶Cy減法,可以在運算前對Cy清零 CLR CDEC direct 將direct中的數(shù)值減1DA A 用于對BCD碼加減法后進行10進制調(diào)整MUL AB 將A和B相乘,并把高八位放在B中,低八位放在A中DIV AB 將A和B相除,并把商放在A中,余數(shù)放在B中ANL A,direct 將A與direct中的數(shù)值進行與運算,結(jié)果保留在A中(與運算規(guī)律:有0出0,全1出1)ORL A,direct 將A與direct中的數(shù)值進行或運算,結(jié)果保留在A中(或運算規(guī)律:有1出1,全0出0)XRL A,direct 將A與d

7、irect中的數(shù)值進行異或運算,結(jié)果保留在A中(異或運算規(guī)律:全0出0,全1出0,01、10出1)CRL A 對A清零CPL A 對A取反RL A 對A中數(shù)右移RR A 對A中數(shù)左移RLC A 對A中數(shù)帶Cy右移RRC A 對A中數(shù)帶Cy左移SWAP A 對A中的數(shù)高4位低4位互相交換LJMP 長跳轉(zhuǎn)指令,64K地址范圍AJMP 短跳轉(zhuǎn)指令,2K地址范圍JZ rel 如果A為0就跳轉(zhuǎn)到rel行號處JNZ rel 如果A不為0就跳轉(zhuǎn)到rel行號處CJNE A,#data,rel 如果A不等于data就跳轉(zhuǎn)到rel行號處DJNZ R1,rel 如果R1減1后不為0就跳轉(zhuǎn)到rel行號處ACALL rel 調(diào)用rel子程序,2K地址以內(nèi)LCALL rel 調(diào)用rel子程序,64K地址以內(nèi)RET 子程序返回指令RETI 中斷程序返回指令NOP 空操作指令MOV C,bit 將位地址bit中的值賦予CCRL bit 將bit位地址清0SETB bit 將bit位地址置1CPL bit 將bit位地

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論