匯編語言(STC89C52)

?指令是計算機計算CPU根據人的意圖來執行某種操作的命令。一臺計算機所執行的全部指令的集合,稱為這個CPU的指令系統。而想要使計算機按照人們的要求完成一項工作,就必須讓CPU按順序執行預設的操作,即逐條執行人們編寫的指令。這種按照人民要求所編排的序列,稱為程序。編寫程序的過程叫做程序設計。程序時機語言就是編寫程序的一整套規則和方法,是實現人機交互的工具,分為機器語言、匯編語言和高級語言。我們本篇要了解的就是匯編語言。

匯編語言是用助記符、符號和數字等來表示指令的程序語言,相對于機器語言來說,匯編語言容易理解和記憶。接下來讓我們一起來學習一下匯編語言格式的基礎知識吧。

匯編語言格式

MCS-51匯編語言指令由4部分組成,其一般格式如下:

[標號:]? ? ? ?操作碼? ? ? [操作數]? ? ? [;注釋]

格式中的方括號表示可以沒有相應部分,可見,可以沒有標號、操作數和注釋,但至少要有操作碼

其操作數最多可以是3項:

[操作數1]? ?[,操作數2]? ?[,操作數3]

操作數1常稱為目的操作數,操作數2稱為源操作數,操作數3多為跳轉的目標。

例如:START : MOV? ? ? ?A,#23? ? ?;23H→A

這里“START”為標號,“MOV”是操作碼,“A,#23H”是操作數,“23H→A”為注釋。

標號是相應指令的標記,便于查找,用于程序入口、循環等。

操作碼規定了指令所要執行的操作,由2~5個英文字母表示。例如:MOX,ADD,RRC,JZ等。

操作數指出參與操作的數據來源、操作結果存放的地方以及跳轉的目標位置。(操作數可以是一個數(立即數),也可以是數據所在的空間地址,即在執行指令時從指定的空間地址讀取或寫入數據)

注釋主要使程序容易閱讀。

上面一堆話看著頭大:總結一下就是匯編指令由四個部分:標號、操作碼、操作數和注釋;操作數是必有的;一般都是操作碼和操作數(有時候還會有注釋)(例如:MOV A)

操作碼和操作數都有對應的二進制代碼,指令代碼由若干字節組成;根據字節數不同分為:

單字節指令、雙字節指令、三字節指令。

1.單字節指令

(1)指令碼中隱含著對某個寄存器的操作

例如:"INC A","MUL AB"等指令,只需要一個8個二進制代碼就能表示出執行什么操作、操作數是哪個。

比如數據指針增加1指令“INC DPTR”,其二進制指令代碼是A3H,格式如下:


? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? ? ? 0? ? ? ? ? 1? ? ? ? ? ?0? ? ? ? ? ?0? ? ? ? ? ? 0? ? ? ? ? ? 1? ? ? ? ? ? 1


(2)?由指令碼中的 r? r? r 或 i 指定操作數。

如累加器A向工作寄存器傳送數據指令“MOV? Rn,A”,其指令格式為:


? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? ? ? 1? ? ? ? ? 1? ? ? ? ? ?1? ? ? ? ? ?1? ? ? ? ? ? ?r? ? ? ? ? ?r? ? ? ? ? ? r


?2.雙字節指令

用1B表示操作碼,另1B表示操作數或操作數所在的地址。

其指令格式:


? ? ? ? ? ? ? ? ?操作碼? ? ? ? ? ? ? ? ?立即數或地址


MSC-51共有45條雙字節指令。

3.三字節指令

用1B表示操作碼,另外2B表示操作數或操作數所在的地址。

其指令格式:?


?? ? ? ? ? ? ? ? ?操作碼? ? ? ? ? ? ? ? ?立即數或地址? ? ? ? ? ? ? 立即數或地址


?上面部分不是很理解的同學不用著急,可以再看一遍熟悉一下,后面多看一些指令會幫助理解一些。接下來我們講一下尋址方式。

尋址方式

所謂尋址方式,是值CPU尋找參與運算的操作數的方式,或者尋找數據保存位置的方式。這一部分非常重要,大家要認真學習哦。里面的舉例如果看不懂的同學先不急,后面會講到指令系統分類,可以先大致了解一下了之后看最后一部分,然后再回來看這部分的例子哦。

立即尋址

