




已閱讀5頁,還剩84頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第二章 MCS-51指令系統(tǒng),2.1 MCS-51指令系統(tǒng)的分類及一般說明 2.2 數(shù)據(jù)傳送類指令 2.3 算術操作類指令 2.4 邏輯操作類指令 2.5 控制程序轉移類指令 2.6 布爾變量操作類指令 2.7 小結,每條指令在執(zhí)行時要花去一定的時間,以機器周期為單位。按指令執(zhí)行時間分類: 單周期(64條);雙周期(45條);4周期(2條),按指令的功能分類,可分為5大類: 數(shù)據(jù)傳送類(29條);算術運算類(24條) 邏輯運算及移位類(24);控制轉移類(17條) 位操作類(17條),每條指令在程序存儲器ROM中占據(jù)一定的空間,以字節(jié)為單位。按指令所占字節(jié)數(shù)分類: 單字節(jié)(49條);雙字節(jié)(46條);3字節(jié)(16條),2.1 MCS-51指令系統(tǒng)的分類和一般說明,標號:操作碼 操作數(shù);注釋,一、 指令基本格式,方括符 表示可選項 標號代表指令所在地址,1-8個字母/數(shù)字,“:”結尾,標號:操作碼 目的操作數(shù),源操作數(shù);注釋,START:MOV A,#30H ;將立即數(shù)30H傳送至A中 MOV DPTR,#5678H ;將立即數(shù)5678H傳送至DPTR, 標號:指令的符號地址。, 用于一段功能程序的識別標記或控制轉移地址。,指令前的標號代表該指令的地址, 是用符號表示的地址。,一般用英文字母和數(shù)字組成。, 標號必須用冒號“ :”與操作碼分隔。, 操作碼:表示指令的操作功能。, 操作碼用助記符表示, 它代表了指令 的操作功能。, 操作碼是指令的必需部分, 是指令的核心,不可缺少。, 操作數(shù):參加操作的數(shù)據(jù)或數(shù)據(jù)地址。, 操作數(shù)與操作碼之間用空格分隔,操作數(shù)與 操作數(shù)之間用逗號“,”分隔。, 操作數(shù)可以是數(shù)據(jù),也可以是數(shù)據(jù)的地址、 數(shù)據(jù)地址的地址或操作數(shù)的其他信息。, 操作數(shù)可分為目的操作數(shù)和源操作數(shù)。,操作數(shù)可用二進制數(shù)、十進制數(shù)或十六進制 數(shù)表示。, 操作數(shù)的個數(shù)可以是03個。, 注釋:指令功能說明。, 注釋屬于非必需項,是為便于閱讀, 對指令功能作的說明和注解。, 注釋必須以“;”開始。,二、指令分類, 按指令功能分類: 可分為數(shù)據(jù)傳送類、算術運算類、 邏輯運算類、位操作類和 控制轉移類 等5大類指令。,80C51共有111條指令。, 按指令長度分類: 可分為1字節(jié)、2字節(jié)和3字節(jié)指令。, 按指令執(zhí)行時間分類: 可分為1機周、2機周和4機周指令。,三、指令中常用符號,分類介紹各類指令之前, 先對描述指令的一些符號意義進行一些簡單約定: (1) Ri和Rn: R表示當前工作寄存器區(qū)中的工作寄存器, i表示0或1,即R0和R1。n表示07,,即R0R7, 當前工作寄存器的選定是由PSW的RS1和RS0位決定的。 (2) data: 表示立即數(shù), data為8位常數(shù)。 data是指包含在指令中的8位立即數(shù)。 (3) data16: 包含在指令中的16位立即數(shù)。,(4) rel: 相對地址, 以補碼形式表示的地址偏移量, 范圍為 -128+127, 主要用于無條件相對短轉移指令SJMP和所有的 條件轉移指令中。 (5) addr16: 16位目的地址。目的地址可在全部程序存儲器 的64 KB空間范圍內, 主要用于無條件長轉移指令LJMP和子程 序長調用指令LCALL中。 (6) addr11: 11位目的地址。目的地址應與下條指令處于相 同的2 KB程序存儲器地址空間范圍內, 主要用于絕對轉移指令 AJMP和子程序絕對調用指令ACALL指令中。 (7) direct: 表示直接尋址的地址, 即8位內部數(shù)據(jù)存儲器 RAM的單元地址(0127/255), 或特殊功能寄存器SFR的地 址。 對于SFR可直接用其名稱來代替其直接地址。,(8) bit: 內部數(shù)據(jù)存儲器RAM和特殊功能寄存器 SFR中的可直接尋址位地址。 (9) : 間接尋址寄存器或基地址寄存器的前綴, 如 Ri, DPTR, 表示寄存器間接尋址。 (10) (X): 表示X中的內容。 (11) (X): 表示由X尋址的單元中的內容, 即(X)作 地址, 該地址的內容用(X)表示。 (12) / 和符號: /表示對該位操作數(shù)取反, 但不影 響該位的原值。表示指令操作流程, 將箭頭一方 的內容, 送入箭頭另一方的單元中去。,四、尋址方式,尋址就是尋找操作數(shù)的地址。 尋址方式:指令按地址獲得操作數(shù)的方式 MCS-51有七種尋址方式,且一條指令可能含多種尋 址方式。 寄存器尋址 立即尋址 寄存器間接尋址 直接尋址 變址尋址(基址寄存器+變址寄存器間接尋址) 相對尋址 位尋址,(1)寄存器尋址 選定某寄存器, 自該寄存器中讀取或存放操作數(shù), 以完成指令規(guī)定的操作, 稱為寄存器尋址。 例如: MOV A, R0 ;設指令執(zhí)行前 A=20H,R0=40H,執(zhí) 行指令后,A=40H?,R0=40H? 解析:指令執(zhí)行如下所示,A,R0,(2)立即尋址 立即尋址是直接給出操作數(shù),操作數(shù)緊跟在操作碼的后面, 作為指令的一部分與操作碼一起存放在程序存儲器內, 可以立即得到并執(zhí)行, 不需要另去寄存器或存儲器等處尋找和取數(shù), 故稱為立即尋址。 該操作數(shù)稱為立即數(shù), 并在其前冠以“”號作前綴, 以表示并非地址。 立即數(shù)可以是8位或16位, 用十六進制數(shù)表示,一般用于為寄存器或存儲器賦常數(shù)初值。 例如: 8位立即數(shù): MOV A,#40H ;A40H 16位立即數(shù): MOV DPTR,#2100H ;DPTR2100H ADD A,#05H ;(A)(A)+立即數(shù) 05H,(3)寄存器間接尋址,MOV A,R0 ;將以R0中內容為地址的存儲單元中的數(shù)據(jù) 傳送至A中 MOVX A,DPTR ;將外RAM DPTR所指存儲單元中的數(shù)據(jù) 傳送至A中 PUSH PSW ;將PSW中數(shù)據(jù) 傳送至堆棧指針SP所指的存儲單元中 MOV R1,#0FH ;(30H)立即數(shù)0FH,寄存器中的內容是一個地址,由該地址單元尋址到所需的操作數(shù)。間接尋址用間址符“”作為前綴。,【例】,注意: 1)“間接”表示某寄存器中的“內容”只是一個“單元地址”,這個地址單元中存放的數(shù)據(jù)才是要找的“操作數(shù)”。 2)符號“”表示“在”,其含義與讀音皆同“at”。,例: MOV A,R0 ;A (R0) 設指令執(zhí)行前 A=20H,R0=40H,地址為40H存儲器單元內容如圖所示。執(zhí)行指令后, A=34H? ,R0 =40H? , (40H)=34H?,解析:指令執(zhí)行如下所示:,R0=40H,A,(4)直接尋址 直接尋址是給出操作數(shù)的直接地址。直接尋址范圍為內RAM 128B和特殊功能寄存器。訪問特殊功能寄存器SFR只能采用直接尋址方式。 例:設存儲器兩個單元的內容如圖所示, 執(zhí)行指令 MOV A,40H 后 A =56H? 直接尋址方式對數(shù)據(jù)操作時,地址是固定值,而地址所指定的單元內容為變量形式。,思考題:直接尋址方式指令和立即尋址方式指令的形式有什么不同?,在本單片機中規(guī)定:訪問特殊功能寄存器SFR只能采用直接尋址方式。 例如: MOV A, SP ; (A) (SP) MOV A, 81H ; (A) (SP) MOV P1, #5AH ; (P1)(#5AH) MOV 90H,#5AH ; (P1)(#5AH) MOV B, 30H ; (B) (30H) 在本單片機中訪問特殊功能寄存器SFR只能采用直接尋址方式的原因是SFR分布在80H0FFH范圍內,而52系列單片機有256字節(jié)的片內RAM,其中的80H0FFH的RAM與SFR所占地址重疊。于是規(guī)定: 80H0FFH范圍內的RAM只能用寄存器間接尋址方式,而SFR只能用直接尋址方式。從而解決了地址沖突的問題。 例如: MOV A, 90H 等效于 MOV A, P1 屬直接尋址,(5)變址尋址 基址寄存器加變址寄存器間接尋址, 簡稱變址尋址。 它以數(shù)據(jù)指針DPTR或程序計數(shù)器PC作為基址寄存器, 累加器A作為變址寄存器, 兩者的內容相加形成16位程序存儲器地址, 該地址就是操作數(shù)所在地址。 數(shù)據(jù)地址 = 基地址 + 偏移量 例如: MOVC A, A+DPTR ; (A)(A)+(DPTR) 該指令尋址及操作功能如下圖所示。這種尋址方式常用于訪問程序存儲器中的常數(shù)表。,(6)相對尋址 相對尋址是以當前程序計數(shù)器PC值加上指令規(guī)定的偏移量rel , 構成實際操作數(shù)地址的尋址方法。 它用于訪問程序存儲器, 常出現(xiàn)在相對轉移指令中。 在使用相對尋址時要注意以下兩點: 第一, 當前PC值是指相對轉移指令所在地址(一般稱為源地址)加上轉移指令字節(jié)數(shù)。 即: 當前PC值 = 源地址 + 轉移指令字節(jié)數(shù)。 例如: JZ rel 若該指令地址(源地址)為2050H, 則執(zhí)行該指令時的當前PC值即為2052H。,第二, 偏移量rel是有符號的單字節(jié)數(shù), 以補碼表示。 其相對值的范圍是-128+127(即00HFFH), 負數(shù)表示從當前地址向上轉移, 正數(shù)表示從當前地址向下轉移。 所以, 相對轉移指令滿足條件后, 轉移的地址(一般稱為目的地址)應為: 目的地址 = 當前PC值 + rel = 源地址 + 轉移指令字節(jié)數(shù) + rel 例如: 指令JZ 08H和JZ 0F4H 表示累加器A為零條件滿足后, 從源地址(2050H)分別向下、 向上轉移10個單元。 其相對尋址示意如下頁圖(a)、 (b)所示。這兩條指令均為雙字節(jié)指令,相對尋址示意圖 (a)指令JZ 08H尋址示意圖; (b)指令JZ F4H尋址示意圖,(7)位尋址 MCS51系列單片機具有位尋址的功能, 即指令中直接給出位地址, 可以對內部數(shù)據(jù)存儲器RAM中的128位和特殊寄存器SFR中的93位進行尋址, 并且位操作指令可對地址空間的每一位進行傳送及邏輯操作。 例如: SETB PSW.3 ; (PSW.3)1 該指令為雙字節(jié)指令, 指令的第二字節(jié)直接給出位地址D3H(PSW.3的位地址)。,注意: 1)位地址里的數(shù)據(jù)只可能是一個 0 或 1 2)有的位地址十分明確,如 P1.0, ACC.7等, 有的位地址則“不太明確”,如: MOV A,17H ;(A)(17H),17H是字節(jié)地址 MOV ACC.0,17H ;(ACC.0)(17H),這里ACC.0 是位地址所以該指令中的17H是22H單元的第7位,在MCS51系列單片機的存儲空間中, 指令究竟對哪個存儲器空間進行操作是由指令操作碼和尋址方式確定的。 7種尋址方式如下表所示。,尋址方式小結,1、對片外程序存儲器只能用變址尋址方式,或者反過來說,變址尋址是一種專門用于程序存儲器的尋址方式。 2、內部數(shù)據(jù)存儲器由于使用頻繁,因此尋址方式多。 3、對外部數(shù)據(jù)存儲器,只能使用寄存器間接尋址。 4、立即尋址方式只涉及8位或16位數(shù)據(jù)。 5、相對尋址解決程序轉移問題。 6、本節(jié)所講的各種尋址方式都是針對于源操作數(shù),但實際上目的操作數(shù)也有尋址問題。,2.2.1 數(shù)據(jù)傳送類指令,數(shù)據(jù)傳送類指令共29條, 它是指令系統(tǒng)中最活躍、 使用最多的一類指令。 一般的操作是把源操作數(shù)傳送到目的操作數(shù), 即指令執(zhí)行后目的操作數(shù)改為源操作數(shù), 而源操作數(shù)保持不變。 若要求在進行數(shù)據(jù)傳送時, 不丟失目的操作數(shù), 則可以用交換型傳送指令。,按數(shù)據(jù)傳送類指令的操作方式, 傳送類指令分為3 種類型: 數(shù)據(jù)傳送: MOV、 MOVX、 MOVC 數(shù)據(jù)交換: XCH、 XCHD、 SWAP 堆棧操作: PUSH、POP 數(shù)據(jù)傳送類指令不影響進位標志CY、 半進位標志 AC和溢出標志OV, 但當傳送或交換數(shù)據(jù)后影響累加 器A的值時, 奇偶標志P的值則按A的值重新設定。,數(shù)據(jù)傳送類指令助記符與操作,Rn: R0R7 Ri: R0,R1 #data:8位立即數(shù) #data16:16位立即數(shù) direct:直接地址 rel: 8位帶符號偏移量,(1)內部存儲器間傳送指令 (16條): 內部數(shù)據(jù)存儲器RAM區(qū)是數(shù)據(jù)傳送最活躍的區(qū)域, 可用的 指令數(shù)也最多, 共有16條指令, 指令操作碼助記符為MOV。 尋址方式:立即尋址、直接尋址、寄存器尋址、寄存器間 址。,內部RAM之間源操作數(shù)傳遞關系圖,例:順序執(zhí)行下列指令序列,求每一步執(zhí)行結果。,MOV A,#30H ;A= 30H MOV 4FH,A ;(4FH)= 30H MOV R0,#20H ;R0= 20H MOV R0,4FH ;(20H)= 30H MOV 21H,20H ;(21H)= 30H,例:用兩種尋址方式實現(xiàn),將片內RAM 60H單元的數(shù)據(jù)傳送給累加器A。,解1: MOV A, 60H 解2: MOV R0,#60H MOV A,R0,說明,1、一條指令中不能同時出現(xiàn)兩個工作寄存器: 非法指令: MOV R1,R2 MOV R2,R0 2、間址寄存器只能使用 R0、R1。 非法指令:MOV A,R2 3、SFR區(qū)只能直接尋址,不能用寄存器間接尋址。 非法指令:MOV R0,#80H MOV A,R0 4、指令表: B:指令字節(jié)數(shù),M:機器周期數(shù) 只有指令表中的指令才有對應指令代碼,計算機才能執(zhí) 行。編程時,不能隨意“創(chuàng)造發(fā)明”指令。,(2) 外部數(shù)據(jù)存儲器數(shù)據(jù)傳送指令 (4條): MCS51單片機CPU對片外擴展的數(shù)據(jù)存儲器 RAM或I/O口進行數(shù)據(jù)傳送, 必須采用寄存器間接尋 址的方法, 通過累加器A來完成。一般數(shù)據(jù)的傳送是 通過P0口和P2口完成的, 即片外RAM地址總線低8位 由P0口送出, 高8位由P2口送出, 數(shù)據(jù)總線(8位)也 由P0口傳送(雙向), 但與低8位地址總線是分時傳 送的。 MOVX A, DPTR ; (A) (DPTR) MOVX A, Ri ; (A) (Ri) MOVX DPTR, A ; (DPTR) (A) MOVX Ri, A ; (Ri) (A),例: 設外部RAM (0203H)=FFH, 分析以下指令執(zhí)行后 的結果。 MOV DPTR, 0203H ; (DPTR) 0203H MOVX A, DPTR ;(A) (DPTR) MOV 30H, A ;(30H) (A) MOV A, 0FH ;(A) 0FH MOVX DPTR, A ;(DPTR) (A) 執(zhí)行結果為: (DPTR)=0203H, (30H)=FFH, (0203H)=(A)=0FH。,(3)程序存儲器向累加器A傳送數(shù)據(jù)指令(2 條) 程序存儲器向累加器A傳送數(shù)據(jù)指令,通常稱為查表指令, 尋址方式屬:基址 + 變址間接尋址,把程序存儲器(ROM或 EPROM)中存放的表格數(shù)據(jù)讀出, 傳送到累加器A。它共有 如下兩條單字節(jié)指令, 指令操作碼助記符為MOVC。 A+DPTR或A+PC指向程序存儲器中的某單元。擬傳送 給累加器ACC 的數(shù)據(jù)就是程序中事先寫進去的表格數(shù)據(jù)。這 些表格數(shù)據(jù)往往用偽指令 DB,DW 等定義在程序中。 MOVC A, A+DPTR ; (A) (A)+(DPTR) MOVC A, A+PC ;(PC) (PC)+1, (A) (A)+(PC),例: 在外部ROM/EPROM中, 從2000H單元開始依次 存放09的平方值: 0、 1、 4、 9、 、 81, 要求依據(jù) 累加器A中的值(09)來查找所對應的平方值, 分 析下述程序的結果。 MOV DPTR, 2000H ; (DPTR) 2000H MOV A, 09H ; (A) 09H MOVC A, A+DPTR ; (A) (A)+(DPTR) 執(zhí)行結果: (DPTR)=2000H, (A)=51H(81的十六進制 數(shù))。,例: 仍以例1外部ROM/EPROM 2000H單元開始存 放09的平方值, 以PC作為基址寄存器進行查表。 解: 設MOVC指令所在地址(PC)=1FF0H, 則 偏移量 = 2000H(1FF0H+1) = 0FH 相應的程序如下: MOV A, 09H ;(A) 09H ADD A, 0FH ;地址調整 MOVC A, A+PC ;(A) (A)+(PC)+1) 執(zhí)行結果為: (PC)=1FF1H, (A)=51H。,2、數(shù)據(jù)交換指令 (5條): 數(shù)據(jù)交換指令其數(shù)據(jù)作雙向傳送, 涉及傳送的 雙方互為源地址、 目的地址, 指令執(zhí)行后各方的操 作數(shù)都修改為另一方的操作數(shù)。 因此, 兩操作數(shù)均 未沖掉、 丟失。 數(shù)據(jù)交換類指令共有如下5條指令: XCH A, direct ; (A) (direct) XCH A, Ri ; (A) (Ri) XCH A, Rn ; (A) (Rn) XCHD A, Ri ; (A3A0) (Ri)30) SWAP A ;(A7A4) (A3A0),例: 設(R0)=30H, (30H)=4AH, (A)=28H, 則執(zhí)行下列指令后, 各寄存器中的內容分別為多少? XCH A, R0 ; (A)=4AH, (30H)=28H XCHD A, R0 ; (A)=2AH, (30H)=48H SWAP A ; (A)=82H 例:設A= 29H,(2A)=38H執(zhí)行指令 XCH A,2AH后,A= ? (2AH)= ? 解:(A)=38H,(2A)=29H 習題:將片內RAM60H單元與61H單元的數(shù)據(jù)交換, 用指令XCH 60H,61H對嗎?,3、堆棧操作類指令 (2條): 堆棧操作有進棧和出棧操作, 即壓入和彈出數(shù)據(jù), 常 用于保存或恢復現(xiàn)場。 該類指令共有如下兩條指令: 入棧指令:PUSH n ;SPSP+1,(SP) (n) 出棧指令:POP n ;(n)(SP),SPSP-1 說明: 堆棧區(qū)由特殊功能寄存器堆棧指針SP 管理; 堆棧區(qū)可以安排在 RAM區(qū)任意位置,一般不安排 在工作寄存器區(qū)和可按位尋址的RAM區(qū),而是放在 RAM區(qū)的靠后的位置; 堆??偸侵赶驐m?; 通常PUSH與POP兩條指令成對使用,例如:設(A)=7BH; (35H)=11H并且知道(SP)=60H PUSH ACC ;(61H) #7BH PUSH 35H ;(62H) (35H) 即:(62H) #11H POP ACC ;(A) (62H) 即:(A) #11H POP 5AH ;(5AH) (61H) 即:(5AH) #7BH,例:設 A=02,B=56H,執(zhí)行下列指令后,SP= ?,A= ? ,B= ?,SBR: MOV SP,#30H ;設棧底 PUSH A PUSH B MOV A,#0 MOV B,#01 POP B POP A,習題:找出指令錯誤并改正: 1MOV A,#1000H ;A1000H 2MOVX A,1000H ;A(1000H)片外RAM 3MOVC A,1000H ;A(1000H)片外ROM 4MOVX 60H,A ;片外RAM(60H)A 5MOV R0,60H ;片內RAM:(61H)(60H) MOV 61H,R0 6. XCH R1,R2 ;R1R2 7. MOVX DPTR,#2000H ;DPTR2000H 8. MOVX 60H,DPTR ;片內RAM片外RAM,2.2.2算術運算類指令,算術運算類指令共有24條,與數(shù)據(jù)傳送指令不同,多數(shù)算術 運算指令會影響標志位的狀態(tài),即CPU執(zhí)行算術運算指令 后,根據(jù)數(shù)據(jù)操作情況自動設置標志位的狀態(tài)。算術運算類 指令可分為: 加法 帶進位加法 帶借位減法 加1減1 單字節(jié)乘/除法運算 十進制調整 算術運算對8位無符號數(shù)可進行直接運算; 借助溢出標志, 可 對帶符號數(shù)進行2的補碼運算; 借助進位標志, 可進行多字節(jié)加 減運算, 也可以對壓縮BCD碼(即單字節(jié)中存放兩位BCD碼) 進行運算。,算術運算類指令,算術運算類指令(續(xù)),加法運算: (ADD4條) 帶進位加法運算: (ADDC4條) 帶借位減法運算: (SUBB4條),所有的加法(ADD)、帶進位加法(ADDC)、帶借位減法(SUBB)運算都是以A為一個加數(shù)或被減數(shù),最終結果也存進 A 。,加法(ADD)、帶進位加法(ADDC) 以及帶借位減法(SUBB)運算中,如果產(chǎn)生了進位或借位,將自動對PSW中的Cy標志位置“1” 。,帶進位加法(ADDC):(A)(A)+(Cy)+(第二操作數(shù)) 帶借位減法(SUBB):(A)(A)-(Cy)-(第二操作數(shù)),算術運算類指令(續(xù)),加1/減1操作: (INC,DEC9條) INC, DEC與用加/減法指令做加1/減1 操作不同之處在于INC、DEC不影響標志位.,單字節(jié)乘/除運算: (MUL,DIV2條) 兩個單字節(jié)數(shù)的乘/除法運算只在A與B之間進行。 MUL AB: (A)與(B)相乘, 積為16位數(shù), (A)積的高8位; (B)積的低8位 DIV AB: (A)除以(B),結果用2字節(jié)表示, (A)商的整數(shù)部分;(B)余數(shù),算術運算類指令(續(xù)),BCD碼是指“用二進制表達的十進制數(shù)”。 如: 十進制數(shù)20可以用二進制數(shù)00010100B表示; 也可以用十六進制數(shù)14H表示; 還可以用BCD碼 00100000B 或 20H 表示。,4個二進制位就可以表示一位BCD碼: 00001001 可表示十進制數(shù)(BCD數(shù)) 09; 8個二進制位就可以表示兩位壓縮的BCD碼:0000000010011001 表示 0099。,十進制調整: (DA A1條) 用于兩個BCD碼之間的相加,這條指令只能跟在 ADD 或 ADDC 之后,若(A)309或(AC)=1則(A)30(A)306; 若(A)749或(CY)=1則(A)74(A)746;,P.60例5:兩個十進制數(shù)“65”與“58”相加,根據(jù)常識,顯然其和應當為“123”。,MOV A,#65H ADD A,#58H DA A 結果:(A)= 23H (CY)= 1,指令 “DA A” 完成的操作:,6 5 0110 0101 5 8 0101 1000,+,1,3,18,19,2,6 6 0110 0110,若(A)309或(AC)=1則(A)30(A)306; 若(A)749或(CY)=1則(A)74(A)746;,又如:兩個十進制數(shù)“39”與“58”相加,根據(jù)常識,顯然其和應當為“97”。,MOV A,#39H ADD A,#58H DA A 結果:(A)= 97H (CY)= 0,3 9 0011 1001 5 8 0101 1000,+,0,7,23,9,6 0110,指令 “DA A” 完成的操作:,例: 對累加器中的壓縮BCD數(shù)加1和減1 ADD A, 01H DA A ADD A, #99H DA A,例:4位壓縮的BCD數(shù)的相加程序。設一個加數(shù)放在 30H、31H單元,另一個加數(shù)放在32H、33H單元。和 數(shù)放到30H、31H單元。 MOV R0, #30H ;設地址指針指向個位十位數(shù) MOV R1, #32H MOV A, R0 ADD A, R1 ;個位十位數(shù)相加 DA MOV R0, A INC R0 INC R1 ; 指向百位千位數(shù) MOV A, R0 ADDC A, R1 ;百位千位數(shù)相加 DA A MOV R0, A,例:把累加器中的二進制數(shù)轉換為3位BCD數(shù)的子程序。百 位數(shù)放在HUND,十位、個位數(shù)放在TENONE中。 HUND和 TENONE為內部RAM中的兩個單元。 BINBCD: MOV B, #100 DIV AB ;得到百位數(shù) MOV HUND, A MOV A, 10 XCH A, B DIV AB ;得到十位數(shù)和個位數(shù) SWAP A ADD A, B ;組成壓縮的BCD數(shù) MOV TENINE, A RET,2.2.3 邏輯運算及移位類指令,邏輯與運算: (ANL6條) 邏輯或運算: (ORL6條) 邏輯異或運算: (XRL6條) 累加器清零/取反: (CLR,CPL2條) 累加器移位操作: (RL,RLC,RR,RRC4條),1、邏輯“與”運算指令 邏輯“與”運算指令共有如下6條, 其助記符為 ANL。 ANL direct, A ; (direct) (direct)(A) ANL direct, data ; (direct) (direct)data ANL A, data ; (A) (A)data ANL A, direct ; (A) (A)(direct) ANL A, Ri ; (A) (A)(Ri) ANL A, Rn ; (A) (A)(Rn),邏輯“與”運算指令是將兩個指定的操作數(shù)按 位進行邏輯“與”的操作。 例如: (A)=FAH=11111010B, (R1)=7FH=01111111B 執(zhí)行指令: ANL A, R1 ; (A)1111101001111111 結果為: (A)=01111010B=7AH。 邏輯“與”ANL指令常用于屏蔽(置0)字節(jié) 中某些位。 若清除某位, 則用“0”和該位相與; 若保留某位, 則用“1”和該位相與。,2、 邏輯“或”運算指令 邏輯“或”運算指令共有如下6條指令, 其助記 符為ORL。 ORL direct, A ; (direct)(direct)(A) ORL direct, data ; (direct)(direct)data ORL A, data ; (A) (A)data ORL A, direct ; (A) (A)(direct) ORL A, Ri ; (A) (A)(Ri ) ORL A, Rn ; (A) (A)(Rn),邏輯“或”指令將兩個指定的操作數(shù)按位進行 邏輯“或”操作。 例如: 若(A)=C0H, (R0)=3FH, (3F)=0FH 執(zhí)行指令: ORL A, R0 ; (A) (A)(R0) 結果為: (A)=CFH。 它常用來使字節(jié)中某些位置“1”, 欲保留(不 變)的位用“0”與該位相或, 而欲置位的位則用 “1”與該位相或。,例: 根據(jù)累加器A中40位的狀態(tài), 用邏輯與、 或指令控制P1口40位的狀態(tài), P1口的高3位 保持不變。 ANL A, 00011111B ; 屏蔽A的高3位 ANL P1, 11100000B ; 保留P1的高3位 ORL P1, A ; 使P1.4P1.0按A4A0置位 若上述程序執(zhí)行前: (A)=B5H=10110101B, (P1)=6AH=01101010B, 則執(zhí)行程序后: (A)=15H=00010101B, (P1)=75H=01110101B。,3、邏輯“異或”運算指令 “異或”運算是當兩個操作數(shù)不一致時結果為1, 兩個操作數(shù)一致時結果為0, 這種運算也是按 位進行, 共有如下6條指令, 其助記符為XRL。 XRL direct, A ; (direct)(direct) (A XRL direct, data ; (direct)(direct) data XRL A, data ; (A) (A) data XRL A, direct ; (A) (A) (direct) XRL A, Ri ; (A) (A) (Ri ) XRL A, Rn ; (A) (A) (Rn),邏輯“異或”指令常用來對字節(jié)中某些位進行取反操 作, 欲某位取反則該位與“1”相異或;欲某位保留則該 位與“0”相異或。 還可利用異或指令對某單元自身異 或, 以實現(xiàn)清零操作。 例: 若(A)=B5H=10110101B, 執(zhí)行下列指令: XRL A, 0F0H ; A的高4位取反, 低4位保留 MOV 30H, A ; (30H) (A) = 45H XRL A, 30H ; 自身異或使A清零 執(zhí)行后結果: (A)=00H。,邏輯“與”、 “或”、 “異或”各6條指令有如下共同 的特點: 邏輯“與”ANL、 “或”O(jiān)RL、 “異或”XRL運算指 令除邏輯操作功能不同外, 三者的尋址方式相同, 指 令字節(jié)數(shù)相同, 機器周期數(shù)相同。 ANL、 ORL、 XRL的前兩條指令的目的操作 數(shù)均為直接地址方式, 可很方便地對內部RAM的 00HFFH任一單元或特殊功能寄存器的指定位進行 清零、 置位、 取反、 保持等邏輯操作。 ANL、 ORL、 XRL的后4條指令, 其邏輯運算 的目的操作數(shù)均在累加器A中, 且邏輯運算結果保存 在A中。,4、累加器A清零與取反指令 CLR A ; (A) 00H CPL A ; (A) (A ) 第1條是對累加器A清零指令, 第2條是把累加器A 的內容取反后再送入A中保存的對A求反指令, 它們 均為單字節(jié)指令。 若用其它方法達到清零或取反的 目的, 則至少需用雙字節(jié)指令。,5、移位指令 移位指令有如下循環(huán)左移、 帶進位位循環(huán)左移、 循環(huán)右移和帶進位位循環(huán)右移 4 條指令, 移位只能 對累加器A進行。 RL A ; (A n+1)(An) , (A0) (A7) RLC A ; (A n+1)(An ), (CY) (A7 ), (A0 ) (CY) RR A ; (An)(A n+1 ), (A7 ) (A0) RRC A ; (An)(A n+1), (CY) (A0), (A7) (CY),6、累加器移位操作:(RL,RLC,RR,RRC4條),RL A 左環(huán)移,累加器 A,累加器 A,Cy,累加器 A,Cy,累加器 A,RRC A 帶進位位右環(huán)移,RR A 右環(huán)移,RLC A 帶進位位左環(huán)移,2.3.4 控制轉移類指令,控制轉移類指令共計 17 條, 可分為無條件轉移指令、 條件 轉移指令、 子程序調用及返回指令。 有了豐富的控制轉移類 指令, 就能很方便地實現(xiàn)程序的向前、 向后跳轉, 并根據(jù)條件 分支運行、 循環(huán)運行、 調用子程序等。 1、無條件轉移指令 無條件轉移指令有如下 4 條指令, 它們提供了不同的轉移 范圍和尋址方式: LJMP addr16 ; (PC) addr16 AJMP addr11 ; (PC) (PC)+2, (PC)100 addr11 SJMP rel ; (PC) (PC)+2+rel JMP A+DPTR ; (PC) (A)+DPTR,(1)LJMP :長轉移指令, 三字節(jié)指令, 提供 16 位目標地址 addr16。 LJMP addr16 例: 在程序存儲器0000H單元存放一條指令: LJMP 3000H ; (PC) 3000H 則上電復位后程序將跳到3000H 單元去執(zhí)行用戶程序。,(2) AJMP:絕對轉移指令, 雙字節(jié)指令。該指令執(zhí)行后, 程序 轉移的目的地址是由AJMP指令所在位置的地址PC值加上該指 令字節(jié)數(shù) 2, 構成當前PC值。取當前PC值的高 5 位與指令中提 供的 11 位直接地址形成轉移的目的地址, 即:,PC,轉移目的地址:,由于 11 位地址的范圍是 0000000000011111111111, 即 2 KB范圍, 而目標地址的高 5 位是由PC當前值固定的, 所以程 序可轉移的位置只能是和PC當前值在同一 2 KB的范圍之內。 本指令轉移可以向前也可以向后, 指令執(zhí)行后不影響狀態(tài)標志 位。 例: 若AJMP指令地址 (PC)=2300H。 執(zhí)行指令: AJMP 0FFH; (PC) (PC)+2=2302H 結果為: 轉移目的地址 (PC)=20FFH , 程序向前轉向 20FFH單 元開始執(zhí)行。 又如: 若AJMP指令地址(PC)=2FFFH。 執(zhí)行指令: AJMP 0FFH (PC) (PC)+2=3001H 結果為: 轉移目的地址 (PC)=30FFH , 程序向后轉向 30FFH單 元開始執(zhí)行。,(3) SJMP:短轉移指令, 雙字節(jié)指令, 指令的操作數(shù)是相對地址 Rel。由于rel是帶符號的偏移量, 所以程序可以無條件向前或 向后轉移, 轉移的范圍是在SJMP指令所在地址PC值(源地 址)加該指令字節(jié)數(shù)2的基礎上, 以-128+127 為偏移量(256 個單元)的范圍內實現(xiàn)相對短轉移, 即: 目的地址=源地址+2+rel rel的計算公式如下: 向前轉移: rel=FE(源地址與目的地址差的絕對值) 向后轉移: rel=(源地址與目的地址差的絕對值)2 若rel值大于 80H, 程序向前轉移; 若rel值小于 80H, 則程序向后轉移。 例: 設(PC)=2100H, 若轉向215CH去執(zhí)行程序, 則: rel=(215CH2100H)2H=5AH,(4) JMP:間接長轉移指令。 JMP A+DPTR 它是以數(shù)據(jù)指針DPTR的內容為基址, 以累加器A的內容為 相對偏移量, 在 64 KB范圍內可無條件轉移的單字節(jié)指令。 該指令的特點是轉移地址可以在程序運行中加以改變。 例: 根據(jù)累加器A的數(shù)值, 轉不同處理程序的入口。 MOV DPTR, TABLE ; 表首址送DPTR JMP A+DPTR ; 依據(jù)A值轉移 TABLE: AJMP TAB1 ; 當(A)=0時轉TAB1執(zhí)行 AJMP TAB2 ; 當(A)=2時轉TAB2執(zhí)行 AJMP TAB3 ; 當(A)=4時轉TAB3執(zhí)行,2、條件轉移指令(判跳指令) 條件轉移指令是當某種條件滿足時, 程序轉移執(zhí)行; 條件不滿足時, 程序仍按原來順序繼續(xù)執(zhí)行。 條件轉 移的條件可以是上一條指令或者更前一條指令的執(zhí) 行結果(常體現(xiàn)在標志位上), 也可以是條件轉移指 令本身包含的某種運算結果。 (1) 累加器判零轉移指令 這類指令有 2 條: JZ rel ;若 (A)=0, 則 (PC) (PC)+2+rel 若 (A)0, 則 (PC) (PC)+2 JNZ rel ; 若 (A)0, 則 (PC) (PC)+2+rel 若 (A)=0, 則 (PC) (PC)+2,例: 將外部數(shù)據(jù)RAM的一個數(shù)據(jù)塊傳送到內部數(shù)據(jù)RAM, 兩者 的首址分別為DATA1 和 DATA2, 遇到傳送的數(shù)據(jù)為零時停 止。 解: 外部RAM向內部RAM的數(shù)據(jù)傳送一定要以累加器A作為 過渡, 利用判零條件轉移正好可以判別是否要繼續(xù)傳送或者 終止。 完成數(shù)據(jù)傳送的參考程序如下: MOV R0, DATA1 ; 外部數(shù)據(jù)塊首址送R0 MOV R1, DATA2 ; 內部數(shù)據(jù)塊首址送R1 LOOP: MOVX A, R0 ; 取外部RAM數(shù)據(jù)入A HERE: JZ HERE ; 數(shù)據(jù)為零則終止傳送 MOV R1, A ; 數(shù)據(jù)傳送至內部RAM單元 INC R0 ; 修改地址指針, 指向下一數(shù)據(jù)地址 INC R1 SJMP LOOP ; 循環(huán)取數(shù),(2) 比較轉移指令 比較轉移指令共有 4 條, 其一般格式為: CJNE 目的操作數(shù), 源操作數(shù) 這組指令是先對兩個規(guī)定的操作數(shù)進行比較, 根據(jù) 比較的結果來決定是否轉移到目的地址。 4 條比較轉移指令如下: CJNE A, data , rel CJNE A, direct, rel CJNE Ri, data, rel CJNE Rn, data, rel,以上 4 條指令的差別僅在于操作數(shù)的尋址方式不 同, 均完成以下操作: 若目的操作數(shù)=源操作數(shù), 則 (PC) (PC)+3 ; 若目的操作數(shù)源操作數(shù), 則 (PC) (PC)+3+rel, CY=0; 若目的操作數(shù)源操作數(shù), 則 (PC) (PC)+3+rel, CY=1; 偏移量rel 的計算公式為: 向前轉移: rel = FD-(源地址與目的地址差的絕對值) 向后轉移: rel =(源地址與目的地址差的絕對值)-3,(3) 減 1 條件轉移指令(循環(huán)轉移指令) 減 1 條件轉移指令有如下兩條: DJNZ direct, rel; (direct) (direct)1 若(direct)=0, 則(PC) (PC)+3 否則, (PC) (PC)+3+rel DJNZ Rn, rel ; 若(Rn)=0, 則(PC) (PC)+2 否則, (PC) (PC)+2+rel,LCALL addr16 子程序長調用指令 可在64K范圍內調用子程序,3、子程序調用及返回: (LCALL,ACALL,RET,RETI4條),ACALL addr11 子程序絕對調用指令 可在指令所在的2K范圍內調用子程序,RET 子程序返回指令 子程序結束并返回調用的下一條指令,RETI 中斷服務子程序返回指令 中斷結束/返回被打斷處的下一條指令,2.3.5位操作類指令,位操作又稱為布爾變量操作, 它是以位(bit)作為單 位來進行運算和操作的。 MCS51系列單片機內設 置了一個位處理器(布爾處理機), 它有自己的累加 器(借用進位標志CY), 自己的存儲器(即位尋址區(qū) 中的各位), 也有完成位操作的運算器等。 這一組指令的操作對象是內部RAM中的位尋址區(qū), 即20H2FH中連續(xù)的 128 位(位地址00H7FH), 以及特殊功能寄存器SFR中可進行位尋址的各位。,在指令中, 位地址的表示方法主要有以下 4 種(均以程序狀態(tài)字寄存器PSW的第五位 F0 標志為例說明): 直接位地址表示方式: 如D5H; 點操作符表示(說明是什么寄存器的什么位)方式: 如PSW.5, 說明是PSW的第五位; 位名稱表示方法: 如F0 ; 用戶定義名表示方式: 如用戶定義用FLG這一名稱(位符號地址)來代替F0,位操作類指令(17條),位操作類指令 以位為單位進行邏輯運算及操作, 可分為4種:,位傳送: (MOV2條),位清零
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 年產(chǎn)500萬套玩具項目初步設計(模板)
- 年產(chǎn)200萬噸包裝紙項目實施方案(參考模板)
- 年產(chǎn)10億只芯片產(chǎn)品項目可行性研究報告(范文)
- 2022年精彩6月畢業(yè)講話稿
- 教育營養(yǎng)配餐項目實施方案(參考范文)
- 四川省雅安市名山中學2023-2024學年高一上學期12月月考政治題 含解析
- 復合材料產(chǎn)品設計
- 內蒙古鴻德文理學院《過程控制與自動化儀表》2023-2024學年第二學期期末試卷
- 北京科技大學《大學生心理團體輔導》2023-2024學年第二學期期末試卷
- 上海民遠職業(yè)技術學院《數(shù)字傳輸原理與系統(tǒng)》2023-2024學年第二學期期末試卷
- 《建筑構造與識圖》課程標準
- 2025年保健食品從業(yè)人員培訓考試試題
- 2025年貴州盤江精煤股份有限公司招聘筆試參考題庫含答案解析
- 2024年中考數(shù)學復習:中點模型專項練習
- 2025年寧波余姚市直屬企業(yè)招招聘筆試參考題庫含答案解析
- 《心理健康測試》課件
- 輸變電工程監(jiān)督檢查標準化清單-質監(jiān)站檢查
- GB/T 26718-2024城市軌道交通安全防范系統(tǒng)技術要求
- 靜脈輸液操作考試流程
- 護理記錄與交班制度
- 2024-2030年中國海外醫(yī)療中介服務行業(yè)運行現(xiàn)狀及投資潛力分析報告
評論
0/150
提交評論