《微機(jī)原理與接口技術(shù)》(第四版)周何琴課后習(xí)題答案_第1頁(yè)
《微機(jī)原理與接口技術(shù)》(第四版)周何琴課后習(xí)題答案_第2頁(yè)
《微機(jī)原理與接口技術(shù)》(第四版)周何琴課后習(xí)題答案_第3頁(yè)
《微機(jī)原理與接口技術(shù)》(第四版)周何琴課后習(xí)題答案_第4頁(yè)
《微機(jī)原理與接口技術(shù)》(第四版)周何琴課后習(xí)題答案_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

______________________________________________________________________________________________________________

第1章緒論作業(yè)

1.將下列二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)。

(1)11001010B=202(2)00111101B=61

(3)01001101B=77(4)10100100B=164

3.將下列十進(jìn)制數(shù)分別轉(zhuǎn)換為二進(jìn)制數(shù)和十六進(jìn)制數(shù)。

(2)76=1001100B=4CH

(4)134=10000110B=86H

4.求下列十進(jìn)制數(shù)的BCD碼

(1)327=1100100111(BCD碼)

(2)1256=1001001010110(BCD碼)

6.求出下列10進(jìn)制數(shù)的原碼、反碼和補(bǔ)碼

(2)+85(4)-85

解:85=01010101B

原碼:+85=01010101B-85=11010101B

反碼:+85=01010101B-85=10101010B

補(bǔ)碼:+85=01010101B-85=10101011B

10.畫(huà)出微型計(jì)算機(jī)的基本結(jié)構(gòu)框圖,說(shuō)明各部分的主要功能是什么?

解:

微型計(jì)算機(jī)的基本結(jié)構(gòu)框圖如下:

微處理器地址總線

存儲(chǔ)器I/O接口I/O設(shè)備

CPUI/O總線

數(shù)據(jù)總線

控制總線

微處理器CPU:控制微處理器與存儲(chǔ)器或I/O設(shè)備間的數(shù)據(jù)交換;進(jìn)行算術(shù)和邏輯運(yùn)算等操作;判定和控

制程序流向。

微處理器主要完成:

(1)指令控制:從存儲(chǔ)器中取指令,指令譯碼;

(2)數(shù)據(jù)加工:簡(jiǎn)單的算術(shù)邏輯運(yùn)算;

(3)操作控制:在微處理器和存儲(chǔ)器或者I/O之間傳送數(shù)據(jù);

(4)時(shí)間控制:程序流向控制。

存儲(chǔ)器:用來(lái)存放數(shù)據(jù)和指令。

I/O接口:主機(jī)和外設(shè)間的橋梁,提供數(shù)據(jù)緩沖驅(qū)動(dòng)、信號(hào)電平轉(zhuǎn)換、信息轉(zhuǎn)換、地址譯碼、定時(shí)控制等

-可編輯修改-

______________________________________________________________________________________________________________

各種功能。

I/O設(shè)備:輸入原始數(shù)據(jù)和程序,轉(zhuǎn)換成計(jì)算機(jī)能識(shí)別的信息,送入存儲(chǔ)器去等待處理。輸出運(yùn)算結(jié)果。

總線:連接計(jì)算機(jī)系統(tǒng)中各功能部件的信息通道。

第2章8086CPU作業(yè)

2.8086CPU內(nèi)部由哪兩部分組成?它們的大致是如何工作的?

答:

(1)8086CPU由指令執(zhí)行部件EU和總線接口部件BIU兩部分組成。

(2)

①BIU先執(zhí)行讀存儲(chǔ)器操作,從給定地址單元中取出指令,送到先進(jìn)先出的指令隊(duì)列中等待執(zhí)行。

存儲(chǔ)器的物理地址=CS16+IP,在地址加法器中形成。

②EU從指令隊(duì)列中取走指令,經(jīng)EU控制器譯碼分析后,向各部件發(fā)控制命令,以完成執(zhí)行指令的操

作。BIU與EU是并行工作方式。

③當(dāng)指令隊(duì)列已滿,EU在執(zhí)行指令,未向總線接口單元BIU申請(qǐng)讀/寫(xiě)內(nèi)存或I/O操作時(shí),BIU處于

空閑狀態(tài)。

④指令執(zhí)行過(guò)程中,若需對(duì)存儲(chǔ)器或I/O端口存取數(shù)據(jù),EU就要求BIU去完成相應(yīng)的總線周期。

5.兩個(gè)帶符號(hào)數(shù)10110100B和11000111B相加,運(yùn)算后各標(biāo)志位的值等于多少?哪些標(biāo)志位是有

意義的?如果把這兩個(gè)數(shù)當(dāng)成無(wú)符號(hào)數(shù),相加后哪些標(biāo)志位是有意義的?

解:

(1)兩個(gè)帶符號(hào)數(shù):不考慮CF標(biāo)志

