80C51單片機----數據傳送類指令

目錄

一.一般傳送指令,即mov指令

1.16位傳送(僅1條)

2.8位傳送

(1)目的字節為A(累加器)

(2)目的字節為Rn(工作寄存器)

(3)目的字節為direct

(4)目的字節為@Ri

二.特殊傳送指令

1.讀ROM中常數表的表項指令MOVC

(1)以DPTR內容為基址

(2)以PC內容為基址

2.讀片外RAM及接口單元數據的指令MOVX

3.堆棧操作指令PUSH和POP

4.數據交換指令:XCH,XCHD和SWAP

(1)字節交換指令XCH

(2)半字節交換指令


看此篇文章前 ,建議回顧一下這篇文章(7種尋址方式):

http://t.csdnimg.cn/pzV8q

數據傳送類指令是指計算機指令集中用于在寄存器之間或者內存和寄存器之間傳輸數據的指令。這些指令通常用于將數據從一個位置移動到另一個位置,或者從內存中加載數據到寄存器,反之亦然。

數據傳送類指令通常不會直接影響標志寄存器的狀態。這意味著當執行數據傳送指令時,標志寄存器中的條件碼通常不會被修改。

標志寄存器通常包含了一些用于控制程序執行流程的條件標志,比如零標志、進位標志、符號標志等。這些標志在執行算術運算或者邏輯運算時會被設置或清除,用于后續的條件分支或者其他操作。

數據傳送指令,比如將數據從一個寄存器復制到另一個寄存器,或者將數據從內存加載到寄存器中,這些操作并不直接涉及算術或邏輯運算,因此一般不會修改標志寄存器的狀態。

傳送類指令分為兩類:一般傳送,特殊傳送

一.一般傳送指令,即mov指令

1.16位傳送(僅1條)

將16位的立即數,送到DPTR中,并且覆蓋原來DPTR中的內容

MOV DPTR, #data16

例:執行指令MOV DPTR,#1234H后,(DPH)=?,(DPL)=?

(DPTR)=#1234H,其中(DPH)=#12H (DPL)=#34H

2.8位傳送

通用格式:MOV <目的字節>,<源字節>;其中目的字節可以是A(累加器),Rn(工作寄存器),direct(寄存器的直接地址),@Ri(工作寄存器的間接尋址)

(1)目的字節為A(累加器)

其中“;”表示這條指令的注釋,例如MOV A,Rn ; A<-(Rn)表示把Rn的內容復制一份,放到A中,覆蓋A中原來的內容。

(2)目的字節為Rn(工作寄存器)

例1:執行指令? MOV R6,#50H后,(R6)=?

將立即數50H,放到R6中,并覆蓋R6中原來的內容,所以(R6)=#50H

例2:編程實現將R3中的內容送入R4中

這句話不能翻譯為MOV R3, R4,因為這句話目的字節是Rn時,原字節不能是工作寄存器

所以應該先將寄存器R3中的內容放到寄存器A中,再將A中的內容放到R4中

MOV A,R3

MOV R4,A

(3)目的字節為direct

例:若(R1)=#50和H,(50H)=#18H,執行指令MOV 40H,@R1后,(40H)=?

MOV 40H,@R1==MOV 40H,50H,所以(40H)=#18H

(4)目的字節為@Ri

例:若(R1)=#30H,(A)=#20H,執行指令MOV @R1,A后,(30H)=?

MOV @R1,A == MOV 30H,A,所以將A中的內容放到30H,將30H中原來的內容覆蓋,所以(30H)=#20H

二.特殊傳送指令

1.讀ROM中常數表的表項指令MOVC
(1)以DPTR內容為基址

MOVC A,@A+DPTR;A<-((A)+(DPTR))

答案:B?

(2)以PC內容為基址

MOVC A ,@A+PC; A<-((A)+(PC))

1000H:MOVC A,@A+PC,表示程序存儲器ROM中地址為1000H的存儲單元存儲的是MOVC A,@A+PC?

A的內容是30H,而PC是下一條從程序存儲器中取出指令的地址,所以PC=1001H,所以

MOVC A,@A+PC==MOVC A, 1031H,將地址為1031H的內容放到A中,覆蓋A中的原來的內容

