匯編語(yǔ)言基礎(chǔ)
操作碼與操作數(shù)之間必須用空格分開(kāi),操作數(shù)與操作數(shù)之間必須用逗號(hào)“,”分開(kāi)。帶方括號(hào)的項(xiàng)可有可無(wú),稱(chēng)為可選項(xiàng)。
由指令格式可見(jiàn),操作碼是指令的核心,不可缺少。例如一條傳送指令的書(shū)寫(xiě)格式如為:MOV A,3AH ;(3AH)A它表示將3AH存儲(chǔ)單元的內(nèi)容送到累加器A中。
指令的長(zhǎng)度所謂指令的長(zhǎng)度,就是描述一條指令所需要的字節(jié)數(shù),用一個(gè)字節(jié)能描述的指令我們叫1字節(jié)指令,同理,用兩個(gè)字節(jié)描述的叫2字節(jié)指令,用三個(gè)字節(jié)描述的指令就叫3字節(jié)指令。
在這里我們對(duì)80C51的111條指令進(jìn)行了分類(lèi):1字節(jié)指令共有49條,2字節(jié)指令共有45條,3字節(jié)指令共有17條,到底哪條指令是1字節(jié)、2字節(jié)或者3字節(jié)指令,在我們后面的指令表中都可以查閱到的。這里有一個(gè)問(wèn)題請(qǐng)大家引起注意,在前面的課程中,我們學(xué)習(xí)過(guò)指令計(jì)數(shù)器PC,PC是一個(gè)16位的計(jì)數(shù)器,那么這個(gè)指令計(jì)數(shù)器是怎樣來(lái)計(jì)數(shù)的呢?
我們的指令有1字節(jié)、2字節(jié)、3字節(jié)指令。是不是每執(zhí)行一個(gè)字節(jié),這個(gè)指令計(jì)數(shù)器PC就自動(dòng)加1?答案是錯(cuò)誤的!!實(shí)際上,PC始終是跟蹤著指令的,并不是以字節(jié)數(shù)來(lái)相加。在我們存放程序的ROM中,是一個(gè)字節(jié)一個(gè)字節(jié)的向后執(zhí)行,但程序計(jì)數(shù)器PC并不是每加一個(gè)字節(jié)就加1,它是對(duì)特定的某一條指令執(zhí)行完了之后,相應(yīng)的程序計(jì)數(shù)器PC才加1,那么這條指令可能是1個(gè)字節(jié),也可能是2個(gè)或者3個(gè)字節(jié)。這個(gè)大家要引起重視。
在學(xué)習(xí)指令系統(tǒng)時(shí),先要了解某些符號(hào)的意義,現(xiàn)說(shuō)明如下:
Rn :當(dāng)前選中的工作寄存器組R0-R7(n=0-7)。它在片內(nèi)數(shù)據(jù)存儲(chǔ)器中的地址由PSW中的RS1和RS0確定,可以是00H-07H(第0組)、08H-0FH(第1組)、10H-17H(第2組)、18H-1FH(第3組)。
Ri :當(dāng)前選中的工作寄存器組中可作為地址指針的兩個(gè)工作寄存器R0和R1(i=0或i=1)。它在片內(nèi)數(shù)據(jù)存儲(chǔ)器中的地址由RS0及RS1確字,分別為00H、01H;08H、09H;10H、11H;18H、19H。
Direct :8位片內(nèi)RAM單元(包含SFR)的直接地址
#data :代表指令中8位的常量數(shù)據(jù)
#data16 :代表指令中16位的常量數(shù)據(jù)
addr16 :LCALL與LJMP所使用的16位目的地址
addr11 :ACALL與AJMP所使用的11位目的地址
rel :指程序遇條件跳躍時(shí)的相對(duì)地址,往前最多可以跳128個(gè)字節(jié),往后最多可以跳127個(gè)字節(jié)。
bit :特殊目的寄存器或內(nèi)部數(shù)據(jù)RAM中可直接尋址的位。
@ :間接尋址方式中,表示間址寄存器的符號(hào)
/ :位操作指令中,表示對(duì)該位先取反再參與操作,但不影響該位原值。
X :片內(nèi)RAM的直接地址或寄存器
(X) :在址接尋址方式中,表示直接地址X中的內(nèi)容;在間接尋址方式中,表示由間址寄存器X指出的地址單元中的內(nèi)容。
→ :指令操作流程,將箭頭左邊的內(nèi)容送入箭頭右邊的單元內(nèi)。
← :指令操作流程,將箭頭右邊的內(nèi)容送入箭頭左邊的單元內(nèi)。
評(píng)論