10110100

+11000111

101111011

運(yùn)算后各標(biāo)志位狀態(tài)如下:

CF=1,有進(jìn)位,對(duì)于帶符號(hào)數(shù),無(wú)意義。

PF=1,結(jié)果有偶數(shù)個(gè)1

AF=0,無(wú)半進(jìn)位,非BCD碼運(yùn)算,無(wú)意義。

ZF=0,結(jié)果非0

SF=0,結(jié)果為正數(shù)

OF=1,溢出(兩個(gè)負(fù)數(shù)相加,結(jié)果變成了正數(shù))

(2)兩個(gè)無(wú)符號(hào)數(shù):不考慮SF和OF標(biāo)志

10110100

+11000111

101111011

運(yùn)算后各標(biāo)志位狀態(tài)如下:

CF=1,有進(jìn)位

PF=1,結(jié)果有偶數(shù)個(gè)1

ZF=0,結(jié)果非0

AF、SF、OF無(wú)意義。

20.簡(jiǎn)要解釋下列名詞的意義。

CPU:中央處理單元CPU(ControlProcessingUnit)也稱微處理器,是微型計(jì)算機(jī)的核心部件,由

運(yùn)算器ALU、控制器、寄存器組以及總線接口等部件組成。主要完成各種運(yùn)算,負(fù)責(zé)對(duì)整機(jī)的控制。

存儲(chǔ)器:用于存儲(chǔ)程序和數(shù)據(jù)的硬件設(shè)備。

堆棧:堆棧是一種數(shù)據(jù)結(jié)構(gòu),是內(nèi)部RAM的一段區(qū)域。設(shè)置堆棧的目的是用于數(shù)據(jù)的暫存,中斷、子

程序調(diào)用時(shí)斷點(diǎn)和現(xiàn)場(chǎng)的保護(hù)與恢復(fù)。

IP:指令指針寄存器,用于控制CPU的指令執(zhí)行順序(只存放偏移量),只能和代碼段寄存器CS配合

使用,可以確定當(dāng)前所要取的指令的內(nèi)存地址,且始終指向代碼段中下一條將要讀取到CPU指令隊(duì)列的那

條指令。順序執(zhí)行程序時(shí),CPU每取一個(gè)指令字節(jié),IP自動(dòng)加1,指向下一個(gè)要讀取的字節(jié)。

SP:堆棧指針寄存器,用于指示堆棧的棧頂?shù)刂菲屏康募拇嫫?,它決定了堆棧在內(nèi)部RAM中的物理

位置。只能和SS段寄存器配合使用,且始終指向堆棧的棧頂,在堆棧指令中隱含的使用它來(lái)定位棧頂數(shù)據(jù)。

BP:基址指針寄存器。用于存放偏移量,通常和SS段寄存器配合使用,在間接尋址中用于定位堆棧段

中的內(nèi)存單元。

段寄存器:由于CPU內(nèi)部的寄存器都是16位的,為了能夠提供20位的物理地址,8086系統(tǒng)中采用了

存儲(chǔ)器分段的方法。規(guī)定存儲(chǔ)器的一個(gè)段為64KB,由段寄存器來(lái)確定存儲(chǔ)單元的段基址,由指令提供該單

元相對(duì)于相應(yīng)段起始地址的16位偏移量。

狀態(tài)標(biāo)志:表示前一步操作(如加、減等)執(zhí)行以后,ALU所處的狀態(tài),后續(xù)操作可以根據(jù)這些狀態(tài)

-可編輯修改-

______________________________________________________________________________________________________________

標(biāo)志進(jìn)行判斷,實(shí)現(xiàn)轉(zhuǎn)移。

控制標(biāo)志:可以通過(guò)指令人為設(shè)置,用以對(duì)某一種特定的功能起控制作用(如中斷屏蔽等),反映了人

們對(duì)微機(jī)系統(tǒng)工作方式的可控制性。

物理地址:存儲(chǔ)器的實(shí)際地址,它是指CPU和存儲(chǔ)器進(jìn)行數(shù)據(jù)交換時(shí)所使用的地址。物理地址是由段

地址與偏移地址共同決定的,計(jì)算物理地址的表達(dá)式為:

物理地址=段地址×16+偏移地址

邏輯地址:是在程序中使用的地址,它由段地址和偏移地址兩部分組成。

邏輯地址的表示形式為“段地址:偏移地址”。

機(jī)器語(yǔ)言:直接用二進(jìn)制編碼表述的指令系統(tǒng)語(yǔ)言,通常稱為機(jī)器語(yǔ)言,機(jī)器語(yǔ)言指令是計(jì)算機(jī)惟一

能直接識(shí)別和執(zhí)行的指令。

匯編語(yǔ)言:便于記憶和使用,通常使用匯編語(yǔ)言(符號(hào)指令或指令助記符)來(lái)描述計(jì)算機(jī)的指令系統(tǒng)。