所以把程序存儲器1031H單元的內容送入累加器A中

2.讀片外RAM及接口單元數據的指令MOVX

注:用@Ri尋址時,高8位地址由P2口提供

關于讀片外RAM:

MOV DPTR,#2040H:(DPTR)=#2040H

MOVX A,@DPTR:等價于MOVX A,2040H,表示將片外RAM,地址為2040H的內容,放到片內的累加寄存器A中,并且覆蓋A中原來的內容。這就是讀片外RAM

MOV 60H,A:把A中的內容復制一份,送到地址是60H的存儲單元中,覆蓋60H原來的內容

這個程序的功能:將片外RAM,地址是2040H的存儲單元的數據,傳送到了單片機內部地址是60H的存儲單元中,并且覆蓋了其原本的內容。

關于寫片外RAM:

MOV A,40H:把40H中的內容復制一份,放到A中,并且覆蓋A原本的內容

MOV?DPTR ,#2560H:(DPTR)=#2560H

MOVX @DPTR,A:等價于MOVX 2560H,A ,表示把A的內容復制一份,放入片外RAM,地址為2560H的存儲單元,并把其原來的內容覆蓋,這就是寫片外RAW

這個程序的功能:?將40H存儲單元的數據,傳送到片外RAM,地址為2560H的存儲單元中,覆蓋其原來的內容。

例:把外部數據存儲器2040H單元中的數據傳送到外部數據存儲器2560H單元中去,試用匯編語言編寫程序

思路:將片外RAM存儲器2040H單元中的數據傳送到累加寄存器A中,再從累加寄存器中寫數據到片外RAM中

MOV DPTR ,#2040H

MOVX?A,@DPTR

MOV DPTR,#2560H

MOVX @DPTR,A

注:不能寫為 MOVX #2560H,#2040H

MOVX訪問的是片外RAM,地址是16位二進制,P0口送低第八位,P2口送高八位,答案是B

(P2)=#20H,(R0)=#00H,MOVX A,@R0:表示讀片外RAM,片外RAM地址高八位由P2提供,第八位地址由Ri提供,所以這個指令可以表示將片外RAM 2000H中的內容送到A中,所以(A)=2000H中的內容=#80H

3.堆棧操作指令PUSH和POP

堆棧用于子程序調用時保護返回地址或老用于保護子程序調用之前的某些重要數據(即保護現場),還可以用于數據交換。

堆棧是一片存儲區,遵循“后進先出”原則,棧頂由SP指示。80C51的堆棧設在片內RAM低端的128個單元。

入棧指令:單片機先將SP的內容+1,再把寄存器的內容送到SP指向的內存單元中

