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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

個(gè)標(biāo)志位的意義如下:

PSW.7(Cy):進(jìn)位標(biāo)志位。

PSW.6(AC):輔助進(jìn)位標(biāo)志位,又稱為半進(jìn)位標(biāo)志位。

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

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

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

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

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

應(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)相對(duì)尋址(8)位尋址

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

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

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

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

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

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

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

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

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

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

DPL\后,棧指針SP的值將減2,因?yàn)槊總€(gè)PUSH操作會(huì)將兩個(gè)字節(jié)的數(shù)據(jù)(DPH和

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

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

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

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

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

此SP值為5FHo

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

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

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

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

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

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

(2)在執(zhí)行\(zhòng)POPACC\后,SP值會(huì)增加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ù)存儲(chǔ)單元內(nèi)容送入地址為30H的片內(nèi)數(shù)據(jù)存儲(chǔ)

單元中。

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

儲(chǔ)單元中。

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

中O

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

⑸將片內(nèi)數(shù)據(jù)存儲(chǔ)器中地址為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存儲(chǔ)單元中的十進(jìn)制數(shù)與38H,39H存儲(chǔ)單元中的十進(jìn)制數(shù)進(jìn)

行十進(jìn)制加法運(yùn)算,其和送入40H,41H存儲(chǔ)單元中。

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

#include<absacc.>

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

voidmain(void)

{unsignedintsum;

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

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

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

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

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

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

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

)

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

十六進(jìn)制加法、十進(jìn)制加法運(yùn)算,其和送入2620H單元中,請(qǐng)寫出完成上述要

求的指令。

偽指令:

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

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

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

指令示例:

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

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

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

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

存儲(chǔ)單元的內(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.什么指令可以改變程序計(jì)數(shù)器PC的值?

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

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

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

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

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

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

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

11.當(dāng)8051單片機(jī)沒有外擴(kuò)RAM時(shí),將永遠(yuǎn)不會(huì)用到什么指令?為什么?

當(dāng)8051單片機(jī)沒有外擴(kuò)RAM時(shí),將永遠(yuǎn)不會(huì)用到訪問外部數(shù)據(jù)存儲(chǔ)器(DSEG)的指

令。

這是因?yàn)?051單片機(jī)的內(nèi)部RAM被劃分為兩個(gè)部分:數(shù)據(jù)存儲(chǔ)器(DSEG)和片內(nèi)數(shù)據(jù)

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

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

(DSEG)的一種方式。

當(dāng)8051單片機(jī)沒有外擴(kuò)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論