指令:讓計(jì)算機(jī)完成某種操作的命令稱為指令。

指令系統(tǒng):一臺(tái)計(jì)算機(jī)所能識(shí)別、執(zhí)行的指令的集合就是它的指令系統(tǒng)。

總線:連接計(jì)算機(jī)系統(tǒng)中其他主要功能部件的橋梁,是計(jì)算機(jī)系統(tǒng)中信息輸送的樞紐,只有通過(guò)總線,

計(jì)算機(jī)系統(tǒng)的各部件才能實(shí)現(xiàn)相互通信。

內(nèi)部總線:微處理器內(nèi)部各個(gè)器件之間傳送信息的通路。

系統(tǒng)總線:微處理機(jī)機(jī)箱內(nèi)的底板總線。可分為:ISA、EISA、VESA局部總線、PCI局部總線等。

時(shí)鐘周期:CPU時(shí)鐘頻率的倒數(shù)稱為時(shí)鐘周期,也稱T狀態(tài)。

總線周期:BIU完成一次訪問(wèn)存儲(chǔ)器或I/O端口操作所需要的時(shí)間稱為總線周期。一個(gè)基本的總線周

期是由4個(gè)(或4個(gè)以上)時(shí)鐘周期組成的。

指令周期:執(zhí)行一條指令所需要的時(shí)間稱為指令周期,不同指令的指令周期的長(zhǎng)短是不同的。一個(gè)指

令周期是由幾個(gè)總線周期組成的。

21.要完成下列運(yùn)算和控制,用什么標(biāo)志判別?其值是什么?

(1)比較兩數(shù)是否相等?

(2)兩數(shù)運(yùn)算后結(jié)果是正數(shù)還是負(fù)數(shù)?

(3)兩數(shù)相加后是否溢出?

(4)奇偶校驗(yàn)判斷。

(5)兩數(shù)相減后比較大小。

(6)中斷信號(hào)能否允許?

答:

(1)比較兩數(shù)是否相等:兩數(shù)相減后用零標(biāo)志ZF判斷,ZF=1,則相等。

(2)兩數(shù)運(yùn)算后結(jié)果是正數(shù)還是負(fù)數(shù):用符號(hào)標(biāo)志SF判斷,SF=1,則結(jié)果為負(fù)數(shù)。

(3)兩數(shù)相加后是否溢出:用溢出標(biāo)志OF判斷,OF=1,則有溢出。

(4)奇偶校驗(yàn)判斷:采用偶校驗(yàn)方式,判定是否要補(bǔ)“1”?用奇偶標(biāo)志PF判斷,若數(shù)據(jù)結(jié)果低8位中

含有偶數(shù)個(gè)“1”,則PF=1;不用補(bǔ)“1”。

(5)兩數(shù)相減后比較大?。篫F=1,兩數(shù)相等。對(duì)于無(wú)符號(hào)數(shù),CF=1,則被減數(shù)小于減數(shù);CF=0,則被

減數(shù)大于減數(shù);ZF=1,則兩數(shù)相等。對(duì)于帶符號(hào)數(shù),SF⊕OF=1,則被減數(shù)小于減數(shù);SF⊕OF=0,則被減數(shù)

大于減數(shù)。

(6)中斷信號(hào)能否允許:用中斷允許標(biāo)志IF判斷,IF=1,則能允許可屏蔽中斷。

22.說(shuō)明8086系統(tǒng)中“最小模式”和“最大模式”兩種工作方式的主要區(qū)別。

最小模式(最小工作方式):?jiǎn)挝⑻幚砥飨到y(tǒng)(系統(tǒng)中只有一個(gè)8086微處理器),所有的總線控制信

號(hào),都是直接由8086CPU產(chǎn)生的,適用于規(guī)模較小的微機(jī)應(yīng)用系統(tǒng)。

當(dāng)把8086的33腳MN/MX接+5V時(shí),8086CPU就處于最小工作方式。

最大模式(最大工作方式):多微處理器系統(tǒng)(包含有兩個(gè)或多個(gè)微處理器,一個(gè)主處理器8086CPU,

其他的處理器稱為協(xié)處理器它們是協(xié)助主處理器工作的。),主要用在中等或大規(guī)模的8086系統(tǒng)中。

當(dāng)把8086的33腳MN/MX接地時(shí),8086CPU就處于最大模式。

第3章作業(yè)

1.分別說(shuō)明下列指令的源操作數(shù)和目的操作數(shù)各采用什么尋址方式。

源目的

(1)MOVAX,2048H立即尋址寄存器尋址

(2)MOVCL,0FFH立即尋址寄存器尋址

(3)MOVBX,[SI]寄存器間接尋址寄存器尋址

(4)MOV5[BX],BL寄存器尋址寄存器相對(duì)尋址

