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

下載本文檔

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

文檔簡介

______________________________________________________________________________________________________________

第1章緒論作業(yè)

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

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

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

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

(2)76=1001100B=4CH

(4)134=10000110B=86H

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

(1)327=1100100111(BCD碼)

(2)1256=1001001010110(BCD碼)

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

(2)+85(4)-85

解:85=01010101B

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

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

補碼:+85=01010101B-85=10101011B

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

解:

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

微處理器地址總線

存儲器I/O接口I/O設備

CPUI/O總線

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

控制總線

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

制程序流向。

微處理器主要完成:

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

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

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

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

存儲器:用來存放數(shù)據(jù)和指令。

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

-可編輯修改-

______________________________________________________________________________________________________________

各種功能。

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

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

第2章8086CPU作業(yè)

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

答:

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

(2)

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

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

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

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

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

空閑狀態(tài)。

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

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

意義的?如果把這兩個數(shù)當成無符號數(shù),相加后哪些標志位是有意義的?

解:

(1)兩個帶符號數(shù):不考慮CF標志

10110100

+11000111

101111011

運算后各標志位狀態(tài)如下:

CF=1,有進位,對于帶符號數(shù),無意義。

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

AF=0,無半進位,非BCD碼運算,無意義。

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

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

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

(2)兩個無符號數(shù):不考慮SF和OF標志

10110100

+11000111

101111011

運算后各標志位狀態(tài)如下:

CF=1,有進位

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

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

AF、SF、OF無意義。

20.簡要解釋下列名詞的意義。

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

運算器ALU、控制器、寄存器組以及總線接口等部件組成。主要完成各種運算,負責對整機的控制。

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

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

程序調(diào)用時斷點和現(xiàn)場的保護與恢復。

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

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

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

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

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

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

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

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

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

元相對于相應段起始地址的16位偏移量。

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

-可編輯修改-

______________________________________________________________________________________________________________

標志進行判斷,實現(xiàn)轉(zhuǎn)移。

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

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

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

地址與偏移地址共同決定的,計算物理地址的表達式為:

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

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

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

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

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

匯編語言:便于記憶和使用,通常使用匯編語言(符號指令或指令助記符)來描述計算機的指令系統(tǒng)。

指令:讓計算機完成某種操作的命令稱為指令。

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

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

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

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

系統(tǒng)總線:微處理機機箱內(nèi)的底板總線??煞譃椋篒SA、EISA、VESA局部總線、PCI局部總線等。

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

總線周期:BIU完成一次訪問存儲器或I/O端口操作所需要的時間稱為總線周期。一個基本的總線周

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

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

令周期是由幾個總線周期組成的。

21.要完成下列運算和控制,用什么標志判別?其值是什么?

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

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

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

(4)奇偶校驗判斷。

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

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

答:

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

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

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

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

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

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

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

大于減數(shù)。

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

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

最小模式(最小工作方式):單微處理器系統(tǒng)(系統(tǒng)中只有一個8086微處理器),所有的總線控制信

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

當把8086的33腳MN/MX接+5V時,8086CPU就處于最小工作方式。

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

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

當把8086的33腳MN/MX接地時,8086CPU就處于最大模式。

第3章作業(yè)

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

源目的

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

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

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

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

-可編輯修改-

______________________________________________________________________________________________________________

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

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

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

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

(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.指出下列指令中哪些是錯誤的,錯在什么地方

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

器。

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

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

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

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

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

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

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

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

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

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

(10)MOVAX,OFFSET0A20H錯誤,OFFSET后必須是存儲單元標號地址,不能是立即數(shù)。

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

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

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

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

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

10.已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每條指令執(zhí)行后的結(jié)果是什么?標志位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ù)據(jù)定義如下:

DATASEGMENT

STRINGDB‘ThePersonalComputer&TV’

DATAENDS

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

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

解:程序段如下:

LEASI,STRING;置源串偏移地址

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

MOVCX,26;置串長度

CLD;方向標志復位

REPMOVSB;字符串傳送

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

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

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

容破壞,需要用堆棧PUSHUAX/POPAX保護),其最低位移入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.某班有七個同學的英語成績低于80分,分數(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

某班有七個同學的英語成績低于80分,分數(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.設CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,

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

說明下列每條指令執(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)存儲器間接轉(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

段間存儲器間接轉(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)存儲器間接調(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.如在下列程序段的括號中分別填入以下指令:

(1)LOOPNEXT

(2)LOOPENEXT

(3)LOOPNENEXT

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

START:MOVAX,01H

MOVBX,02H

MOVDX,03H

MOVCX,04H

NEXT:INCAX

ADDBX,AX~

SHRDX,1

()

解:

LOOP過程: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.設8086CPU的時鐘頻率為5MHz,請編寫延時5ms的子程序。

解:微機的主頻率為5MHz

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

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

延時子程序如下:

DELAY5:MOVCX,N4

DLY1:NOP3×N

LOOPDLY117×(N-1)+5

RET16

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

N=1250=04E2H

延時子程為:

DELAY5:MOVCX,04E2H

DLY1:NOP

LOOPDLY1

RET

第4章作業(yè)

P153

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

X1DB65H,78H

X2DW06FFH,5200H

X3DD?

GO:MOVAL,TYPEX1

MOVBL,TYPEX2

MOVCL,TYPEX3

MOVAH,TYPEGO

MOVBH,SIZEX2

MOVCH,LENGTHX3

解:

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

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

X10000H65H

-可編輯修改-

______________________________________________________________________________________________________________

0001H78H

X20002HFFH

0003H06H

0004H78H

0005H00H

X30006H隨機數(shù)

0007H隨機數(shù)

0008H隨機數(shù)

0009H隨機數(shù)

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

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

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

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

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

(AH)=0FFH;設置GO顯示類型,近標號,為-1,補碼表示

(BH)=02H;設置數(shù)據(jù)類型,無DUP時,返回數(shù)據(jù)類型的字節(jié)數(shù)

(CH)=01H;無DUP時,返回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.畫出示意圖,說明下列變量在內(nèi)存中如何讓存放?

A1DB12H,34H

A2DB‘Right.’

A3DW5678H

A4DB3DUP(?)

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

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

A10000H12H

0001H34H

A20002H52H

0003H69H

0004H67H

0005H68H

0006H74H

0007H2EH

A30008H78H

0009H56H

A4000AH隨機數(shù)

000BH隨機數(shù)

000CH隨機數(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.編程實現(xiàn),從鍵盤輸入一個十進制數(shù)0~9,查表求鍵入數(shù)字的七段代碼(共陽極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的共陽極LED七段碼為92H。

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

MIN單元中,并將這個數(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個同學的微機原理成績存放在LIST開始的單元中,要求編程先從高到低的次序排列好,

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

解:

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中的無符號二進制數(shù),轉(zhuǎ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.編寫程序,使用三種以上的方法,將存儲器中2000H開始的地址單元中的100字節(jié)數(shù)據(jù)復制到

3000H開始的存儲器地址單元中。

解:

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

MOVSI,2000H注意這里如果是標號地址,則必須用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)利用堆棧實現(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自動+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開始的4個單元中存

溫馨提示

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

最新文檔

評論

0/150

提交評論