執行PUSH A時,先將SP的內容+1((SP)=#61H),再將A的內容送入SP所指向的內存單元(61H):(61H)=#30H

執行PUSH A時,先將SP的內容+1((SP)=#62H),再將B的內容送入SP所指向的內存單元(62H):(62H)=#70H

所以SP的內容是62H,61H單元的內容是#30H,62H單元的內容是#70H

出棧指令:先將SP指向的單元的內容賦給寄存器,將SP的內容-1,賦給SP

由上題可知:SP的內容是62H,61H單元的內容是#30H,62H單元的內容是#70H

執行POP A,首先將SP指向的存儲單元的內容送給A,所以(A)=#70H,SP的內容-1,所以(SP)=#61H

執行POP B,首先將SP指向的存儲單元的內容送給B,所以(B)=#30H,SP的內容-1,所以(SP)=#60H

所以(SP)=#60H,(A)=#70H,(B)=#30H

可以看到單片機執行完這4條語句后,A,B的內容互換了

4.數據交換指令:XCH,XCHD和SWAP
(1)字節交換指令XCH

例:若(R0) = #80H,(A)= #20H。執行指令 XCH A,R0?后,(A)=? (R0) = ?

R0與A的內容呼喚,即(A)=#80H,(R0)=#20H

例:編程實現將內部數據存儲器30H和31H單元的內容互換

思路:將30H存儲單元的內容賦給A,再將A的內容與31H存儲單元的內容呼喚,最后將A的內容賦給30H單元。

MOV A,30H

XCH A,31H

MOV 30H,A

(2)半字節交換指令

XCHD是間址操作數的低半字節與A的低半字節互換。

XCHD A,@R0==XCHD A, 30H,因為(A)=#20H,其中2表示高半字節,0表示低半字節

執行XCHD,操作數的低半字節與A的低半字節互換,即(30H)=#60H,(A)=#27H

SWAP是累加器的高半字節和低半字節互換

(A)=03H

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

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

相關文章

超分辨率重建

意義 客觀世界的場景含有豐富多彩的信息&#xff0c;但是由于受到硬件設備的成像條件和成像方式的限制&#xff0c;難以獲得原始場景中的所有信息。而且&#xff0c;硬件設備分辨率的限制會不可避免地使圖像丟失某些高頻細節信息。在當今信息迅猛發展的時代&#xff0c;在衛星…

導入PIL時報錯

在導入PIL時,報以下錯誤: 查找原因 參考博客 Could not find a version that satisfies the requirement PIL (from versions: ) No matching distributi-CSDN博客,按照wheel后,安裝PIL時,報如下的錯誤。 查找說是python版本與wheel文件版本不同,確認本機python版本 …

C++ 指針進階:動態分配內存

工作原理 malloc 是 stdlib.h 庫中的函數,聲明為 void *__cdecl malloc(size_t _Size); 原理: malloc 函數沿空閑鏈表(位于內存 堆空間 中)申請一塊滿足需求的內存塊,將所需大小的內存塊分配給用戶剩下的返回到鏈表上; 并返回指向該內存區的首地址的指針,意該指針的類型…

ElasticSearch之cat allocation API

查看各節點上各個shard的硬件使用情況&#xff0c;命令樣例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/allocation?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果如下&#x…

MyBatis常見面試題總結

MyBatis常見面試題總結 #{} 和 ${} 的區別是什么&#xff1f; ${}是 Properties 文件中的變量占位符&#xff0c;它可以用于標簽屬性值和 sql 內部&#xff0c;屬于靜態文本替換&#xff0c;比如${driver}會被靜態替換為com.mysql.jdbc. Driver。 #{}是 sql 的參數占位符&…

Nginx模塊開發之http handler實現流量統計(2)

文章目錄 一、概述二、Nginx handler模塊開發2.1、代碼實現2.2、編寫config文件2.3、編譯模塊到Nginx源碼中2.4、修改conf文件2.5、執行效果 總結 一、概述 上一篇【Nginx模塊開發之http handler實現流量統計&#xff08;1&#xff09;】使用數組在單進程實現了IP的流量統計&a…

音視頻項目—基于FFmpeg和SDL的音視頻播放器解析(二十二)

介紹 在本系列&#xff0c;我打算花大篇幅講解我的 gitee 項目音視頻播放器&#xff0c;在這個項目&#xff0c;您可以學到音視頻解封裝&#xff0c;解碼&#xff0c;SDL渲染相關的知識。您對源代碼感興趣的話&#xff0c;請查看基于FFmpeg和SDL的音視頻播放器 如果您不理解本…

MySQL 排序和分組怎么做?

文章目錄 前言MySQL 排序語法在命令提示符中使用 ORDER BY 子句在PHP腳本中使用 ORDER BY 子句 MySQL 分組GROUP BY 語法實例演示使用 WITH ROLLUP 后言 前言 hello world歡迎來到前端的新世界 &#x1f61c;當前文章系列專欄&#xff1a;Mysql &#x1f431;?&#x1f453;博…

Cookie的基本使用

JavaScript Cookie&#xff08;JavaScript 的 Cookie&#xff09;是一種在Web瀏覽器中存儲和檢索用戶信息的機制。它允許網站在用戶計算機上存儲小型數據片段&#xff0c;以便在之后的會話中使用這些數據。Cookie通常用于持久化用戶首選項、跟蹤用戶行為和提供個性化體驗。 通…

堆的實現(堆的插入、堆的刪除等)超級全

堆的實現&#xff08;堆的插入、堆的刪除等&#xff09;超級全 文章目錄 堆的實現&#xff08;堆的插入、堆的刪除等&#xff09;超級全一、前期基礎知識1.樹結構①樹的定義②樹的相關概念③二叉樹④滿二叉樹和完全二叉樹a.滿二叉樹b.完全二叉樹 ⑤二叉樹的性質⑥二叉樹順序結構…

每日OJ題_算法_雙指針_力扣11. 盛最多水的容器

力扣11. 盛最多水的容器 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 難度 中等 給定一個長度為 n 的整數數組 height 。有 n 條垂線&#xff0c;第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成…

2023 最新 PDF.js 在 Vue3 中的使用

因為自己寫業務要定制各種 pdf 預覽情況&#xff08;可能&#xff09;&#xff0c;所以采用了 pdf.js 而不是各種第三方封裝庫&#xff0c;主要還是為了更好的自由度。 一、PDF.js 介紹 官方地址 中文文檔 PDF.js 是一個使用 HTML5 構建的便攜式文檔格式查看器。 pdf.js 是社區…

人工智能教程(二):人工智能的歷史以及再探矩陣

目錄 前言 更多矩陣的知識 Pandas 矩陣的秩 前言 在上一章中&#xff0c;我們討論了人工智能、機器學習、深度學習、數據科學等領域的關聯和區別。我們還就整個系列將使用的編程語言、工具等做出了一些艱難的選擇。最后&#xff0c;我們還介紹了一點矩陣的知識。在本文中&am…

vue打包上傳服務器的總結筆記

經歷了3個小時教訓&#xff0c;還是自己總結一下吧&#xff0c;致未來傻x的自己。 第一步&#xff0c;打開b站。搜索【vue打包】找到一個視頻教程 前端Vue項目打包部署實戰教程_嗶哩嗶哩_bilibili 這步是在看不懂下面操作的情況下用的 第一步&#xff1a;找到nginx的配置文件…

需求變更導致估算不精準 6大措施

需求變更可能導致估算不精準、項目成本增加、進度延遲等問題&#xff0c;如果不能準確地估算項目&#xff0c;往往會造成資源浪費和開發效率的降低&#xff0c;因此亟需解決因需求變更導致地估算不精準的問題。 一般來說&#xff0c;主要是從以下6個方面入手解決&#xff1a; 1…

【maven】【IDEA】idea中使用maven編譯項目,報錯java: 錯誤: 找不到符號 【2】

idea中使用maven編譯項目,報錯java: 錯誤: 找不到符號 錯誤狀況展示: 如果報這種錯,是因為項目中真的找不到報錯的方法或者枚舉 字段之類的,但實際是 : 點擊 File Path

OSG粒子系統與陰影-霧效模擬(1)

虛擬現實中有很多效果&#xff0c;如雨效、雪效、霧效等&#xff0c;這些都可以通過粒子系統來實現。一個真實的粒子系統的模式能使三維場景達到更好的效果。 本章對OSG粒子系統的使用以及生成自定義粒子系統的方法進行了詳細介紹最后還附帶說明了陰影的使用方法。在實時的場景…

(HAL庫版)freeRTOS移植STMF103

正點原子關于freeRTOS的教程是比較好的&#xff0c;可惜移植的是標準庫&#xff0c;但是我學的是Hal庫&#xff0c;因為開發速度更快&#xff0c;從最后那個修改SYSTEM文件夾的地方開始替換為下面的內容就可以了 5.修改Systick中斷、SVC中斷、PendSV中斷 將SVC中斷、P…

pairplot

Python可視化 | Seaborn5分鐘入門(七)——pairplot - 知乎 (zhihu.com) Seaborn是基于matplotlib的Python可視化庫。它提供了一個高級界面來繪制有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝&#xff0c;從而使得作圖更加容易&#xff0c;不需…

紅黑樹詳解

紅黑樹的概念與性質 前置知識 在學習紅黑樹之前&#xff0c;最好有二叉查找樹和AVL樹的基礎&#xff0c;因為紅黑樹本質就是一種特殊的二叉查找樹&#xff0c;而紅黑樹的操作中需要用到AVL樹中旋轉的相關知識。至于二叉查找樹和AVL樹&#xff0c;可以參考如下兩篇博客&#xf…