-可編輯修改-

______________________________________________________________________________________________________________

(5)MOV[BP+100H],AX寄存器尋址寄存器相對(duì)尋址

(6)MOV[BX+DI],‘$’立即尋址基址變址尋址

(7)MOVDX,ES:[BX+SI]基址變址尋址寄存器尋址

(8)MOVVAL[BP+DI],DX寄存器尋址相對(duì)基址加變址尋址

(9)INAL,05HI/O端口尋址(或直接尋址)寄存器尋址

(10)MOVDS,AX寄存器尋址寄存器尋址

2.已知:DS=1000H,BX=0200H,SI=02H,內(nèi)存10200H~10205H單元的內(nèi)容分別為10H,2AH,3CH,46H,59H,

6BH。下列每條指令執(zhí)行完后AX寄存器的內(nèi)容各是什么?

AX內(nèi)容

(1)MOVAX,0200H;(AX)=0200H

(2)MOVAX,[200H];(AX)=2A10H

(3)MOVAX,BX;(AX)=0200H

(4)MOVAX,3[BX];(AX)=5946H

(5)MOVAX,[BX+SI];(AX)=463CH

(6)MOVAX,2[BX+SI];(AX)=6B59H

6.指出下列指令中哪些是錯(cuò)誤的,錯(cuò)在什么地方

(1)MOVDL,AX錯(cuò)誤,源和目的操作數(shù)類型不匹配,DL是8位寄存器,AX是16位寄存

器。

(2)MOV8650H,AX錯(cuò)誤,立即數(shù)不能作為目的操作數(shù)。

(3)MOVDS,0200H錯(cuò)誤,不能用立即數(shù)直接給段寄存器賦值。

(4)MOV[BX],[1200H]錯(cuò)誤,不能在兩個(gè)存儲(chǔ)單元之間直接傳送數(shù)據(jù)

(5)MOVIP,0FFH錯(cuò)誤,IP不能作目的操作數(shù)或不能用立即數(shù)直接給IP寄存器賦值。

(6)MOV[BX+SI+3],IP錯(cuò)誤,IP不能作源操作數(shù)。

(7)MOVAX,[BX][BP]錯(cuò)誤,基址變址尋址方式必須是一個(gè)基址寄存器與一個(gè)變址寄存器,

不能兩個(gè)同時(shí)為基址寄存器(BX、BP均為基址寄存器)。

(8)MOVAL,ES:[BP]正確。

(9)MOVDL,[SI][DI]錯(cuò)誤,基址變址尋址方式必須是一個(gè)基址寄存器與一個(gè)變址寄存器,

不能兩個(gè)同時(shí)為變址寄存器(SI、DI均為變址寄存器)。

(10)MOVAX,OFFSET0A20H錯(cuò)誤,OFFSET后必須是存儲(chǔ)單元標(biāo)號(hào)地址,不能是立即數(shù)。

(11)MOVAL,OFFSETTABLE錯(cuò)誤,操作數(shù)類型不匹配,AL為8位,TABLE為16位。

(12)XCHGAL,50H錯(cuò)誤,交換指令XCHG的操作數(shù)不能是立即數(shù)。

(13)INBL,05H錯(cuò)誤,IN指令的目的操作數(shù)必須是累加器

(14)OUTAL,0FFEH錯(cuò)誤,OUT指令的源操作數(shù)必須是累加器,目的操作數(shù)為8位I/O端口

地址或用DX做橋梁的16位I/O端口地址。

10.已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每條指令執(zhí)行后的結(jié)果是什么?標(biāo)志位CF

等于什么?

(1)ANDAH,CL(AH)=04HCF=0

(2)ORBL,30H(BL)=36HCF=0

(3)NOTAX(AX)=0DAF7HCF不變(不影響CF)

(4)XORCX,0FFF0H(CX)=0FFF4HCF=0

(5)TESTDH,0FH(DH)=18HCF=0

(6)CMPCX,00H(CX)=0004HCF=0

(7)SHRDX,CL(DX)=0186HCF=0

(8)SARAL,1(AL)=04HCF=0

-可編輯修改-

______________________________________________________________________________________________________________

(9)SHLBH,CL(BH)=0F0HCF=0

(10)SALAX,1(AX)=4A10HCF=0

(11)RCLBX,1CF=1,(BX)=1E6DH,CF=0,(BX)=1E6CHCF=0

(12)RORDX,CL(DX)=4186HCF=0

11.假設(shè)數(shù)據(jù)定義如下:

DATASEGMENT

STRINGDB‘ThePersonalComputer&TV’

DATAENDS

試用字符串操作指令編程完成以下功能:

(1)把該字符串傳送到附加段中偏移地址為GET_CHAR開(kāi)始的內(nèi)存單元中。

解:程序段如下:

LEASI,STRING;置源串偏移地址

