重溫51匯編指令(附實驗)


重溫51匯編指令(附實驗)

寫在前面:

在電子控制的課上,老師帶我們重溫了一些51的匯編指令,有了一些新的思考,感覺非常的有趣,所以這里進行總結和嘗試。

正文:

實驗平台:

keil5

實驗目標MCU:

intel的80C51BH

51寄存器的簡單介紹:

通過debug窗口可以進行觀察

符號以及寄存器意義:

1、r0~r7寄存器組的八個工作寄存器
2、a是累加器,用於運算以及存放數據
3、b是專用寄存器,用於MUL(乘法)、DIV(除法)存放第二操作數、乘積的高位字節、除法余數等。
4、psw屬於程序狀態字


4.1 p是奇偶標志位

p=1則累加器a中1的個數為奇數;p=0則累加器a中1的個數為偶數。

4.2 ov是溢出標志位,ov=0沒有溢出;ov=1溢出

這里進行完ab的乘法運算很顯然是溢出了,高8位放到了b中,低8位放在了a里。

4.3 rs是當前寄存器選擇位,就是說選擇不同的寄存器組。

4.4 f0用戶標志位,用戶可用軟件自定義的一個標志位。

4.5 cy進位標志位,存放算術運算的進位標志,布爾運算中作累加位使用。

執行add指令之前,a是80H,r4是8aH,相加應該是10aH(都是16進制)。

執行完add指令之后,a變成了0aH,進位標志位cy變成了1。

ac輔助進位標志位,做BCD運算時,低四位向高四位進位或錯位時,置1。

5、sp棧指針寄存器

默認sp的值位0x07,在執行堆棧操作、程序調用、子程序返回以及中斷返回等指令時,sp的值自動+1或-1

6、dptr數據指針寄存器
7、pc程序計數器

程序執行到什么位置了

states沒有查到專門解釋,我覺的可能是指令執行的數目,因為沒執行一條指令會+1,但有時候執行復雜一點的指令,會+3或者+4。

sec這個也沒有查到,我感覺應該和時間有關。

匯編指令:

每一種MCU都有自己獨特的匯編指令,有相似的地方,但也有很大的不同。所以匯編語言可移植性很不好,但勝在簡單高效。

指令格式

[標號]:操作碼 [目的操作數],[源操作數] ; [注釋]

指令分類

  • 數據傳送指令 29條

    • 把源地址中的操作數傳送到目的地址(寄存器)中
  • 算術運算指令 24條

    • 加減乘除等,第一操作數放在累加器A中,第二操作數放在某個寄存器或者片內RAM中,運算結果會保存在A中,因為運算產的進位標志、奇偶標志和溢出標志等保存在PSW中。
  • 邏輯運算操作指令 24條

    • 邏輯操作與循環移位兩類指令

    • 邏輯運算:邏輯乘、邏輯加、邏輯取反、異或等。

    • 也是先把一個操作數放在A中,執行結果也放在A中

  • 位操作指令 17條

  • 控制轉移指令 17條

尋址方式

  • 直接尋址

    • MOV A,36H把內部RAM 36H中的數據放在累加器A中
  • 立即尋址

    • MOV A,#20H操作數前加‘#’號就是立即數,不加就是直接地址
  • 寄存器尋址

    • MOV A,R0把當前R6中的內容送到累加器A中
  • 間接尋址

    • MOV R0,#40H

    • MOV A,@R0

數據傳送類指令

MOV內部數據傳送指令

MOVC程序存儲器讀指令

MOVX外部數據傳送指令

XCH整字節交換指令

XCHD半字節交換指令

算術運算類指令

ADD不帶進位的加法指令

ADDC帶進位的加法指令

  • 一開始給累加器a=0ach,再向累加器a中加98h,1010 1100 +1001 1000=1 0100 0101
  • 會出現進位,所以這個時候進位標志位cy為1,輔助進位標志位ac為1,溢出標志位ov為1

INC加1指令

SUBB減法指令

DEC減一指令

DA十進制調整指令

68+89=157 結果a=57 進位標志位cy=1,這就是BCD加法程序

MUL乘法指令

注意乘積,高八位再b中,低八位在a中

DIV除法指令

邏輯運算指令

  • ANL與
  • ORL或
  • XRL異或
  • CLR清零

移位指令

  • RL累加器左環移
  • RR累加器右環移
  • RLC累加器帶進位左環移
  • RRC累加器帶進位右環移

控制轉移類指令

  • LJMP長轉移指令
  • AJMP絕對轉移指令
  • SJMP短轉移指令
  • JMP間接轉移指令
  • JZ條件轉移指令(a=0)
  • JNZ條件轉移指令(a不等於0)
  • CJNE比較轉移指令
  • DJNZ減一條件轉移指令
  • LCALL調用指令(長)
  • ACALL絕對調用指令
  • RET返回指令(子程序)
  • RETI返回指令(中斷服務程序)

寫在最后:

最后,希望上海疫情早點過去,我不想我的學生生活天天呆在宿舍里。/(ㄒoㄒ)/~~

祝大家早安、午安和晚安


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM