![第4章 80C51的指令系統_第1頁](http://file4.renrendoc.com/view12/M09/12/1D/wKhkGWX6SaeAe62pAAIOYzien3w618.jpg)
![第4章 80C51的指令系統_第2頁](http://file4.renrendoc.com/view12/M09/12/1D/wKhkGWX6SaeAe62pAAIOYzien3w6182.jpg)
![第4章 80C51的指令系統_第3頁](http://file4.renrendoc.com/view12/M09/12/1D/wKhkGWX6SaeAe62pAAIOYzien3w6183.jpg)
![第4章 80C51的指令系統_第4頁](http://file4.renrendoc.com/view12/M09/12/1D/wKhkGWX6SaeAe62pAAIOYzien3w6184.jpg)
![第4章 80C51的指令系統_第5頁](http://file4.renrendoc.com/view12/M09/12/1D/wKhkGWX6SaeAe62pAAIOYzien3w6185.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
教師:馬向國mxg105bj@163.com2013-2014第二學期80C51存儲空間配置圖
熟悉80C51系列單片機的尋址方式及 每一種尋址方式對應的尋址空間;掌 握每一條指令功能。第4章80C51系列指令系統
本章要點
80C51指令的基本格式
80C51指令功能分類指令系統中的常用符號
80C51指令系統的七種尋址方式數據傳送類指令算術運算類指令 邏輯運算及移位指令位操作類指令控制轉移類指令§4-1指令系統基本概念標號:操作碼操作數;注釋
一、指令基本格式
MAIN: MOV SP,#30H;把立即數-SPMOVA,#40H ;把40H送累加器A⑴標號:指令的符號地址。①用于一段功能程序的識別標記或控制 轉移地址。指令前的標號代表該指令的地址,是用符號表示的地址。一般用英文字母和數字組成。④標號必須用冒號“:”與操作碼分隔。
MAIN: MOV SP,#30H;把立即數-SP⑵操作碼:表示指令的操作功能。①操作碼用助記符表示,它代表了指令 的操作功能。②操作碼是指令的必需部分,是指令的核心,不可缺少。⑶操作數:參加操作的數據或數據地址。⑤操作數與操作碼之間用空格分隔,操作數與 操作數之間用逗號“,”分隔。①操作數可以是數據,也可以是數據的地址、 數據地址的地址或操作數的其他信息。②操作數可分為目的操作數和源操作數。③操作數可用二進制數、十進制數或十六進制 數表示。④操作數的個數可以是0~3個。⑷注釋:指令功能說明。①注釋屬于非必需項,是為便于閱讀, 對指令功能作的說明和注解。②注釋必須以“;”開始。
例如:MOV A,#40H ;把40H送累加器A
指令代碼在程序存儲器中存放的數據形式。 例如上條指令的指令代碼為:74H.40H,其中74H為操作碼,表達了指令的操作功能,40H為操作數。(雙字節(jié)指令) 根據代碼長度,80C51單片機的指令有單字節(jié)、雙字節(jié)和三字節(jié)指令。 按照指令執(zhí)行速度又可分為單周期、雙周期和四周期指令。指令代碼格式二、指令分類⑶ 按指令功能分類:
可分為數據傳送類、算術運算類、邏輯運算類、位操作類和控制轉移類等5大類指令。80C51共有111條指令。⑴ 按指令長度分類:
可分為1字節(jié)、2字節(jié)和3字節(jié)指令。⑵ 按指令執(zhí)行時間分類:
可分為1機周、2機周和4機周指令。三、指令系統中的常用符號⑹bit:位地址。代表片內RAM中的可尋址位00H~7FH及SFR中的可尋址位。⑴#:立即數符。#data8:8位立即數;#data16:16位立即數。⑵direct:8位直接地址代表內RAM00H~7FH或SFR的80H~FFH。⑶@:間接尋址符。如@Ri,@DPTR,@A+PC,@A+DPTR。⑷addr11:11位目的地址。
addr16:16位目的地址。⑸rel:帶符號的8位偏移地址。用于轉移指令,其范圍是相對于下一條指令第1字節(jié)地址的-128~+127個字節(jié)。四、尋址方式【例】尋址就是尋找操作數的地址。⒈立即尋址立即尋址是直接給出操作數,操作數前有立即數符“#”。MOVA,#3AH;將立即數3AH傳送至A中MOVDPTR,#5678H;將立即數5678H傳送至DPTRMCS-51單片機內部結構(圖)⒉直接尋址MOVA,3AH
;將內RAM3AH單元中的數據傳送至A中MOVA,P0
;將特殊功能寄存器P0口中的數據傳送至A中說明:3AH和P0是以direct形式出現的直接地址直接尋址是給出操作數的直接地址。直接尋址范圍為內RAM128B和特殊功能寄存器?!纠竣臣拇嫫鲗ぶ稭OVA,R2;將R2中的數據傳送至A中
寄存器尋址的操作數在規(guī)定的寄存器中。
規(guī)定的寄存器有:①工作寄存器R0~R7
②累加器A③雙字節(jié)AB
④數據指針DPTR⑤位累加器Cy
這些尋址寄存器中的內容就是操作數【例】⒋寄存器間接尋址MOVA,@R0;將以R0中內容為地址的存儲單元中的數據傳送至A中MOVXA,@DPTR;將外RAMDPTR所指存儲單元中的數據傳送至A中PUSHPSW;將PSW中數據傳送至堆棧指針SP所指的存儲單元中間接尋址是根據操作數地址的地址尋找操作數。間接尋址用間址符“@”作為前綴?!纠縈OVA,@R0;將以R0中內容為地址的存儲單元中的數據⒌變址尋址MOVCA,@A+DPTR
【例】在變址尋址中,操作數地址=基址+變址用于讀ROM數據操作。;將A的內容與DPTR內容相加,得到一個新地址,從該地址ROM中讀取數據送入A中。采用變址尋址的指令只有三條:
MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR
前兩條用于程序存儲器的查表操作,后一條用于程序的分支散轉。
以一個基地址加上一個偏移量地址形成操作數地址的尋址方式稱為變址尋址。在這種尋址方式中,以數據指針DPTR或程序計數器PC作為基址寄存器,累加器A作為偏移量寄存器,基址寄存器的內容與偏移量寄存器的內容之和作為操作數地址。
變址尋址所對應的尋址空間為:ROM
變址尋址如:MOVCA,@A+DPTR
相對尋址是以程序計數器PC的當前值(指讀出該2字節(jié)或3字節(jié)的跳轉指令后,PC指向的下條指令的地址)為基準,加上指令中給出的相對偏移量rel
形成目標地址的尋址方式。6相對尋址如:JCrel
;
rel=75H例
JC03H ;若進位C=0,則程序順序執(zhí)行,即不跳轉,PC=PC+2;若進位C= 1,則以PC中的當前內容為基地址,加上偏移量03H后所得到的結果為該轉移指令的目的地址。
位尋址區(qū)的位地址映象表
字節(jié)地址位地址D7D6D5D4D3D2D1D02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00H
對位地址中的內容進行操作的尋址方式稱為位尋址。采用位尋址指令的操作數是8位二進制數中的某一位。指令中給出的是位地址。位尋址方式實質屬于位的直接尋址。
尋址空間為:片內RAM的20H~2FH單元中的128可尋址位;SFR的可尋址位。7位尋址習慣上,特殊功能寄存器的尋址位常用符號位地址表示。
如:CLRACC.0MOV30H,C;將位地址07H(字節(jié)地址20H中最高位)中的數據傳送至進位位Cy。MOVC,07H課堂練習1、指出下列指令中劃線的操作數的尋址方式。Mov R0,#60HMov A,30HMov A,@R0課堂練習1、單片機與普通計算機的不同之處在于其將()()和()三部分集成于一塊芯片上。2、在MCS-51單片機中,如果采用6MHz晶振,1個機器周期為()3、若A中的內容為63H,那么,P標志位的值為()4、片內RAM低128個單元劃分為()()()3個主要部分5、通常單片機上電復位時PC=
H、SP=
H、通用寄存器則采用第
組6、若PSW為18H,則選取的是第
組通用寄存器7、堆棧遵循
的數據存儲原則,針對堆棧的兩種操作為
和
8、在單片機系統中,CPU是按照
來確定程序的執(zhí)行順序的9、-32的補碼為
B,補碼11011010B代表的真值為
D10、100的補碼=
H,-100的補碼=
H一.填空:1、二進制的基數是(),有()和()兩種數字2、將十進制數(26.75)10轉化成二進制數是();將二進制數(101001.1101)2轉化成十進制數是()。3、將二進制數(111101000.011)轉換成十六進制數是(),將十六進制數(AF.26)轉換成二進制數是()4、基本的邏輯運算有()、()和()三種,邏輯常量有()和()。5、用真值表證明公式
成立。6、1975(D)=()BCD二、將下列各數轉換為16進制數(1)224D=(2)143D=(3)01010011BCD=(4)00111001BCD=三、已知原碼如下,請寫出其補碼和反碼(1)【X】原=01011001(2)【X】原=00111110(3)【X】原=11011011(4)【X】原=11111100答案1:2、0、12:11010.11B;41.8125D3:1E8.6H;10101111.001001104:與、或、非、邏輯0、邏輯15:
由真值表可看出在同輸入情況下,二者的值都相同。6、0001100101110101將下列各數轉換為16進制數(1)224D=E0(H)(2)143D=8F(H)(3)01010011BCD=53D=35H(4)00111001BCD=39D=27H5、已知原碼如下,請寫出其補碼和反碼(1)【X】原=01011001
答:【X】反=【X】補=01011001(2)【X】原=00111110
答:
【X】反=【X】補=00111110(3)【X】原=11011011
答:【X】反=10100100【X】補=10100101(4)【X】原=11111100答:【X】反=10000011【X】補=10000100答案1、CPU、存儲器、I/O口2、2us3、04、工作寄存器區(qū)、位尋址區(qū)、數據緩沖區(qū)5、0000、07、06、3(從第0組排起)7、先進后出(或后進先出)、PUSH、POP8、程序計數器PC9、11100000、-3810、64、9C尋址方式【例】尋址就是尋找操作數的地址。⒈立即尋址立即尋址是直接給出操作數,操作數前有立即數符“#”。MOVA,#3AH;將立即數3AH傳送至A中MOVDPTR,#5678H;將立即數5678H傳送至DPTRMCS-51單片機內部結構(圖)⒉直接尋址MOVA,3AH
;將內RAM3AH單元中的數據傳送至A中MOVA,P0
;將特殊功能寄存器P0口中的數據傳送至A中直接尋址是給出操作數的直接地址?!纠竣臣拇嫫鲗ぶ稭OVA,R2;將R2中的數據傳送至A中
寄存器尋址的操作數在規(guī)定的寄存器中。
規(guī)定的寄存器有:①工作寄存器R0~R7
②累加器A③雙字節(jié)AB
④數據指針DPTR⑤位累加器Cy
這些被尋址寄存器中的內容就是操作數【例】⒋寄存器間接尋址MOVA,@R0;將以R0中內容為地址的存儲單元中的數據傳送至A中MOVXA,@DPTR;將外RAMDPTR所指存儲單元中的數據傳送至A中間接尋址是根據操作數地址的地址尋找操作數。間接尋址用間址符“@”作為前綴?!纠縜、數據傳送類指令(29條)傳送類指令占有較大的比重。數據傳送是進行數據處理的最基本的操作,這類指令一般不影響標志寄存器PSW的狀態(tài)。
傳送類指令可以分成兩大類。一是采用MOV操作符,稱為一般傳送指令;二是采用非MOV操作符,稱為特殊傳送指令,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。
指令系統分類介紹(1)一般傳送指令一、16位傳送這條指令的功能是將源操作數data16(通常是地址常數)送入目的操作數DPTR中。源操作數的尋址方式為立即尋址。例如:
執(zhí)行指令MOVDPTR,#1234H后(DPH)=12H,(DPL)=34H。二、8位傳送在5種源字節(jié)中,只有#data不能用作目的字節(jié)。所以可以用4種目的字節(jié)為基礎構造4類指令。相應的源字節(jié)選擇依據是:源字節(jié)與目的字節(jié)不相同(除direct外);寄存器尋址與寄存器間接尋址間不相互傳送。1.以A為目的
這組指令的功能是把源字節(jié)送入累加器中。源字節(jié)的尋址方式分別為直接尋址、寄存器間接尋址、寄存器尋址和立即尋址四種基本尋址方式。例:若(R1)=20H,(20H)=55H,執(zhí)行指令MOVA,@R1后,(A)=55H。2.以Rn
為目的
這組指令的功能是把源字節(jié)送入寄存器Rn中。源字節(jié)的尋址方式分別為立即尋址、直接尋址和寄存器尋址(由于目的字節(jié)為工作寄存器,所以源字節(jié)不能是工作寄存器及其間址方式尋址)。例:若(50H)=40H,執(zhí)行指令MOVR6,50H后,(R6)=40H。3.以direct
為目的
這組指令的功能是把源字節(jié)送入direct中。源字節(jié)的尋址方式分別為立即尋址、直接尋址、寄存器間接尋址和寄存器尋址。例:若(R1)=50H,(50H)=18H,執(zhí)行指令MOV40H,@R1后,(40H)=18H。
4.以@Ri為目的
這組指令的功能是把源字節(jié)送入Ri內容為地址的單元,源字節(jié)尋址方式為立即尋址、直接尋址和寄存器尋址(因目的字節(jié)采用寄存器間接尋址,故源字節(jié)不能是寄存器及其間址尋址)。例:若(R1)=30H,(A)=20H,執(zhí)行指令MOV@R1,A后,(30H)=20H。
課堂練習1、指出下列指令中劃線的操作數的尋址方式。Mov R0,#60HMov A,30HMov A,@R02、A=5BH,R1=10H,R2=20H,R3=30H,(30H〕=4FH,試確定執(zhí)行下面指令后,R1,R2,R3各寄存器內容:
MOVR1,A MOVR2,30HMOVR3,#83H解答
1A=5BH,R1=10H,R2=20H,R3=30H,(30H〕=4FH,試確定執(zhí)行下面指令后,各寄存器內容:
MOVR1,A;A送R1 MOVR2,30H;(30H)送R2MOVR3,#83H;83H送R3
執(zhí)行后,R1=5BH,R2=4FH,R3=83H
3:順序執(zhí)行下列指令序列,求每一步執(zhí)行結果。MOVA,#30H MOV4FH,A MOVR0,#20H MOV@R0,4FH MOV21H,20H例2:順序執(zhí)行下列指令序列,求每一步執(zhí)行結果。MOVA,#30H MOV4FH,A MOVR0,#20H MOV@R0,4FH MOV21H,20H;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30H一般傳送指令(2)特殊傳送指令特殊傳送指令的操作符為:MOVC、MOVX、PUSH、POP、XCH、XCHD和SWAP。功能分別為:ROM查表、外部RAM讀寫、堆棧操作和交換指令
一、ROM查表
1.DPTR內容為基址
MOVCA,@A+DPTR;A←((A)+(DPTR))該指令首先執(zhí)行16位無符號數加法,將獲得的基址與變址之和作為16位的程序存儲器地址,然后將該地址單元的內容傳送到累加器A。指令執(zhí)行后DPTR的內容不變。2.PC內容為基址MOVCA,@A+PC;A←((A)+(PC))取出該單字節(jié)指令后PC的內容增1,以增1后的當前值去執(zhí)行16位無符號數加法,將獲得的基址與變址之和作為16位的程序存儲器地址。然后將該地址單元的內容傳送到累加器A。指令執(zhí)行后PC的內容不變。
例1現假設MOVCA,@A+DPTR指令存放在70H單元,ACC中原存放值為E0H,DPTR中值為2000H,則A+DPTR形成的地址為20E0H。20E0H單元中內容為47H,則執(zhí)行該指令后,ACC中原E0H被47H代替。該指令執(zhí)行過程示于下圖。
MOVCA,@A+DPTR執(zhí)行示意圖二、讀寫片外RAM
1.讀片外RAM
MOVXA,@DPTR
;A←((DPTR))
MOVXA,@Ri
;A←((Ri))
第一條指令以16位DPTR為間址寄存器讀片外RAM,可以尋址整個64K字節(jié)的片外RAM空間。指令執(zhí)行時,在DPH中的高8位地址由P2口輸出,在DPL中的低8位地址由P0口分時輸出,并由ALE信號鎖存在地址鎖存器中。第二條指令以R0或R1為間址寄存器,也可以讀整個64K字節(jié)的片外RAM空間。指令執(zhí)行時,低8位地址在R0或R1中由P0口分時輸出,ALE信號將地址信息鎖存在地址鎖存器中(多于256字節(jié)的訪問,高位地址由P2口提供)。
讀片外RAM的MOVX操作,使P3.7引腳輸出的信號選通片外RAM單元,相應單元的數據從P0口讀入累加器中。2.寫片外RAMMOVX@DPTR,A
;((DPTR))←(A)MOVX@Ri,A
;((Ri))←(A)
第一條指令以16位DPTR為間址寄存器寫外部RAM,可以尋址整個64K字節(jié)的片外RAM空間。指令執(zhí)行時,在DPH中高8位地址由P2口輸出,在DPL中的低8位地址,由P0口分時輸出,并由ALE信號鎖存在地址鎖存器中。
第二條指令以R0或R1為間址寄存器,也可以寫整個64K字節(jié)的片外RAM空間。指令執(zhí)行時,低8位地址在R0或R1中由P0口分時輸出,ALE信號將地址信息鎖存在地址鎖存器中(多于256字節(jié)的訪問,高位地址由P2口提供)。
寫片外RAM的“MOVX”操作,使P3.6引腳的信號有效,累加器A的內容從P0口輸出并寫入選通的相應片外RAM單元。堆棧是在內部RAM中按“后進先出”的規(guī)則組織的一片存儲區(qū)。此區(qū)的一端固定,稱為棧底;另一端是活動的,稱為棧頂。棧頂的位置(地址)由棧指針SP指示(即SP的內容是棧頂的地址)。在80C51中,堆棧的生長方向是向上的(地址增大)。三、堆棧操作
系統復位時,SP的內容為07H。通常用戶應在系統初始化時對SP重新設置。SP的值越小,堆棧的深度越深。
PUSHdirect
;SP←(SP)+1,(SP)←(direct)
POPdirect
;direct←((SP)),SP←(SP)-1
例:若(SP)=07H,(40H)=88H,執(zhí)行指令PUSH40H后,(SP)=08H,(08H)=88H。四、數據交換例:若(R0)=80H,(A)=20H。執(zhí)行指令XCHA,R0后,(A)=80H,(R0)=20H。對于單一的MOV類指令,傳送通常是單向的,即數據是從一處(源)到另一處(目的)的拷貝。而交換類指令完成的傳送是雙向的,是兩字節(jié)間或兩半字節(jié)間的雙向交換。
1.字節(jié)交換2.半字節(jié)交換
XCHD指令的功能是間址操作數的低半字節(jié)與A的低半字節(jié)內容互換。
SWAP指令的功能是累加器的高低4位互換。
例:若(R0)=30H,(30H)=67H,(A)=20H。執(zhí)行指令XCHDA,@R0指令后,(A)=27H,(30H)=60H。若(A)=30H,執(zhí)行指令SWAPA后,(A)=03H。說明:1.一條指令中不能同時出現兩個工作寄存器:
非法指令: MOVR1,R2
MOVR2,@R02.間址寄存器只能使用R0、R1。
非法指令:MOVA,@R2例2已知片內RAM50H單元中存放數值為AAH,設堆棧指針為30H,把此數值壓入堆棧,然后再彈出到40H單元中。試編制相應的程序:MOVSP,#30H;30H
SPPUSH50H;(SP)+1
SP, (50H)
31HPOP40H;(31H)
40H,
(SP)-1
SP例3將程序存儲器20F0H中的常數送入累加器A中。
用查表指令MOVCA,@A+DPTR MOV DPTR,#20F0H CLR A MOVCA,@A+DPTR
例5:實現片外數據存儲器數據傳送(2000H)?(2100H)。
MOVDPTR,#2000H MOVXA,@DPTR MOVDPTR,#2100H MOVX@DPTR,A
;DPTR=2000H
;A=X
;DPTR=2100H
;(2100H)=X片外數據存儲器不能直接尋址。下列為非法指令:
MOVXA,2000HMOVX2100H,2000H例6:查表法求Y=X2。設X(0≤X≤15)在片內RAM的20H單元中,要求將查表求Y,存入片內RAM21H單元。1)
ORG1000H SQU: MOVDPTR,#TAB ;確定表首地址(基地址)
MOVA,20H ;取X(偏移量)
MOVCA,@A+DPTR ;查表求Y=X2 MOV21H,A ;保存Y RET ;子程序結束
… ;其它程序段
ORG3000H ;常數表格首地址TAB: DB00,01,04,09,…,225 ;平方表
b、 算術運算指令與數據傳送指令不同,多數算術運算指令會影響標志位的狀態(tài),即CPU執(zhí)行算術運算指令后,根據數據操作情況自動設置標志位的狀態(tài)。狀態(tài)標志
MCS-51的程序狀態(tài)字寄存器PSW
為標志寄存器。其格式如下:CyACF0RS1RS0OV—P1.標志位(自動設置狀態(tài))1)Cy:進位標志位 保存運算后最高位的進位/借位狀態(tài),當有進位/借位,Cy=1,否則Cy=0。2)AC:輔助進位標志位 保存低半字節(jié)的進位/借位狀態(tài),當D3產生進位/借位,AC=1,否則AC=0。3)P:奇偶標志位 反映累加器A中數據中1的個數的奇偶性。當1的個數為奇數,P=1,否則P=0。4)OV:溢出標志位(-128----+127)
有符號數加、減運算產生溢出OV=1,否則OV=0。
如兩個正數+84和+105相加大于+127,其符號由正變負,由于溢出得負數,結果是錯誤的,這時OV=1。2.用戶選擇位(編程設置狀態(tài))1)F0:用戶自定義標志位。
2)RS1、RS0:
工作寄存器區(qū)選擇位。
復位時,PSW=00H例:復位后,設置使用工作寄存器3區(qū),其余標志位不變。解:
MOVPSW,#
18HRS1RS0工作寄存區(qū)000區(qū)011區(qū)102區(qū)113區(qū)CyACF0RS1RS0OV—Pb、算術運算類指令(24條)算術運算指令可以完成加、減、乘、除及加1和減1等運算。這類指令多數以A為源操作數之一,同時又使A為目的操作數。
進位(借位)標志CY為無符號整數的多字節(jié)加法、減法、移位等操作提供了方便;若看作兩個有符號數運算,還須判斷溢出標志OV;輔助進位標志AC用于BCD碼運算。算術運算操作將影響PSW中的OV、CY、AC和P等。
1加法一、不帶進位加CY:和的D7位有進位時,(CY)=1;否則,(CY)=0。AC:和的D3位有進位時,(AC)=1;否則,(AC)=0。OV:和超出結果范圍時,(OV)=1;溢出表示運算的結果超出了數值所允許的范圍(-128----+127)。如:兩個正數相加結果為負數或兩個負數相加結果為正數時屬于錯誤結果,此時(OV)=1。P:累加器ACC中“1”的個數為奇數時,(P)=1;為偶數時,(P)=0。
例若(A)=84H,(30H)=8DH,執(zhí)行指令ADDA,30H之后,由于:
即:(A)=11H,(CY)=1,(AC)=1,(OV)=1,(P)=0。
二、帶進位加指令的功能是把源操作數與累加器A的內容相加再與進位標志CY的值相加,結果送入目的操作數A中。加的進位標志CY的值是在該指令執(zhí)行之前已經存在的進位標志的值,而不是執(zhí)行該指令過程中產生的進位。ADDC的用途就是可以很方便地進行多字節(jié)加法。比如5678H+9ABCH,8051是8位機,只能做字節(jié)加法,所以就先做78H+BCH=134H,34H存在ACC,高位1放在CY中。然后把ACC中值取出,再做56H+9AH=F0H,再加CY,為F1H,連上剛才取出的,結果就是F134H。三、增1指令的功能是把源操作數的內容加1,結果再送回原單元。四、十進制調整
指令的功能是對累加器A中剛進行的兩個BCD碼的加法的結果進行十進制調整。兩個壓縮的BCD碼按二進制相加后,必須經過調整方能得到正確的壓縮BCD碼的和。DAABCD碼:是十進制數,逢十進一,只是數符0~9用4位二進制碼0000~1001表示而已;
調整要完成的任務是:(1)當累加器A中的低4位數出現了非BCD碼(1010(A)~1111(F)或低4位產生進位(AC=1),則應在低4位加6調整,以產生低4位正確的BCD結果。(2)當累加器A中的高4位數出現了非BCD碼(1010~1111)或高4位產生進位(CY=1),則應在高4位加6調整,以產生高4位正確的BCD結果。
十進制調整指令執(zhí)行后,PSW中的CY表示結果的百位值。例若(A)=01010110B,表示的BCD碼為56,(R2)=01100111B,表示的BCD碼為67,(CY)=0。執(zhí)行以下指令:ADDA,R2DAA由于(A)=00100011B,即,且(CY)=1,即結果為BCD數123。3.4.2減法一、帶借位減CY:差的位7需借位時,(CY)=1;否則,(CY)=0。AC:差的位3需借位時,(AC)=1;否則,(AC)=0。OV:若位6有借位而位7無借位或位7有借位而位6無借位時,(OV)=1。如要用此組指令完成不帶借位減法,只需先清CY為0。例若(A)=C9H,(R2)=54H,(CY)=1,執(zhí)行指令SUBBA,R2之后,由于:
即:(A)=74H,(CY)=0,(AC)=0,(OV)=1(位6有借位,位7無借位),(P)=0。
二、減1這組指令的功能是把操作數的內容減1,結果再送回原單元。這組指令僅DECA影響P標志。其余指令都不影響標志位的狀態(tài)。3.4.3乘法
MULAB;累加器A與B寄存器相乘該指令的功能是將累加器A與寄存器B中的無符號8位二進制數相乘,乘積的低8位留在累加器A中,高8位存放在寄存器B中。當乘積大于FFH時,溢出標志位(OV)=1。而標志CY總是被清0。例若(A)=50H,(B)=A0H,執(zhí)行指令MULAB之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。
3.4.4除法
DIVAB;累加器A除以寄存器B
該指令的功能是將累加器A中的無符號8位二進制數除以寄存器B中的無符號8位二進制數,商存放在累加器A中,余數部分存放在寄存器B中。本指令執(zhí)行后,CY和OV均復位。當除數為0時,則結果的A和B的內容不定,且溢出標志位(OV)=1。而標志CY總是被清0。例若(A)=FBH(251),(B)=12H(18),執(zhí)行指令DIVAB之后,(A)=0DH(13),(B)=11H(17),(OV)=0,(CY)=0。練習1:求下列指令執(zhí)行后,累加器A及PSW中進位位CY,奇偶位P和OV位的值。(1)當A=5BH,CY=1時,執(zhí)行指令“SUBBA,#7FH”(2)A=AEH,R1=81H,CY=1,執(zhí)行指令“ADDCA,R1”練習2、閱讀并分析程序
1、以下程序段執(zhí)行后,
(40H)=
,
(41H)=
。
CLRC
MOVA,#56H
SUBBA,#0F8H
MOV40H,A
MOVA,#78H
SUBBA,#0EH
MOV41H,A
2、如果DPTR=507BH,SP=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,則執(zhí)行下列指令后:
POP DPH POP DPL POP SP
則:DPH=(),DPL=(),SP=()
(1)當A=5BH,CY=1時,執(zhí)行“SUBBA,#E8H”解:操作如下:結果:A=72H,CY=1,P=0,OV=0(2)A=AEH,R1=81H,CY=1,執(zhí)行指令“ADDCA,R1”解:操作如下:結果:A=30H,CY=1,P=0,OV=12、以下程序段執(zhí)行后,
(40H)=
5EH
,
(41H)=
69H
。
CLRC
MOVA,#56H
SUBBA,#0F8H
MOV40H,A
MOVA,#78H
SUBBA,#0EH
MOV41H,A
2、答:DPH=3CH,DPL=5FH,SP=4FH->(C)=0->(A)=56H->(A)=5EH;C=1->(40H)=5EH->(A)=78H->(A)=69H->(41H)=69H3.5邏輯運算與循環(huán)類指令(24條)
邏輯運算指令可以完成與、或、異或、清0和取反操作,當以累加器A為目的操作數時,對P標志有影響;累加器清0操作對P標志有影響。
循環(huán)指令是對累加器A的循環(huán)移位操作,包括左、右方向以及帶與不帶進位位等移位方式,移位操作時,帶進位的循環(huán)移位對CY和P標志有影響;
3.5.1邏輯與
前2條指令的功能是把源操作數與直接地址指示的單元內容相與,結果送入直接地址指示的單元。后4條指令的功能是把源操作數與累加器A的內容相與,結果送入累加器A中。例若(A)=C3H,(R0)=AAH,執(zhí)行指令ANLA,R0之后,(A)=82H。前2條指令的功能是把源操作數與直接地址指示的單元內容相或,結果送入直接地址指示的單元。后4條指令的功能是把源操作數與累加器A的內容相或,結果送入累加器A中。3.5.2邏輯或例若(A)=C3H,(R0)=55H,執(zhí)行指令ORLA,R0之后,(A)=D7H。
3.5.3邏輯異或
前2條指令的功能是把源操作數與直接地址指示的單元內容異或,結果送入直接地址指示的單元。后4條指令的功能是把源操作數與累加器A的內容異或,結果送入累加器A中。例若(A)=C3H,(R0)=AAH,執(zhí)行指令XRLA,R0之后,(A)=69H。
3.5.4累加器清0和取反
;A←0
;A←
這兩條指令的功能分別是把累加器A的內容清0和取反,結果仍在A中。例若(A)=A5H,執(zhí)行指令CLRA之后,(A)=00H。
3.5.5累加器循環(huán)移位
有時“累加器A內容乘2”的任務可以利用指令RLCA方便地完成。例:若(A)=BDH=10111101B,(CY)=0。執(zhí)行指令RLCA后,(CY)=1,(A)=01111010B=7AH,(CY)=1。
結果為:17AH(378)=2×BDH(189)。
當A=5BH時,執(zhí)行“ANLA,#7AH”當A=5BH時,執(zhí)行“ANLA,#7AH”解:操作如下:結果:A=5AH,P=0當A=5BH時,執(zhí)行“XRLA,#7FH”當A=5BH時,執(zhí)行“XRLA,#7FH”解:操作如下:結果:A=24H,P=03.6控制轉移類指令(17條)
通常情況下,程序的執(zhí)行是順序進行的,但也可以根據需要改變程序的執(zhí)行順序,這種情況稱作程序轉移。
控制程序的轉移要利用轉移指令。80C51的轉移指令有無條件轉移、條件轉移及子程序調用與返回等。一、短跳轉3.6.1無條件轉移
AJMPaddr11;PC←(PC)+2,;PC10~0←addr11
該指令執(zhí)行時,先將PC的內容加2(這是PC指向的是AJMP的下一條指令),然后把指令中11位地址碼傳送到PC10~0,而PC15~11保持原內容不變。例如:執(zhí)行如下指令:2030HAJMP60H執(zhí)行后,PC值由2032H變?yōu)?060H二、長跳轉
LJMPaddr16;PC←addr16
第一字節(jié)為操作碼,該指令執(zhí)行時,將指令的第二、三字節(jié)地址碼分別裝入指令計數器PC的高8位和低8位中,程序無條件地轉移到指定的目標地址去執(zhí)行。
LJMP提供的是16位地址,因此程序可以轉向64KB的程序存儲器地址空間的任何單元。例如:執(zhí)行如下指令:1000HLJMP3000H執(zhí)行后,PC值由1003H變?yōu)?000H三、相對轉移
SJMPrel
;PC←(PC)+2,PC←(PC)+rel
第一字節(jié)為操作碼,第二字節(jié)為相對偏移量rel,rel
是一個帶符號的偏移字節(jié)數,取值范圍為+127~-128(00H~7FH對應表示0~+127,80H~FFH對應表示-128~-1)。負數表示反向轉移,正數表示正向轉移。
rel
可以是一個轉移目標地址的標號,由匯編程序在匯編過程中自動計算偏移地址,并填入指令代碼中。例如:執(zhí)行如下指令,2000HSJMP7執(zhí)行后,PC值由2002H變?yōu)?009H四、散轉移
JMP@A+DPTR;PC←(PC)+1,PC←(A)+(DPTR)該指令具有散轉功能,可以代替許多判別跳轉指令。其轉移地址由數據指針DPTR的16位數和累加器A的8位數進行無符號數相加形成,并直接裝入PC。該指令執(zhí)行時對標志位無影響。例有一段程序如下:
MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT3當(A)=00H時,程序將轉到ROUT0處執(zhí)行;當(A)=02H時,程序將轉到ROUT1處執(zhí)行;其余類推。
練習1練習2練習3:下列程序段的功能是什么?
PUSH A PUSH B POP A POP B練習4:試編寫計算1234H+0FE7H的程序,將和的高8位存入41H,低8位存入40H單元練習5、簡單編程題1、試編寫一個程序,將內部RAM中45H單元的高4位清0。低4位置1。(兩種方法實現)
練習1:A=6EH(30H)=EEHANL:----A:56HORL:----A:F6HSWAP----A:6FHCPL:----A:90HXRL:…..A:6EHORL:-----(30H):EEH練習2:0CBH練習3:交換A、B內容練習4:試編寫計算1234H+0FE7H的程序,將和的高8位存入41H,低8位存入40H單元MOVA,#34HADDA,#0E7HMOV40H,AMOVA,#12HADDCA,#0FHMOV41H,A練習5、簡單編程題1、試編寫一個程序,將內部RAM中45H單元的高4位清0。低4位置1。(兩種方法實現)
解:方法1:用交換指令
MOVA,#0FH
XCHA,45H
方法2:用傳送指令
MOV45H;#0FH
控制轉移類指令(17條)3.6.2條件轉移
一、累加器判0轉移
指令的功能是對累加器A的內容為0和不為0進行檢測并轉移。當不滿足各自的條件時,程序繼續(xù)往下執(zhí)行(PC+2-----PC)。當各自的條件滿足時,程序轉向指定的目標地址(PC+2+rel----PC)。目標地址的計算與SJMP指令情況相同。指令執(zhí)行時對標志位無影響。例若累加器A原始內容為00H,則:
JNZL1;由于A的內容為00H,所以程序往下執(zhí)行
INCA;
JNZL2;由于A的內容已不為0,所以程序轉向L2處執(zhí)行
二、比較不相等轉移
這組指令的功能是對指定的目的字節(jié)和源字節(jié)進行比較,若它們的值不相等則轉移,轉移的目標地址為當前的PC值加3后,再加指令的第三字節(jié)偏移量rel(PC+3+rel----PC);若目的字節(jié)的內容等于源字節(jié)的內容,程序將繼續(xù)往下執(zhí)行。PC+3-----PC三、減1不為0轉移
這組指令每執(zhí)行一次,便將目的操作數的循環(huán)控制單元的內容減1,并判其是否為0。若不為0,則轉移到目標地址繼續(xù)循環(huán);若為0,則結束循環(huán),程序往下執(zhí)行。例有一段程序如下:
MOV23H,#0AHCLRALOOPX:ADDA,23HDJNZ23H,LOOPXSJMP$
該程序執(zhí)行后:
(A)=10+9+8+7+6+5+4+3+2+1=37H簡單編程將累加器A的內容由0遞增,加到100,結果存在累加器A中。CLRAMOV50H,#64HL1:INCADJNZ50H,L13.6.3調用與轉移
這兩條指令可以實現子程序的短調用和長調用。目標地址的形成方式與AJMP和LJMP相似。這兩條指令的執(zhí)行不影響任何標志。
一、調用
RET指令的功能是從堆棧中彈出由調用指令壓入堆棧保護的斷點地址,并送入指令計數器PC,從而結束子程序的執(zhí)行。程序返回到斷點處繼續(xù)執(zhí)行。二、返回
RETI指令是專用于中斷服務程序返回的指令,除正確返回中斷斷點處執(zhí)行主程序以外,并有清除內部相應的中斷狀態(tài)寄存器(以保證正確的中斷邏輯)的功能。3.6.4空操作
NOP;PC←(PC)+1這條指令不產生任何控制操作,只是將程序計數器PC的內容加1。該指令在執(zhí)行時間上要消耗1個機器周期,在存儲空間上可以占用一個字節(jié)。因此,常用來實現較短時間的延時。位尋址區(qū)的位地址映象表
字節(jié)地址位地址D7D6D5D4D3D2D1D02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00H特殊功能寄存器(SFR)
特殊功能寄存器地址映象表(一)
3.7位操作類指令(17條)
位操作又稱布爾操作,它是以位為單位進行的各種操作。位操作指令中的位地址有4種表示形式:
直接地址方式(如,0D5H);點操作符方式(如,0D0H.5、PSW.5等);位名稱方式(如,F0);偽指令定義方式(如,MYFLAGBITF0)。以上幾種形式表示的都是PSW中的位5。與字節(jié)操作指令中累加器ACC用字符“A”表示類似的是,在位操作指令中,位累加器要用字符“C”表示。
MOVbit,C;bit←(CY)
MOVC,bit;CY←(bit)這兩條指令可以實現指定位地址中的內容與位累加器CY的內容的相互傳送。3.7.1位傳送
例若(CY)=1,(P3)=11000101B,(P1)=00110101B。執(zhí)行以下指令:
MOVP1.3,CMOVC,P3.3MOVP1.2,C
結果為:(CY)=0,P3的內容未變,P1的內容變?yōu)?0111001B。一、位清03.7.2位狀態(tài)設置
這兩條指令可以實現位地址內容和位累加器內容的清0。例若(P1)=10011101B。執(zhí)行指令CLRP1.3后,結果為:(P1)=10010101B。二、位置位這兩條指令可以實現地址內容和位累加器內容的置位。例若(P1)=10011100B。執(zhí)行指令SETBP1.0后,(P1)=10011101B。一、位邏輯“與”3.7.3位邏輯運算
例若(P1)=10011100B,(CY)=1。執(zhí)行指令ANLC,P1.0后,結果為:P1內容不變,而(CY)=0。這兩條指令可以實現位地址單元內容或取反后的值與位累加器的內容“與”操作,操作的結果送位累加器C。二、位邏輯“或”這兩條指令可以實現位地址單元內容或取反后的值與位累加器的內容“或”操作,操作的結果送位累加器C。三、位取反這兩條指令可以實現位地址單元內容和位累加器內容的取反。一、判CY轉移3.7.4位判跳(條件轉移)
這兩條指令的功能是對進位標志位CY進行檢測,當(CY)=1(第一條指令)或(CY)=0(第二條指令),程序轉向PC當前值與rel之和的目標地址去執(zhí)行,否則程序將順序執(zhí)行。
二、判bit轉移這三條指令的功能是對指定位bit進行檢測,當(bit)=1(第一和第二條指令)或(bit)=0(第三條指令),程序轉向PC當前值與rel之和的目標地址去執(zhí)行,否則程序將順序執(zhí)行。對于第二條指令,當條件滿足時(指定位為1),還具有將該指定位清0的功能。例:1:執(zhí)行下列程序段后,(P1)=____H。
MOVP1,#5DHCPLP1.1CPLP1.2CLRP1.6SETBP1.7例2:執(zhí)行下列程序段后,(P1)=__9BH__。
MOVP1,#5DHCPLP1.1CPLP1.2CLRP1.6SETBP1.7-----
P1=01011101-----
P1=01011111-----
P1=01011011-----
P1=00011011-----
P1=10011011例2:將ACC.5與80H位相“與”的結果,通過P1.4輸出MOVC,ACC.5ANLC,80HMOVP1.4,C課堂練習1、下列程序段執(zhí)行后,(R0)=_______,(7EH)=____,(7FH)=_______MOVR0,#7EHMOV7EH,#0FFHMOV7FH,#40HINC@R0INCR0INC@R02、閱讀下列程序,說明其功能。
MOVR0,#dataMOVA,@R0RLAMOVR1,ARLARLAADDA,R1MOV@R0,ARET3、計算下面子程序中程序執(zhí)行的時間(晶振頻率為12MHz)。
MOV R3,#15 ;1個機器周期DL1:MOV R4,#255 ;1個機器周期DL2:MOV P1,R3 ;2個機器周期
DJNZ R4,DL2 ;2個機器周期
DJNZ R3,DL1 ;2個機器周期
RET ;2個機器周期答:[1+2+(2+2)×255]×15+1+2=15348us4.24用80C51單片機的P1端口作輸出,接8只發(fā)光二極管,如下圖所示,當輸出位為0時,發(fā)光二極管點亮;輸出位為1時,發(fā)光二極管變暗;試分析下述程序執(zhí)行過程及發(fā)光二極管點亮的規(guī)律。(41頁)子程序:
DELAY:MOVR2,#0FAH(250D)L1:MOVR3,#0FAHL2:DJNZR3,L2DJNZR2,L1RET解:
LP:MOVP1,#7EH;LCALLDELAY;MOVP1,#0BDH;LCALLDELAY;MOVP1,#0DBH;LCALLDELAY;MOVP1,#E7H;LCALLDELAYMOVP1,#DBH;LCALLDELAY;MOVP1,#0BDH;LCALLDELAYSJMPLP------>P1=01111110----->1,8亮------>P1=10111101---->2,7亮------>P1=11011011---->3,6亮------>P1=01111110---->4,5亮------>P1=11011011---->3,6亮------>P1=10111101---->2,7亮1、下列程序段執(zhí)行后,(R0)=_7FH_,(7EH)=_00H_,(7FH)=_41H_MOVR0,#7EHMOV7EH,#0FFHMOV7FH,#40HINC@R0INCR0INC@R0-----
R0=7EH-----
(7EH)=0FFH-----
(7FH)=40H-----
(7EH)=00H-----
R0=7FH-----(7FH)=41H2、閱讀下列程序,說明其功能。
MOVR0,#dataMOVA,@R0RLAMOVR1,ARLARLAADDA,R1
MOV@R0,ARET---
R0=data---
A=(data)---A=(data)×2---R1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 道德與法治七年級上冊8.1 《生命可以永恒嗎》聽課評課記錄
- 湘教版數學七年級上冊《3.2 等式的性質》聽評課記錄
- 新北師大版數學一年級下冊《誰的紅果多》聽評課記錄
- 獨立住宅買賣協議書(2篇)
- 【2022年新課標】部編版七年級上冊道德與法治7.3 讓家更美好 聽課評課記錄
- 魯教版地理六年級下冊8.3《撒哈拉以南非洲》聽課評課記錄1
- 湘教版數學七年級下冊《2.1.4多項式的乘法(2)》聽評課記錄2
- 湘教版數學八年級下冊《2.3中心對稱》聽評課記錄
- 商務星球版地理八年級下冊活動課《區(qū)際聯系對經濟發(fā)展的影響》聽課評課記錄
- 蘇科版數學八年級下冊11.3《用反比例函數解決問題》聽評課記錄2
- 手術安全管理之手術部位標識安全
- 2022年版煤礦安全規(guī)程
- 高質量社區(qū)建設的路徑與探索
- 數字化時代的酒店員工培訓:技能升級
- 足球守門員撲救技巧:撲救結合守護球門安全
- 《學術規(guī)范和論文寫作》課件全套 第1-10章 知:認識研究與論文寫作 - 引文規(guī)范
- 帶式輸送機滾筒出廠檢驗規(guī)范
- 起重機更換卷筒施工方案
- 《信息檢索基礎知識》課件
- 具有履行合同所必須的設備和專業(yè)技術能力的承諾函-設備和專業(yè)技術能力承諾
- 01智慧物流信息技術概述
評論
0/150
提交評論