LEADI,GET_CHAR;置目的串偏移地址

MOVCX,26;置串長(zhǎng)度

CLD;方向標(biāo)志復(fù)位

REPMOVSB;字符串傳送

12.編程將AX寄存器中的內(nèi)容以相反的次序傳送到DX寄存器中,并要求AX中的內(nèi)容不被破壞,然后統(tǒng)

計(jì)DX寄存器中1的個(gè)數(shù)是多少。

解:將AX的內(nèi)容用ROR循環(huán)右移,16次之后AX的內(nèi)容不變(如果用算術(shù)/邏輯右移SHL/SAL,則AX的內(nèi)

容破壞,需要用堆棧PUSHUAX/POPAX保護(hù)),其最低位移入CF中,再使用RCL循環(huán)左移將CF中的值移入

DX中。并且,如果CF的值為1,則將BL加1。

MOVCX,16

XORBL,BL

LP1:RORAX,1

JNCLP2

INCBL

LP2:RCLDX,1

LOOPLP1

HLT

調(diào)試程序:

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

BUFDW12

BUF1DW100DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVAX,1234H

-可編輯修改-

______________________________________________________________________________________________________________

MOVCX,16

XORBL,BL

LP1:RORAX,1

JNCLP2

INCBL

LP2:RCLDX,1

LOOPLP1

HLT

CODEENDS

ENDSTART

15.某班有七個(gè)同學(xué)的英語(yǔ)成績(jī)低于80分,分?jǐn)?shù)存在ARRAY數(shù)組中,試編程完成以下工作:給每人加5

分,結(jié)果存到NEW數(shù)組中.

解:

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

ARRAYDB7DUP(?)

NEWDB7DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:MOVCX,7

MOVBX,0

LP1:MOVAL,ARRAY[BX]

ADDAL,05H

DAA

MOVNEW[BXI],AL

INCBX

LOOPLP1

HLT

CODEENDS

ENDSTART

調(diào)試程序:

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

ARRAYDB65H,76H,78H,54H,90H,85H,68H

NEWDB7DUP(?)

BUF1DW100DUP(?)

DATAENDS

CODESEGMENT

-可編輯修改-

______________________________________________________________________________________________________________

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVCX,7

MOVBX,0

LP1:MOVAL,ARRAY[BX]

ADDAL,05H

DAA

MOVNEW[BXI],AL

INCBX

LOOPLP1

HLT

CODEENDS

ENDSTART

某班有七個(gè)同學(xué)的英語(yǔ)成績(jī)低于80分,分?jǐn)?shù)存在ARRAY數(shù)組中,試編程完成以下工作:

(1)給每人加5分,結(jié)果存到NEW數(shù)組中

(2)把總分存到SUM單元中

(3)把平均分存到AVERAGE單元中

解:

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

ARRAYDB7DUP(?)

NEWDB7DUP(?)

SUMDW0

AVGDB0

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:MOVCX,7

MOVSI,0

MOVSUM,0

MOVAH,0

LP1:MOVAL,ARRAY[SI]

ADDAL,05H

DAA

MOVNEW[SI],AL

ADDAL,SUM

DAA

MOVSUM,AL

-可編輯修改-

______________________________________________________________________________________________________________

ADCAH,0

DAA

MOVSUM+1,AH

INCSI

LOOPLP1

MOVAX,SUM

MOVBL,07H

DIVBL

MOVAVG,AL

HLT

CODEENDS

ENDSTART

調(diào)試程序:

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

ARRAYDB65H,76H,78H,54H,90H,85H,68H

NEWDB7DUP(?)

SUMDB00H,00H

AVGDB0

BUF1DW100DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVCX,7

MOVSI,0

MOVSUM,0

MOVAH,0

LP1:MOVAL,ARRAY[SI]

ADDAL,05H

DAA

MOVNEW[SI],AL

ADDAL,SUM

DAA

MOVSUM,AL

ADCAH,0

MOVSUM+1,AH

INCSI

LOOPLP1

MOVAL,SUM

-可編輯修改-

______________________________________________________________________________________________________________

MOVAH,SUM+1

MOVBL,07H

DIVBL

MOVAVG,AL

HLT

CODEENDS

ENDSTART

13.設(shè)CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,

(20302H)=00FFH,TABLE=0500H,PROG_N標(biāo)號(hào)的地址為1200:0278H,PROG_F標(biāo)號(hào)的地址為3400:0ABCH。

說(shuō)明下列每條指令執(zhí)行完后,程序分別轉(zhuǎn)移到何處執(zhí)行?

JMP指令

(1)JMPPROG_N

段內(nèi)直接近轉(zhuǎn)移,目的地址為1200H:0278H(或12278H)

(2)JMPBX

段內(nèi)寄存器間接轉(zhuǎn)移,目的地址為1200H:0300H(或12300H)

(3)JMP[BX]

