基於MCS 51核心的彙編操作符筆記

2021-07-30 10:16:14 字數 3085 閱讀 7414

資料傳送類指令:算術運算類指令:

只能是8位

add 不帶進製相加

addc 帶進製相加

inc 加1指令

subb 減法指令,運算元-源運算元-cy

dec 減1指令

daa 十進位制調整指令;

mul 乘法指令

div 除法指令

算術標誌指令將會影響進製標誌cy,輔助進製標誌ac,溢位標誌ov:運算時,如果d7進製,則cy被置1,否則清零;如果d3位有進製,則ac將會被置1,否則會被清零;對於無符號數相加,若cy置1,則表示d7進製溢位(大於255);對於無符號數,若和數溢位(大於127或小於-128),則ov被置1;

邏輯運算指令:

clr 清0運算元

cpl 對運算元按位取反

anl 與

orl 或

xrl 異或

rl 運算元左移1位

rlc 帶進製標誌左移1位

rr 右移一位

rrc 帶進製標誌右移一位

控制轉移指令

ajmp

ljmp

sjmp

jmpacall

lcall

jzjnz

cjne

djnz

1條件轉移指令

絕對轉移指令 ajmp addr11;pc→pc+2+addr11

2kb範圍內無條件跳轉指令,執行該指令時,先將pc+2,然後再將addr11的值送入pc10pc0,而pc11p15保持不變,這樣得到跳轉的目的位址。

相對轉移指令 sjmp rel;pc→pc+2+rel

執行指令時,先將pc+2,再把指令中帶符號的偏移量加上pc上,得到跳轉的目的地位址送入pc;目標位址=源位址+2+rel。源位址是sjmp指令操作碼(pc)的所在地;相對偏移量rel是乙個用補碼表示的8位帶符號數,轉移範圍為當前pc的值的+127~-128共256個單元;

若要求用動態停機可以用simp指令來實現:」here:sjmp here;」或者」here:sjmp ;」;」

;」表示本指令所在單元位址 ($讀dollar)

長跳轉指令 addr16; addr16→pc

執行指令時,addr16可以指向64kb程式儲存器中的任何位址,並且不影響標誌位;

間接轉移指令(散轉指令)

jmp @a+dptr; a+dptr→pc

將a中的8位無符號數和資料指標dptr的16位數相加,然後將之後送到pc,並不改變a和dptr的值,也不影響標誌;間接轉移指令特點是採用變址方式實現無條件轉移,特點是轉移位址可以在程式執行中加以改變,從可以實現多支轉移。所以一條指令可以完成多條條件判斷轉移指令的功能;

2 條件轉移指令

jz rel;a= 0轉移

jnz rel;a≠0轉移;

這種類轉移一句累加器a的值是否為0。滿足條件時轉移(這個轉移就相當於乙個相對轉移指令pc+2+rel→pc),條件不滿足時則順序執行下面一條指令。

3 比較轉移指令

mcs51沒有專門的比較指令,但提供了下面4條比較不相等轉移指令:

cjne a,direct,rel; a≠direct轉移

cjne a,#data,rel; a≠data轉移

cjne rn,#data,rel; rn≠data轉移

cjne @ri,#data,rel; ri≠data轉移

比較運算元和源運算元的大小,如果不想等就轉移。相等的話就不轉移,繼續執行下面的程式;轉移位址的計算計算方法與上述兩條指令相同。如果第乙個運算元(無符號整數)小於第二個運算元,cy將會被置1,否則0,但是不影響任何運算元的內容;

4 減1不為0轉移指令

djnz rn,rel;rn-1→rn ≠0轉移

djnz direct,rel;direct-1→direct ≠0轉移

這兩條指令把原運算元減1,結果送還到源運算元中,如果結果不為0則轉移;

5 呼叫及返回指令

絕對呼叫指令 acall addr11

長呼叫指令 lcall addr16

子程式返回指令 ret

中斷返回指令 ret1

空操作指令 nop; pc+1→pc

6 位操作指令

操作範圍為內部ram的位定址區20h2fh單元中連續的128位,以及特殊功能暫存器中可以進行位定址的各位;位位址為(00h7f);

位操作指令包括布林變數的傳送,邏輯運算,控制轉移等指令,共有17條指令,所用到的助記符有mov,clr,cpl,setb,anl,orl,jc,jb,jnb,jbc共11種;

在布林處理機制中,進製標誌cy的作用與cpu中的累加器a,通過cy完成位的傳送和邏輯運算。

指令中位位址的表達方式有以下幾種:直接位址方式(90h),點操作符方式(ie.0),位名稱方式(ex0)等;

(1)位資料傳送指令

mov c,bit;bit→cy

mov bit,c;cy→bit

(2)位變數修改指令

clr c;0→cy

clr bit;0→bit;

cpl bit;/bit→bit

cpl c;/cy→cy

setb c;1→cy;

setb bit;1→1

(3)位變數邏輯與指令

anl c,bit; (cy)^(bit) →cy

anl c,/bit; (cy)^(/bit) →cy

(4)位變數邏輯或指令

orl c,bit; (cy)|(bit) →cy

orl c,/bit; (cy)|(/bit) →cy

(5)位變數條件條件轉移指令

jc rel 若cy=1,則轉移 pc+2+rel→pc

jnc rel 若cy=0, 則轉移 pc+2+rel→pc

jb bit,rel 若bit=1,則轉移,pc+3+rel→pc

jnb bit,rel 若bit=0,則轉移,pc+3+rel→pc

jbc bit,rel 若bit=1,則轉移,pc+3+rel→pc,並且0→bit;

(注意:只有jbc指令執行後,bit位被清0)

基於MCS 51核心的彙編學習筆記

資料傳送類指令 算術運算類指令 只能是8位 add 不帶進製相加 addc 帶進製相加 inc 加1指令 subb 減法指令,運算元 源運算元 cy dec 減1指令 daa 十進位制調整指令 mul 乘法指令 div 除法指令 算術標誌指令將會影響進製標誌cy,輔助進製標誌ac,溢位標誌ov 運算...

基於MCS 51核心的彙編 子程式設計

子程式是什麼?實際程式設計過程中,為減輕程式 的量,將一些經常用到的指令集稱之為子程式 這裡可以模擬一下c語言中的延時函式delay 等等 功能 為了解決同一組程式 被反覆使用的麻煩操作,每次要用到的時候呼叫一下就好了 子程式被調執行特點 1.被其他程式呼叫 2.執行完後又需要把執行流程返回到該子程...

MCS 51和8051的區別

0 本文引自 嵌入式和微控制器系統 mcs是intel公司微控制器的系列符號。intel推出有mcs 48 mcs 51 mcs 96系列微控制器。mcs 51系列即包括三個基本型80c31 8051 8751,以及對應的低功耗型號80c31 8051 87c51,因而mcs 51特指intel的這...