單片機原理及應(yīng)用- 習(xí)題及答案 莊俊華 【ch03】單片機的指令系統(tǒng)_第1頁
單片機原理及應(yīng)用- 習(xí)題及答案 莊俊華 【ch03】單片機的指令系統(tǒng)_第2頁
單片機原理及應(yīng)用- 習(xí)題及答案 莊俊華 【ch03】單片機的指令系統(tǒng)_第3頁
單片機原理及應(yīng)用- 習(xí)題及答案 莊俊華 【ch03】單片機的指令系統(tǒng)_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第3章單片機的指令系統(tǒng)

1.在程序狀態(tài)字PSW中,有哪幾個狀態(tài)位?有哪幾個控制位?

程序狀態(tài)字PSW是8位寄存器,用于存放程序運行的狀態(tài)信息,PSW中各位狀態(tài)通常

是在指令執(zhí)行的過程中自動形成的,但也可以由用戶根據(jù)需要采用傳送指令加以改變。各

個標志位的意義如下:

PSW.7(Cy):進位標志位。

PSW.6(AC):輔助進位標志位,又稱為半進位標志位。

PSW.5(F0):用戶標志位。

PSW.4、PSW.3(RS1和RSO):寄存器組選擇位。

PSW.2(0V):溢出標志位。

PSW.1(空缺位):此位未定義。

PSW.0(P):奇偶校驗位

應(yīng)該都是狀態(tài)位p3和p4可以控制寄存器選擇

2.分別指出下列指令中的目的操作數(shù)的尋址方式。

MOVA,#64H

MOVA,R3

MOVA,60H

MOVA.(3JR1

MOVXA,@DPTR

MOVCA,@A+PC

(1)寄存器尋址(2)立即數(shù)尋址(3)直接尋址(4)寄存器間接尋址⑸寄存器間接尋址(6)

基址加變址寄存器間接尋址(7)相對尋址(8)位尋址

3.試述指令“MOVA,#5OH”與“MOVA,50H”的區(qū)別。

區(qū)別有三條:(1)MOVAX,2003H對源操作數(shù)是立即尋址,而MOVAX.[2000H]對源操作數(shù)

是直接尋址;(2)前者功能是把立即數(shù)2000H送入AX中,而后者是把內(nèi)存2000H單元與

2001H單元的內(nèi)容取出送入AX中;(3)兩者的機器代碼不同,執(zhí)行速度也不同,前者執(zhí)行

時間快,后者執(zhí)行時間慢。

4.若堆棧指針的初始值為60H,DPTR=2000H,試問:

(1)在“PUSHDPH”和“PUSHDPL”后的SP值是什么?

(2)在“POPACC”又“POPACC”后的ACC值是什么?

1.在執(zhí)行\(zhòng)USHDPH\和\USHDPL\指令后,SP(堆棧指針)的值會減2。因此,如果初

始SP的值為60H,那么執(zhí)行這兩條指令后,SP的值將(1)在執(zhí)行\(zhòng)PUSHDPH\和\PUSH

DPL\后,棧指針SP的值將減2,因為每個PUSH操作會將兩個字節(jié)的數(shù)據(jù)(DPH和

DPL)壓棧。因此,SP的值將變?yōu)?EHo

(2)在執(zhí)行\(zhòng)POP變?yōu)?EH。

2.在執(zhí)行指令后,ACC(累加器)的值將從堆棧中被彈出。根據(jù)

提供的信息,這兩條指令會從堆棧中彈出兩個字節(jié),分別存儲在DPTR和ACC中。由于

DP(1)在執(zhí)行\(zhòng)PUSHDPH\后,SP值會減小1,而DPH的值為高字節(jié)部分,即20H,因

此SP值為5FHo

在執(zhí)行\(zhòng)PUSHDPL\后,SP值再次減小1,并將DPL的值壓入堆ACC\和\POPACC\

之后,ACC寄存器的值將依次恢復(fù)為彈出的兩個字節(jié)數(shù)據(jù)。具體的值取決于棧中存儲的數(shù)

據(jù),無法得知具體的數(shù)值。TR的初始值為2000H,兩個字節(jié)的數(shù)據(jù)將從這個地址開始被彈

出,并存儲在ACC中。因此,如果DPTR的初始值為2000H,并且堆棧中存有兩個字節(jié)的數(shù)

據(jù),那么執(zhí)行這兩條指令后,ACC的值將被更新為堆棧中存儲的兩字節(jié)數(shù)據(jù)的值。棧,即

將低字節(jié)部分的值00H壓入堆棧。因此,最終的SP值為5EH。

(2)在執(zhí)行\(zhòng)POPACC\后,SP值會增加1,將堆棧中的值彈出給ACC寄存器。由于

之前將DPL的值壓入堆棧,所以ACC的值將變?yōu)镺OHo

然后執(zhí)行\(zhòng)POPACC\再次彈出堆棧中的值給ACC寄存器。由于之前將DPH的值壓入

堆棧,所以ACC的值將變?yōu)?01L

5.已知:(20H)=25H,(25H)=10H,(P1)=OFOH,在執(zhí)行下列指令后,

(A),(30H),(R1),

(RO),(B),(P3)的內(nèi)容是什么?

MOVRl,#20H

MOV30H,@R1

MOVR0,30H

MOVB,@R0

MOVA,Pl

MOVP3,A

略。

6.寫出完成下列要求的指令。

⑴將地址為4000H的片外數(shù)據(jù)存儲單元內(nèi)容送入地址為30H的片內(nèi)數(shù)據(jù)存儲