物理地址=DS×10H+BX=2000H×10H+0300H=20300H

(20300H)=4800H→IP

段內(nèi)存儲(chǔ)器間接轉(zhuǎn)移,目的地址為1200H:4800H(或16800H)

(4)JMPFARPROG_F

段間直接轉(zhuǎn)移,目的地址為3400H:0ABCH(或34ABCH)

(5)JMPDWORDPTR[BX]

物理地址=DS×10H+BX=2000H×10H+0300H=20300H

(20300H)=4800H→IP,(20302H)=00FFH→CS

段間存儲(chǔ)器間接轉(zhuǎn)移,目的地址為00FFH:4800H(或057F0H)

JMP改為CALL后,目的地址與JMP相同。

(1)CALLPROG_N

段內(nèi)直接調(diào)用,3字節(jié)指令,目的地址為1200H:0278H(或12278H),0103H入棧,SP=03FEH

(2)CALLBX

段內(nèi)寄存器間接調(diào)用,2字節(jié)指令,目的地址為1200H:0300H(或12300H),0102H入棧,SP=03FEH

(3)CALL[BX]

段內(nèi)存儲(chǔ)器間接調(diào)用,2字節(jié)指令,目的地址為1200H:4800H(或16800H),0102H入棧,SP=03FEH

(4)CALLFARPROG_F

段間直接調(diào)用,5字節(jié)指令,目的地址為3400H:0ABCH(或34ABCH),1200H和0105H分別入棧,SP=03FCH

(5)CALLDWORDPTR[BX]

段間間接調(diào)用,2字節(jié)指令,目的地址為00FFH:4800H(或057F0H),1200H和0102H分別入棧,SP=03FCH

部分調(diào)試程序:

STACKSEGMENTSTACK

DB100DUP(?)

-可編輯修改-

______________________________________________________________________________________________________________

STACKENDS

DATASEGMENT

BUFDW12

BUF1DW100DUP(?)

ORG300H

DB00H,48H,0FFH,00H

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVBX,0300H

CALLPROG_N

CALLBX

CALL[BX]

ORG0278

PROG_N:RET

ORG0300H

RET

ORG4800H

RET

HLT

CODEENDS

ENDSTART

14.如在下列程序段的括號(hào)中分別填入以下指令:

(1)LOOPNEXT

(2)LOOPENEXT

(3)LOOPNENEXT

試說(shuō)明在這三種情況下,程序段執(zhí)行完后,AX,BX,CX,DX寄存器的內(nèi)容分別是什么

START:MOVAX,01H

MOVBX,02H

MOVDX,03H

MOVCX,04H

NEXT:INCAX

ADDBX,AX~

SHRDX,1

()

解:

LOOP過(guò)程:AXBXCXDX

初始值01H02H04H03H

循環(huán)1次02H04H03H01H

循環(huán)2次03H07H02H00H

-可編輯修改-

______________________________________________________________________________________________________________

循環(huán)3次04H0BH01H00H

循環(huán)4次05H10H00H00H

結(jié)果:

AXBXCXDX

(1)05H10H00H00H

(2)02H04H03H01H

執(zhí)行一次,ZF=0,退出循環(huán)。

(3)03H07H02H00H

執(zhí)行兩次,ZF=1,退出循環(huán)。

20.設(shè)8086CPU的時(shí)鐘頻率為5MHz,請(qǐng)編寫(xiě)延時(shí)5ms的子程序。

解:微機(jī)的主頻率為5MHz

則:時(shí)鐘周期=主頻率的倒數(shù)=1/(5×10-6)=0.2μs

延時(shí)5ms需要的時(shí)鐘周期數(shù)=5ms/0.2μs=25000

延時(shí)子程序如下:

DELAY5:MOVCX,N4

DLY1:NOP3×N

LOOPDLY117×(N-1)+5

RET16

應(yīng)該有25000=4+3×N+17×(N-1)+5+16,才能實(shí)現(xiàn)要求的延時(shí)。則:

N=1250=04E2H

延時(shí)子程為:

DELAY5:MOVCX,04E2H

DLY1:NOP

LOOPDLY1

RET

第4章作業(yè)

P153

5.閱讀下列程序,說(shuō)明每條指令執(zhí)行后的結(jié)果是什么?

X1DB65H,78H

X2DW06FFH,5200H

X3DD?

GO:MOVAL,TYPEX1

MOVBL,TYPEX2

MOVCL,TYPEX3

MOVAH,TYPEGO

MOVBH,SIZEX2

MOVCH,LENGTHX3

解:

(1)前三條語(yǔ)句的功能是設(shè)置數(shù)據(jù)于數(shù)據(jù)段中,從數(shù)據(jù)段偏移地址0000H開(kāi)始存放。

變量偏移地址數(shù)據(jù)

X10000H65H

-可編輯修改-

______________________________________________________________________________________________________________