立即尋址也稱立即數,它是在指令操作數中直接給出參加運算的操作數,其指令格式如
下:
如:? ? MOV? ?A ,? #70H? ;
這條指令的功能是將立即數70H傳送到累加器A中。

直接尋址

在直接尋址方式中,指令操作數域給出的是參加運算操作數地址。直接尋址方式只能用來表示特殊功能寄存器、內部數據寄存器和位地址空間。其中特殊功能寄存器和位地址空間只能用直接尋址方式訪問。
如:? ? ? ANL? 70H ,? ?#48H
表示70H單元中的數與立即數48H相“與”,結果存放在70H單元中。其中70H為直接地
址,表示內部數據存儲器RAM中的一個單元。

間接尋址

間接尋址采用R0或R1前添加“@”符號來表示。

例如,假設R1中的數據是40H,內部數據存儲器40H單元所包含的數據為55H,那么如下指令:
? ? MOV? ? ? ? A,? @R1
把數據55H傳送到累加器。

寄存器尋址

寄存器尋址是對選定的工作寄存器R7~RO、累加器A、通用寄存器B、地址寄存器和進位C中的數進行操作。其中寄存器R7~RO由指令碼的低3位表示,ACC、B、DPTR及進位位C隱含在指令碼中。因此,寄存器尋址也包含一種隱含尋址方式。
寄存器工作區的選擇由程序狀態字寄存器PSW中的RS1、RSO來決定。指令操作數指定的寄存器均指當前工作區中的寄存器。
如:? ? ? INC? ? R0? ? ?;(R0)+1→>R0

表1 低3位操作碼與寄存器Rn的關系

低3位r? r? r000001010011100101110111
寄存器RnR0R1R2R3R4R5R6R7

指令尋址

絕對尋址

絕對尋址是在指令的操作數中,直接提供目標位置的地址或地址的一部分。

例如:LJMP? ?SER_INT_T1? ? ;無條件跳轉到T1中斷服務程序SER_INT_T1? ?

相對尋址

相對尋址是將程序計數器PC中的當前值與指令第二字節給出的數相加,其結果作為轉移指令的轉移地址。轉移地址也稱為轉移目的地址,PC中的當前值稱為基地址,指令第二字節給出的數稱為偏移量。由于目的地址是相對于PC中的基地址而言,所以這種尋址方式稱為相對尋址。偏移量為帶符號的數,所能表示的范圍為+127 ~-128。這種尋址方式主要用于轉移指令。
如:? ?JC? ? ?80H? ? ;C=1 跳轉
表示若進位位C為0,則程序計數器PC中的內容不改變,即不轉移。若進位位C為1,則以PC
中的當前值為基地址,加上偏移量80H后所得到的結果作為該轉移指令的目的地址。

變址尋址

在變址尋址方式中,指令操作數指定一個存放變址基值的變址寄存器。變址尋址時,偏移量與變址基值相加,其結果作為操作數的地址。變址寄存器有程序計數器PC和地址寄存器DPTR
如:? ?MOVC? ? ?A, @A+DPTR
表示累加器A為偏移量寄存器,其內容與地址寄存器DPTR中的內容相加,其結果作為操作數的地址,取出該單元中的數送入累加器A。

位尋址

位尋址是指對一些內部數據存儲器RAM和特殊功能寄存器進行位操作時的尋址。在進行位操作時,借助于進位位C作為位操作累加器,指令操作數直接給出該位的地址,然后根據操作碼的性質對該位進行位操作。位地址與字節直接尋址中的字節地址形式完全一樣,主要由操作碼加以區分,使用時應注意。
如:? ? MOV? ? ? ? ? C,?20H? ? ?;? 片內位單元位操作型指令

以上是7種尋址方式

總結一下:

尋址方式操作數尋址空間及范圍示例指令
立即數尋址在程序存儲空間,隨指令讀出MOV? A,#46H
直接尋址片內RAM種,低128B和SFRMOV? A,46H
間接尋址

片內RAM:使用@Ri、SP;

范圍為256B,不含SFR

片外RAM:使用@Ri、@DPTR;

范圍為64KB

MOV? ? ? A,@R0

MOVX? @DPTR,A

寄存器尋址使用R0~R7、A、B、C、DPTRMOV? A ,R2
相對尋址操作數是相對地址;在程序存儲空間;范圍-128~127STMP? ?LOOP
絕對尋址操作數是目標地址;在程序存儲空間;范圍為64KB全空間LJMP? SECON
變址尋址

使用@A+PC、@A+DPTR;在程序存儲器中;

