嵌入式(十九):指令集

1、指令集層面:
a、MCS51的6種尋址方法:
①、立即尋址(#),如mov a, #30H
②、寄存器尋址(R0-R7),如mov a,R3
③、寄存器間接尋址(只有@R0、@R1、@DPTR),如mov a,@R0
④、直接尋址,如mov a,30H
⑤、基址寄存器+變址寄存器間接尋址,如movc a,@a+DPTR
⑥、相對尋址,如cjne a,#30H,20H,將20H加入到當前地址。這條語句的意思是如果a=30H,就繼續順序進行,否則,跳轉到當前地址(PC)+相對地址(PC+20H)的地方繼續執行。
b、keil中MCS51彙編語言的“數字”以0-9開頭(16進制不行),“變量”和“名稱”用字母開頭,所以即便是16進制數,也必須加一個0。
c、MCS51指令集:
①、111條指令
②、指令的一般格式:
操作碼 [操作數1] [,操作數2] [,操作數3],
即目的/源 源 源
③、指令編碼與指令長度:1字節、2字節、3字節
④、指令執行時間:1個機器週期、2個機器週期、4個機器週期
⑤、5大類:數據傳送類(數據傳送)、算術邏輯運算類(算術運算、邏輯運算)、跳轉類(程序轉移、位操作)
d、所有的MCS51指令中,只能出現一次“工作寄存器”
e、a(累加器)是時間、空間綜合效率最高的,其次是“工作寄存器”
f、數據傳送類:第二欄爲機器碼
①、以A爲一方:

mov a,Ri E8-EF:E8=>把R0給a 1字節1週期
mov Ri,a F8-FF 1字節1週期
mov a,@Rj E6/E7:E6=>R0爲地址給a 1字節1週期
mov @Rj,a F6/F7 1字節1週期
mov a,direct E5 direct:地址的值給a 2字節1週期
mov direct,a F5 direct 2字節1週期

Ri表示R0-R7,Rj表示R0或R1。間接尋址只能是R0或R1。
direct表示一個8位地址
②、不以A爲一方

mov direct,Ri 88-8F direct 2字節2週期
mov Ri,direct A8-AF direct 2字節2週期
mov direct,@Rj 86-87 direct 2字節2週期
mov @Rj,direct A6-A7 direct 2字節2週期
mov direct1,direct2 85 direct2 direct1 3字節2週期

③、以立即數爲一方,傳送數字

mov A,#data 74 data 2字節1週期
mov Ri,#data 78-7F data 2字節1週期
mov @Rj,#data 76、77 data 2字節1週期
mov direct,#data 75 direct data 3字節2週期
mov DPTR,#data16 90 dataH dataL:給DPTR 3字節2週期

data爲8bit數,data16爲16bit數
④、訪問片外RAM/IO

movx A,@Rj E2、E3 1字節2週期
movx @Rj,A F2、F3 1字節2週期
movx A,@DPTR E0 1字節2週期
movx @DPTR,A F0 1字節2週期

⑤、訪問程序存儲器ROM

movc A,@A+DPTR 93 1字節2週期
movc A,@A+PC 83 1字節2週期

PC是唯一沒有地址的寄存器
⑥、數據交換

xch A,Ri C8-CF 1字節1週期
xch A,@Rj C6、C7 1字節1週期
xch A,direct C5 direct 2字節1週期
xchd A,@Rj D6、D7 1字節1週期
swap A D4 1字節1週期

xchd只對低半字節交換
swap是a的高、低半字節交換
⑦、堆棧操作

push direct C0 direct 2字節2週期
pop direct D0 direct 2字節2週期

push進棧:(sp)+1->(sp);(direct)->((sp))
先把sp的值+1,再把direct的值給以sp爲地址所指向的空間
pop出棧:((sp))->(direct);(sp)-1->(sp)
先把以sp爲地址所指向的空間給direct的值,再把sp的值-1
g、常用僞指令:
實際上就是假指令,不會產生機器代碼,不會佔用rom空間,只用於彙編過程中爲彙編程序提供彙編信息,在彙編之後就消失了,是給編譯器的。
①、起始僞指令,標號ORG nn,定義程序或數據塊的起始地址,指示此語句後面的程序或數據塊以nn爲起始地址連續存放在程序存儲器中。
②、字節定義僞指令,標號DB(字節常數或字符或表達式),指示在程序存儲器中以標號爲起始地址的單元裏存放的數爲字節數據(8位二進制數)。
③、字定義僞指令,標號DW(字常數或表達式),指示在程序存儲器中以標號爲起始地址的單元裏存放的數爲字數據(16位的二進制數)。
④、保留字節僞指令,標號DS (數值表達式),指示在程序存儲器中保留以標號爲起始地址的若干字節單元,其單元個數由數值表達式指定。
⑤、等值僞指令,(名字)標號EQU(數值表達式),表示 EQU 兩邊的量等值,用於爲標號或標識符賦值。
⑥、位定義僞指令,(名字)標號BIT(位地址),同 EQU 指令,不過定義的是位操作地址。
⑦、片內地址賦予位指令,(名字)標號DATA(表達式),把片內的數據地址賦予所給定的符號名,如TS DATA 70H,把TS定義到位置70H
⑧、片外地址賦予指令,(名字)標號XDATA(表達式),把片外的數據地址賦予所給定的符號名
⑨、間接內部地址賦予指令,(名字)標號IDATA(表達式),把間接的內部數據地址賦予所給定的符號名
⑨、彙編結束僞指令,標號END,指示源程序段結束。 END 指令放在程序的最後。若將 END 放在程序中間,那麼對於 END 後面的指令,彙編程序將不對其進行彙編。一個彙編語言源程序僅允許使用一個END 僞指令。
h、其他常用知識點:
①、DJNZ跳轉指令與循環
②、條件跳轉指令CJNE,不相等則跳轉
③、位移運算:RR、RL、RRC、RLC
④、其他邏輯運算:ORL、ANL、XOR與清零、置位、取反
⑤、CALL、RET與子程序、堆棧、SP寄存器
⑥、MACRO、ENDM與宏,宏與子程序。宏是一種批量處理的稱謂,計算機科學裏的宏是一種抽象,它根據一系列預定義的規則替換一定的文本模式。解釋器或編譯器在遇到宏時會自動進行這一模式替換。對於編譯語言,宏展開在編譯時發生,進行宏展開的工具常被稱爲宏展開器。宏就是一些命令組織在一起,作爲一個單獨命令完成一個特定任務。
⑦、包含文件include

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章