0001H78H

X20002HFFH

0003H06H

0004H78H

0005H00H

X30006H隨機(jī)數(shù)

0007H隨機(jī)數(shù)

0008H隨機(jī)數(shù)

0009H隨機(jī)數(shù)

程序匯編后結(jié)果如下:

六條程序執(zhí)行結(jié)果如下:

(AL)=01H;設(shè)置變量類型屬性,字節(jié)數(shù)

(BL)=02H;設(shè)置變量類型屬性,字節(jié)數(shù)

(CL)=04H;設(shè)置變量類型屬性,字節(jié)數(shù)

(AH)=0FFH;設(shè)置GO顯示類型,近標(biāo)號(hào),為-1,補(bǔ)碼表示

(BH)=02H;設(shè)置數(shù)據(jù)類型,無(wú)DUP時(shí),返回?cái)?shù)據(jù)類型的字節(jié)數(shù)

(CH)=01H;無(wú)DUP時(shí),返回1。

程序執(zhí)行后結(jié)果如下:

調(diào)試程序如下:

STACKSEGMENTSTACK

DB100DUP(?)

-可編輯修改-

______________________________________________________________________________________________________________

STACKENDS

DATASEGMENT

X1DB65H,78H

X2DW06FFH,5200H

X3DD?

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

GO:MOVAL,TYPEX1

MOVBL,TYPEX2

MOVCL,TYPEX3

MOVAH,TYPEGO

MOVBH,SIZEX2

MOVCH,LENGTHX3

POPDS

HLT

CODEENDS

ENDSTART

6.畫(huà)出示意圖,說(shuō)明下列變量在內(nèi)存中如何讓存放?

A1DB12H,34H

A2DB‘Right.’

A3DW5678H

A4DB3DUP(?)

(1)設(shè)置數(shù)據(jù)于數(shù)據(jù)段中,從數(shù)據(jù)段偏移地址0000H開(kāi)始存放。

變量偏移地址數(shù)據(jù)

A10000H12H

0001H34H

A20002H52H

0003H69H

0004H67H

0005H68H

0006H74H

0007H2EH

A30008H78H

0009H56H

A4000AH隨機(jī)數(shù)

000BH隨機(jī)數(shù)

000CH隨機(jī)數(shù)

調(diào)試程序如下:

-可編輯修改-

______________________________________________________________________________________________________________

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

A1DB12H,34H

A2DB'Right.'

A3DW5678H

A4DB3DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

POPDS

HLT

CODEENDS

ENDSTART

程序匯編后結(jié)果如下:

12.編程實(shí)現(xiàn),從鍵盤(pán)輸入一個(gè)十進(jìn)制數(shù)0~9,查表求鍵入數(shù)字的七段代碼(共陽(yáng)極LED顯示器的段碼),

存入DL中,并在鍵入數(shù)字之前,顯示提示信息“Pleaseinputanumber(0~9):”。

解:

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

TABLEDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

BUFDB'Pleaseinputonenumber(0~9):',0DH,0AH,'$'

DATAENDS

CODESEGMENT

-可編輯修改-

______________________________________________________________________________________________________________

ASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATA

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETBUF

MOVAH,09H

INT21H

MOVAH,1

INT21H

ANDAL,0FH

MOVBX,OFFSETTABLE

XLAT

MOVDL,AL

POPDS

HLT

CODEENDS

ENDSTART

調(diào)試結(jié)果:

數(shù)字5的共陽(yáng)極LED七段碼為92H。

15.已知:在內(nèi)存BUF開(kāi)始的單元中,存在一串?dāng)?shù)據(jù):58,75,36,42,89。編程找出其中的最小值存入

MIN單元中,并將這個(gè)數(shù)顯示在屏幕上。

解:

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

BUFDB58H,75H,36H,42H,89H

MINDB0

-可編輯修改-

______________________________________________________________________________________________________________

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVCX,4

MOVBX,OFFSETBUF

MOVAL,[BX]

ST1:INCBX

CMPAL,[BX]

JBENEXT

MOVAL,[BX]

NEXT:LOOPST1

MOVMIN,AL

ANDAL,0F0H

MOVCL,4

RORAL,CL

ADDAL,30H

MOVDL,AL

MOVAH,02H

INT21H

MOVAL,MIN

ANDAL,0FH

ADDAL,30H

MOVDL,AL

MOVAH,02H

INT21H

POPDS

MOVAH,4CH

INT21H

HLT

CODEENDS

ENDSTART

18.某班有20個(gè)同學(xué)的微機(jī)原理成績(jī)存放在LIST開(kāi)始的單元中,要求編程先從高到低的次序排列好,

再求出總分和平均值,分別存放在SUM和AVER開(kāi)始的單元中。

解:

STACKENDS

DATASEGMENT

LISTDB65H,76H,78H,54H,90H,85H,68H,66H,77H,88H