范圍分別在PC之后256B之內和64KB全空間

MOVC? A,@A+DPTR

MOVC? A,@A+PC

位尋址使用位地址;在位尋址空間;范圍-128~127SJMP? ? LOOP

指令中常用符號注釋?

Rn:n=0~7,工作寄存器R0~R7。

Ri:i=0、1。可作為地址指針的R0和R1。

#data:8位立即數

#data16:16為立即數

direct:8位片內RAM單元地址

addr16:程序存儲空間的16位目的地址,用于LCALL和LJMP指令中

rel:補碼形式的8位地址偏移量。

bit:片內RAM或SFR中的直接尋址位地址。

@:間接尋址方式的前綴符號。

(×):表示×中的內容。(地址)

((×)):表示由×中指向的地址單元的內容。(數據)

^:邏輯與

(與邏輯與的形狀一樣,開口方向相反(鍵盤沒找到那個符號)):邏輯或

→:指令操作流程,將內容送到箭頭指向的地方

指令系統分類

數據傳送類指令

算術運算指令


邏輯操作類指令


控制轉移類指令


布爾變量操作類指令

歡迎大家指出問題!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14569.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14569.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14569.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 寫的_string類,兼容std::string, MFC CString和 C# 的string

代碼例子: using namespace lf; int main() { CString s1 _t("http://www.csdn.net"); _string s2 s1; CString s3 s2; _pcn(s1); _pcn(s2); _pcn(s3); return 0; } 輸出: _Str.h /***************************************…

網創教程:WordPress插件網創自動采集并發布

網創教程:WordPress插件網創自動采集并發布 使用插件注意事項: 如果遇到404錯誤,請先檢查并調整網站的偽靜態設置,這是最常見的問題。需要定制化服務,請隨時聯系我。 本次更新內容 我們進行了多項更新和優化&#x…

深入解析kube-scheduler的算法自定義插件

目錄 ?編輯 一、問題引入 二、自定義步驟 三、最佳實踐考慮 一、問題引入 當涉及到 Kubernetes 集群的調度和資源分配時,kube-scheduler 是一個關鍵組件。kube-scheduler 負責根據集群的調度策略,將 Pod 分配到適當的節點上。kube-scheduler 默認使…

python爬蟲學習代碼1

百度翻譯:利用爬蟲技術模擬人工查詢英文單詞,將查到的信息保存到本地 import requests import json # 1.指定url post_url https://fanyi.baidu.com/sug # 2.UA標識 headers {"User-Agent": Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl…

pyqt6入門案例

效果預覽 hello.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Dialog</class><widget class"QDialog" name"Dialog"><property name"geometry"><…

android studio接入facebook踩坑1

今天在接入facebook第三方登錄的時候&#xff0c;點擊登錄按鈕&#xff0c;APP閃退&#xff0c;并報錯 java.lang.RuntimeException Failure delivering result ResultInfo{whonull,request64206,result-1} 新文章鏈接https://lengmo714.top/facebook1.html 如下圖&#xff1a;…

OpenGL學習入門及開發環境搭建

最近學習OpenGL開發&#xff0c;被各種openGL庫搞得暈頭轉向&#xff0c;什么glut, glew glfw glad等等。 可以參考這邊博客:OpenGL 下面的 glut freeglut glfw 都是個啥_glx wgl的中文-CSDN博客 glfw是glut的升級版&#xff0c;跨平臺的主要處理窗口 事件相關。 glad是glew…

React項目知識積累(四)

1.useMemo( ) 在 React 中&#xff0c;useMemo 是一個 Hook&#xff0c;用于記憶計算結果&#xff0c;只有當依賴項之一發生變化時&#xff0c;才會重新計算。這有助于避免不必要的計算和渲染&#xff0c;從而提高應用程序的性能。 基本語法如下&#xff1a; const memoized…

html多節點生成圖片并導出zip包

html多節點生成圖片并導出zip包 背景 在做項目時遇到一個要將html節點展示的圖片列表統一導出為zip包的需求。 難點 將html節點生成圖片將多張圖片加入zip包中&#xff0c;然后下載 解決html生成圖片問題 參考html截圖的思路使用 pnpm add html-to-image如何將圖片資源生成z…

鴻蒙OS開發:【一次開發,多端部署】(多設備自適應能力)簡單介紹

多設備自適應能力 介紹 本示例是《一次開發&#xff0c;多端部署》的配套示例代碼&#xff0c;展示了[頁面開發的一多能力]&#xff0c;包括自適應布局、響應式布局、典型布局場景以及資源文件使用。 名稱簡介 開發前請熟悉鴻蒙開發指導文檔&#xff1a;gitee.com/li-shizhe…

數據可視化技術頭歌測試合集

努力是為了不平庸~ 學習的最大理由是想擺脫平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;遲一天就多一天平庸的困擾 目錄 時間趨勢可視化-柱形圖 第1關&#xff1a;“大胃王”比賽數據柱形圖繪制——繪制柱形圖的基本步驟 任務描述 相關知識 觀察和處理數據 繪…

Linux中gcc/g++的基本使用

目錄 gcc/g的使用gcc/g是如何生成可執行文件的預處理編譯匯編鏈接 庫.o文件是如何與庫鏈接的&#xff1f; debug版本和release版本 gcc/g的使用 在windows中&#xff0c;我們在VS中編寫好了代碼之后就可以直接在VS中對源碼進行編譯等操作后運行 而在Linux下&#xff0c;我們可…

LeetCode 279 —— 完全平方數

閱讀目錄 1. 題目2. 解題思路3. 代碼實現 1. 題目 2. 解題思路 此圖利用動態規劃進行求解&#xff0c;首先&#xff0c;我們求出小于 n n n 的所有完全平方數&#xff0c;存放在數組 squareNums 中。 定義 dp[n] 為和為 n n n 的完全平方數的最小數量&#xff0c;那么有狀態…

vue 展示svg矢量圖可縮放拖動

使用插件&#xff1a;svg-pan-zoom <template> <!-- svg圖--><div id"svgContainer"></div> </template><script> import svgPanZoom from svg-pan-zoom import svgFile from ../datav/img/220kVscb.svg // 路徑根據實際情況調…

MySQL存儲過程實現累加運算 1+2+…+n 等于多少?

MySQL創建存儲過程&#xff0c;實現累加運算&#xff0c;計算 12…n 等于多少。具體的代碼如下 1、實現計算123…n的和 DELIMITER // CREATE PROCEDURE sp_add_sum_num(IN n INT) BEGIN DECLARE i INT; DECLARE sum INT; SET i 1; SET sum 0;WHILE i < n DO SET sum …

若依框架實戰指南:從入門到精通

在當今快節奏的軟件開發環境中&#xff0c;選擇一個高效、可靠的開發框架至關重要。若依框架&#xff08;RuoYi&#xff09;作為一個基于Spring Boot和MyBatis的快速開發平臺&#xff0c;以其強大的功能和易用性受到了廣泛歡迎。本文將詳細介紹若依框架的使用方式&#xff0c;包…

計算機組成結構—中斷和異常

一、基本概念和分類 計算機在執行程序的過程中&#xff0c;有時會遇到一些異常情況或者特殊請求&#xff1b;這時就需要計算機暫停正在運行的程序&#xff0c;轉而先去處理這些異常或特殊請求&#xff0c;處理結束之后再返回程序的斷點處繼續執行。這種處理方式就被稱為 “中斷…

頂堅北斗有源終端有什么功能跟用途

頂堅北斗有源終端作為現代衛星導航與通信技術融合的杰出代表&#xff0c;其用途廣泛且功能強大。在廣袤無垠的偏遠山區、深邃的海洋以及荒蕪的沙漠中&#xff0c;當用戶面臨移動通信信號無法覆蓋的困境時&#xff0c;北斗有源終端便成為了連接世界的橋梁。 該終端的核心功能之一…

PE文件(六)新增節-添加代碼作業

一.手動新增節添加代碼 1.當預備條件都滿足&#xff0c;節表結尾沒有相關數據時&#xff1a; 現在我們將ipmsg.exe用winhex打開&#xff0c;在節的最后新增一個節用于存放我們要增加的數據 注意&#xff1a;飛鴿的文件對齊和內存對齊是一致的 先判斷節表末尾到第一個節之間…

奧德彪的幸福VS碼農的幸福

奧德彪的幸福 非洲國家布隆迪是一個全球最不發達國家之一&#xff0c;大部分居民以農業為生&#xff0c;其中包括香蕉&#xff0c;人們拿香蕉用來做飯也用來釀酒。 香蕉產地距離布隆迪首都布瓊布拉很遠&#xff0c;而這個國家又缺乏規模化的物流企業&#xff0c;于是就誕生了…