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

来源:https://www.cnblogs.com/iron2222/archive/2022/04/17/16156361.html
-Advertisement-
Play Games

重溫51彙編指令(附實驗) 寫在前面: 在電子控制的課上,老師帶我們重溫了一些51的彙編指令,有了一些新的思考,感覺非常的有趣,所以這裡進行總結和嘗試。 正文: 實驗平臺: keil5 實驗目標MCU: intel的80C51BH 51寄存器的簡單介紹: 通過debug視窗可以進行觀察 符號以及寄存 ...


重溫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ㄒ)/~~

祝大家早安、午安和晚安


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 常見的通知方式有:郵件,電話,簡訊,微信。簡訊和電話:通常是收費的,較少使用;郵件:適合帶文件類型的通知,較正 式,存檔使用;微信:適合告警類型通知,較方便。這裡說的微信,是企業微信。 本文目的:通過企業微信應用給企業成員發消息。 如何實現企業微信通知? 1、新建應用 登陸網頁版企業微信 (h ...
  • 上一篇咱們實現了多個表格數據合併到一個表格,本次咱們來學習如何將表格數據分開導出為PDF文件。 部分數據 然後需要安裝一下這個軟體 wkhtmltopdf 效果展示 將每個數據單獨導出為一個PDF 代碼實現 import pdfkit import openpyxl import os # Pyth ...
  • 前言 在以前的一篇文章中,為大家分享了《什麼是ORM?為什麼用ORM?淺析ORM的使用及利弊》。那麼,在目前的.NET(C#)的世界里,有哪些主流的ORM,SqlSugar,Dapper,Entity Framework(EF)還是ServiceStack.OrmLite?或者是你還有更好的ORM推 ...
  • 前言 最近刷B站的時候瀏覽到了老楊的關於Source Generator的簡介視頻。其實當初.Net 6剛發佈時候看到過微軟介紹這個東西,但並沒有在意。因為粗看覺得這東西限制蠻多的,畢竟C#是強類型語言,有些動態的東西不好操作,而且又有Fody、Natasha這些操作IL的庫。 最近寫前端比較多,看 ...
  • 在上一篇中我們簡單總結和介紹了Redis的幾個方面 1.使用Redis背景 2.Redis通信多路復用的基本原理 3.Redis基本數據結構 4.Redis持久化方式 這一篇我們使用簡單的業務場景來介紹Redis的分散式鎖和集群 1.分散式鎖 首先我們應該知道什麼是分散式鎖,用來做什麼的,解決了什麼 ...
  • 安裝軟體 pacman -S (軟體名):安裝軟體,若有多個軟體包,空格分隔 pacman -S --needed (軟體名):安裝軟體,若存在,不重新安裝最新的軟體 pacman -Sy (軟體名):安裝軟體前,先從遠程倉庫下載軟體包資料庫 pacman -Sv (軟體名):輸出操作信息後安裝 p ...
  • Linux 筆記 基本概念 UNIX 體繫結構 操作系統(內核):一種軟體,控制電腦硬體資源,提供程式運行環境。 ​ 內核的介面被稱為系統調用 (system call, 圖中的陰影部分)。公用函數庫構建在系統調用介面之上,應用程式既可使用公用函數庫,也可使用系統調用。(我們將在 1.11節對系統 ...
  • 【Linux篇】kali Linux下的su、sudo命令用法說明 ​ 總結一下su、sudo命令用法區別 【suy】 1、實驗環境 系統 版本 Windows11專業版 版本:21H2(OS內部版本 22000.613); kali Linux 版本:4.4.0-22593; (一)【su】Swi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...