DB99H,89H,79H,69H,75H,85H,63H,73H,83H,93H

SUMDW0

-可編輯修改-

______________________________________________________________________________________________________________

AVERDB0

BUFDB100DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVDI,OFFSETLIST

MOVBX,19

LP0:MOVSI,DI

MOVCX,BX

LP1:MOVAL,[SI]

INCSI

CMPAL,[SI]

JNCLP2

MOVDL,[SI]

MOV[SI-1],DL

MOV[SI],AL

LP2:LOOPLP1

DECBX

JNZLP0

LP3:MOVCX,20

MOVBX,OFFSETLIST

MOVSUM,0

XORAX,AX

LP4:ADDAL,[BX]

DAA

ADCAH,0

INCBX

LOOPLP4

MOVSUM,AX

MOVBL,20H

DIVBL

ADDAL,0

DAA

MOVAVERAL

POPDS

HLT

CODEENDS

ENDSTART

20.編程將存放在AL中的無(wú)符號(hào)二進(jìn)制數(shù),轉(zhuǎn)化成十六進(jìn)制數(shù),再轉(zhuǎn)換成ASII碼并顯示在屏幕上。

-可編輯修改-

______________________________________________________________________________________________________________

解:

程序如下:

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

DB100DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVDH,AL

MOVCH,02H

ST1:MOVCL,4

RORDH,CL

MOVAL,DH

ANDAL,0FH

ADDAL,30H

CMPAL,39H

JBEDISP

ADDAL,07H

DISP:MOVDL,AL

MOVAH,02H

INT21H

DECCH

JNZST1

POPDS

MOVAH,4CH

INT21H

HLT

CODEENDS

ENDSTART

調(diào)試程序如下:

STACKSEGMENTSTACK

BUFDB01111000B

DB100DUP(?)

STACKENDS

DATASEGMENT

DB100DUP(?)

DATAENDS

CODESEGMENT

-可編輯修改-

______________________________________________________________________________________________________________

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVAL,BUF

MOVDH,AL

MOVCH,02H

ST1:MOVCL,4

RORDH,CL

MOVAL,DH

ANDAL,0FH

ADDAL,30H

CMPAL,39H

JBEDISP

ADDAL,07H

DISP:MOVDL,AL

MOVAH,02H

INT21H

DECCH

JNZST1

POPDS

MOVAH,4CH

INT21H

HLT

CODEENDS

ENDSTART

21.編寫(xiě)程序,使用三種以上的方法,將存儲(chǔ)器中2000H開(kāi)始的地址單元中的100字節(jié)數(shù)據(jù)復(fù)制到

3000H開(kāi)始的存儲(chǔ)器地址單元中。

解:

(1)利用通用傳送指令MOV

MOVSI,2000H注意這里如果是標(biāo)號(hào)地址,則必須用OFFSET

MOVDI,3000H

MOVCX,100

LP1:MOVAL,[SI]

MOV[DI],AL

INCSI

INCDI

LOOPLP1

HLT

MOVCX,100

MOVBX,0

LP0:MOVAL,2000[BX]

MOV3000[BX],AL

INCBX

LOOPLP0

HLT

-可編輯修改-

______________________________________________________________________________________________________________

(2)利用交換指令XCHG

MOVSI,2000H

MOVDI,3000H

MOVCX,100

LP2:MOVAL,[SI]

XCHG[DI],AL

INCSI

INCDI

LOOPLP2

HLT

(3)利用換碼指令XLAT

MOVBX,2000H

MOVDI,3000H

MOVCX,100

LP3:XORAL,AL

XLAT

MOV[DI],AL

INCBX

INCDI

LOOPLP3

HLT

(4)利用堆棧實(shí)現(xiàn)數(shù)據(jù)傳送

MOVSI,2000H

MOVDI,3000H

MOVCX,50

LP4:PUSH[SI]

POP[DI]

INCSI

INCSI

INCDI

INCDI

LOOPLP4

HLT

(5)利用串操作指令REPMOVSB

MOVSI,2000H

MOVDI,3000H

MOVCX,100

CLD;DF=0,SI、DI自動(dòng)+1

REPMOVSB

HLT

調(diào)試程序:

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

DATASEGMENT

ORG2000H

DB11H,22H,33H,44H,55H.66H,77H,88H,99H

DB100DUP(?)

ORG3000H

DB100DUP(?)

DATAENDS

-可編輯修改-

______________________________________________________________________________________________________________

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:PUSHDS

MOVAX,DATA

MOVDS,AX

MOVSI,2000H

MOVDI,3000H

MOVCX,100

LP1:MOVAL,[SI]

MOV[DI],AL

INCSI

INCDI

LOOPLP1

POPDS

HLT

CODEENDS

ENDSTART

22.在DATA開(kāi)始的4個(gè)單元中存

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論