單元中。

⑵將地址為4000H的片外數(shù)據(jù)存儲單元內(nèi)容送入地址為3000H的片外數(shù)據(jù)存

儲單元中。

⑶將地址為0800H的程序存儲單元內(nèi)容送入地址為30H的片內(nèi)數(shù)據(jù)存儲單元

中O

⑷將片內(nèi)數(shù)據(jù)存儲器中地址為30H與40H的單元內(nèi)容交換。

⑸將片內(nèi)數(shù)據(jù)存儲器中地址為30H單元的低4位與高4位交換。

(1)ORG0000HMOVDPTR,#4900HMOVXA,?DPTRMOV30H,AEND

(2)ORG0000HMOVDPTR,#4000HMOVXA,?DPTRMOVDPTR,#3003HMOVX?DPTR,AEND

(3)ORG0000HMOVDPTR,#0800HMOVA,#00HMOVCA,?A+DPTRMOV30H,AEND

(4)ORG0000HMOVA,30HXCHA,40HMOV30H,AEND

(5)ORG000011MOVA,30HSWAPAMOV30H,AEND

7.將30H,31H存儲單元中的十進制數(shù)與38H,39H存儲單元中的十進制數(shù)進

行十進制加法運算,其和送入40H,41H存儲單元中。

#include<REG52.>〃片內(nèi)寄存器定義

#include<absacc.>

/***********mainC**************/

voidmain(void)

{unsignedintsum;

sum=DBYTE[0x30]+DBYTE[0x38];

if((sumOxOOOf)>0x9)sum+=0x06;〃個位十進制調(diào)整

if(sum>0x99)sum+=0x60;〃十位十進制調(diào)整

DBYTE[0x40]=sum;〃和低位字節(jié)

DBYTE[0x41]=(sum>>8)十DBYTE[0x31]十DBYTE[0x39];〃和高位字節(jié)

if(DBYTE[0x41]>0x09)DBYTE[0x41]+=0x06;〃百位十進制調(diào)整while(1);/*程序

在此死循環(huán)*/

)

8.將片外數(shù)據(jù)存儲器的2600H存儲單元與2610H存儲單元中的數(shù)據(jù)分別進行

十六進制加法、十進制加法運算,其和送入2620H單元中,請寫出完成上述要

求的指令。

偽指令:

1.LDA2600H將2600H存儲單元的數(shù)據(jù)加載到累加器

2.ADDA261011;將2610H存儲單元的數(shù)據(jù)加到累加器上

3.STA2620H;將累加器中的結(jié)果存儲到2620H存儲單元中

指令示例:

1.LDAA260011;將260011存儲單元的數(shù)據(jù)加載到累加器

2.ADCA2610H;將2610H存儲單元的數(shù)據(jù)加到累加器上

3.STAA2620H;將累加器中的結(jié)果存儲到2620H存儲單元中

9.已知:(30H)=55H,(31H)=0AAH,分別寫出完成下列要求的指令,并寫出32H

存儲單元的內(nèi)容。

(1)(30H)-(31H)T(32H)。

(2)(30H)V(31H)->(32H)o

(3)(30H)+(31H)T(32H)o

(l)(30H)&(31H)->(32H);DBYTE[0x32]=DBYTE[0x30]&DBYTE[0x31];0x00

(2)(30H)|(31H)(32H);DBYTE[0x32]=DBYTE[0x30]|DBYTE[0x31];0xff

(3)(30H)?31H)f(32H);DBYTE[0x32]=DBYTE[0x30]"DBYTE[0x31];Oxff

10.什么指令可以改變程序計數(shù)器PC的值?

1.分支指令;分支指令可以根據(jù)條件改變PC的值,使程序跳轉(zhuǎn)到不同的代碼塊。常

見的分支指令有條件跳轉(zhuǎn)指令(如if語句)和無條件跳轉(zhuǎn)指令(如got。語句)。

2.跳轉(zhuǎn)指令:跳轉(zhuǎn)指令可以直接修改PC的值,使程序無條件地跳轉(zhuǎn)到指定的地址。

3.子程序調(diào)用指令:子程序調(diào)用指令將當前PC的值保存在棧中,然后將PC設(shè)置為子

程序的起始地址。當子程序執(zhí)行完畢后,PC會被還原為之前保存的值,使程序繼續(xù)執(zhí)行。

4.中斷指令:中斷指令可以改變PC的值,使程序跳轉(zhuǎn)到斷處理程序。中斷指令通常

由外部事件觸發(fā),例如硬件設(shè)備的狀態(tài)改變或者系統(tǒng)調(diào)用。

11.當8051單片機沒有外擴RAM時,將永遠不會用到什么指令?為什么?

當8051單片機沒有外擴RAM時,將永遠不會用到訪問外部數(shù)據(jù)存儲器(DSEG)的指

令。

這是因為8051單片機的內(nèi)部RAM被劃分為兩個部分:數(shù)據(jù)存儲器(DSEG)和片內(nèi)數(shù)據(jù)

存儲器(ISEG)。數(shù)據(jù)存儲器(DSEG)用于存儲外設(shè)的數(shù)據(jù)和程序中的可變數(shù)據(jù),而片內(nèi)數(shù)

據(jù)存儲器(ISEG)用于存儲程序的指令和只讀數(shù)據(jù)。外擴RAM是用于擴展數(shù)據(jù)存儲器

(DSEG)的一種方式。

當8051單片機沒有外擴

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論