微機原理與接口技術(蘇大版)課后答案_第1頁
微機原理與接口技術(蘇大版)課后答案_第2頁
微機原理與接口技術(蘇大版)課后答案_第3頁
微機原理與接口技術(蘇大版)課后答案_第4頁
微機原理與接口技術(蘇大版)課后答案_第5頁
已閱讀5頁,還剩47頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

習題三

3.18086CPU有多少根數據線和地址線?它能尋址多少內存單元和I/O端口?

8088CPU又有多少根數據線和地址線?為什么要設計8088CPL?

解:16,20,1M

8,20,為了方便與8位外部接口或設備相連。

3.28086CPU按功能可以分為哪兩大部分?它們各自的主要功能是什么?

解:8086微處理器從功能結構上可以劃分為執行部件EU(ExecutionUnit)和總線接口部件BIU(Bus

InterfaceUnit)兩大部分.

總線接口部件具有下列功能:物理地址的形成、預取指令、指令隊列排隊、讀/寫操作數和總線控制。

指令執行部件的功能是進行指令譯碼并執行指令。

3.3什么是微處理器的并行操作功能?8086CPU是否具有并行操作功能?

在什么情況下8086的執行單元EU才需要等待總線接口單元BIU提取指令?

解:并行操作是同時完成取指/操作數和執行指令操作,有。

在遇到系統復位或執行轉移指令等特殊情況,指令隊列被刷新時,EU才需要等待BIU進行取指操

作?;蛘咴贓U需要操作數而BIU正忙時,EU需要等待BIU執行完當前的操作,再去取操作數,等到

EU得到操作數以后,才能進行這條指令的執行操作。

3.4邏輯地址和物理地址有何區別?段加偏移的基本含義是什么?

解:邏輯地址也稱相對地址或虛擬地址,它是目標程序中的地址。物理地址也稱絕對地址或實地址,

它是物理存貯器的單元地址。物理地址=段基地址X16+偏移地址。

3.5基址指針BP和堆棧指針SP在使用中有何區別?

解:BP則是用來存放位于堆棧段中的一個數據區基址的偏移地址的,稱作基址指針寄存器。SP給出棧

頂的偏移地址,稱為堆棧指針寄存器。

3.G段地址和段起始地址是否相同?兩者是什么關系?

解:段地址為段的起始單元的物理地址(低4位一般為0)除以16的結果。

段起始地址為段的起始單元的物理地址,它必須能被16整除。

段地址=段起始地址/16

3.78086CPU一般使用哪個寄存器來保存計數值?

解:CX

3.8寄存器IP的用途是什么?它提供的是什么信息?

解:用于微處理器在程序中順序尋址代碼段中的下一條指令。

給出接著要執行的指令在代碼段中的偏移。

3.9寄存器FLAGES的用途是什么?它提供的是什么信息?

解:反映處理器的狀態和運算結果的某些特征。

進位標志,零標志,符號標志,溢出標志,奇偶標志,輔助進位標志,方向標志,中斷允許標志,

追蹤標志

3.10對于數字0,對應的零標志是否為1?

解:不是,零標志是用于反映運算結果的。

3.11在實模式下,對于如下段寄存器內容,寫出相應的段起始地址和結束地址:

(1)1000H(2)1234H

錯誤!未指定書簽。與接口技術

(3)E0001I(4)ABOOH

解:(1)lOOOOH^lFFFFH(2)12340H~2233FH

(3)EOOOOH~EFFFFH(4)ABOOOH^BAFFFH

3.12在實模式下,對于如下的CS:IP組合,寫出相應的存儲器地址:

(1)100011:200011(2)2400H:1A0011

(3)1A00H:EOOOH(4)3456H:AB001I

解:(D12000H(2)25A00H(3)28000H(4)3E060H

3.13什么是總線周期?微處理器在什么情況下才執行總線周期?

解:把執行外部總線對存儲器或I/。端口進行一次信息的輸入或輸出所需要的時間

稱為總線周期。

①在指令的執行過程中,根據指令的需要,由執行單元EU,請求BIU執行一個總線周期。

②當指令隊列寄存器已經空出兩個字節,BIU必須填寫指令隊列的時候。

3.14一個基本的總線周期由幾個狀態組成?在什么情況下需要插入等待狀態?

解:至少由4個狀態組成,分別成為T1,T2,T3,T4.

在總線周期的T3和T4之間插入一些必要的等待狀態

3.15什么叫做非規則字?微處理器對非規則字的存取是如何訓行的?

解:其低位字節可從奇數地址開始,這種方式為非規則存放,這種存放的宇為非規則字

若存放的數據為8位,則將它們按順序進行存放;若存入的數據為一個16位的字,則將字的最高

字節存于高地址單元,低位字節存于低地址單元;若存放的數據為32位的雙字(這通常是指地址指針

數據),則將地址指針的偏移量(字)存于低地址的字單元中,將地址指針的段基址(字)存于高地址

的字單元中。對非規則字的存取需要兩個總線周期。

3.16什么是存儲器的分體結構?用什么信號來實現對兩個存儲體的選擇?

解:1M字節的存儲空間分成兩個512K字節的存儲體,一個是偶數地址存儲體,其數據線與系統總線高

8位相連,用BHE=O作為選通信號;?個是奇數地址存儲體。其數據總線與系統總線低8位相連,用Ao=O

作為選通信號

兩個存儲體采用字節交叉編址方式

3.17為什么8086微處理器要采用分體結構?而8088微處理器不采用分體結構?

解:8086是16位數據總線,故在組織1MB的存儲器時,被分成兩個512KB的存儲體,分別叫做高位庫

和低位庫。高位庫與8086數據總線中的D15?D8相連,庫中每個單元的地址均為奇數;低位庫與數據總線

中的D7?D0相連,庫中每個單元的地址均為偶數。

8088因為外中數據總線為8位,因此,它所對應的1MB的存儲空間是一個不分高位庫和低位庫的單一

存儲體。

3.18堆棧的深度由哪個寄存器確定?為什么一個堆棧的深度最大為64KB?

解:堆棧的深度由SP值決定,由于16位的SP=FFFFH可最大尋址64KB,故深度最大為64KB。

3.19在實模式下,若SS=1000H,SP=2000H,AX=3000H,寫出執行PUSHAX指令后SS、

SP和相應的堆棧中的內容。

解:SS=1000HSP=1FFEH

(2000H)=30H(1FFFH)=OOH

3.20在實模式下,若SS=2200H,SP=1100H,寫出執行POPAX指令后SS、SP的內容。

解:SS=2200HSP=1102H

第2頁共53頁

3.21微處理器的WR和RD引腳信號各表示什么操作?

解:力■寫控制,有效時,表示CPU正在寫出數據給存儲器或I/O端口

方讀控制,有效時,表示CPU正在從存儲器或I/O端口讀入數據

3.22微處理器的ALE信號有什么作用?

解:地址鎖存允許有效時,表示復用引腳:AD7?ADO和A19/S6?A16/S3正在傳送地址信息

3.23微處理器的DT/R信號有什么作用?它在什么情況下被浮置為商阻狀態?

解:數據發送/接收,表明當前總線上數據的流向.

在DMA方式下,DT/R被浮置為高阻狀態

3.248086系統的最小模式和最大模式的區別是什么?是由什么引腳的信號決定的?

解:工作在最小模式時,是一個單處理器系統,所有總線控制信號有CUP直接產生。

工作在最大模式時,系統中除了主CPU夕卜,還有其他協處理器,是一個多處理器系統,這時CPU僅向

總線控制器8288提供狀態信號S2SIS0,,而由8288產生所有總線控制信號,以支持構成多處理器系統。

MN/MX

3.25微處理器中為什么要使用堆棧這樣的數據結構?

解:因為硬件和軟件堆棧已經用于支持4個主要的計算領域:表達式計算,子程序返回地址存儲,動

態分配局部變量存儲器和子程序參數傳遞。

習題四

4.1簡述存儲介質和半導體存儲器的基本分類情況。

解:存儲器按存儲介質分,有半導體存儲器、磁存儲器和光存儲器。

半導體存儲器按工作方式分,有隨機存取存儲器(RAM)和只讀存儲器(ROM);RAM又可分為雙極型半

導體和單極MOS型;MOS型RAM還可以分為靜態和動態的。ROM可分為掩膜ROM和可編程ROM,可編程ROM

又分為可編程PROM,可擦除可編程EPROM和電可擦除可編程EEPROMo

4.2簡述靜態RAM與動態RAM的區別與各自的優缺點。

解:靜態RAM是靠雙穩態觸發器來記憶信息的;動態RAM是靠MOS電路中的柵極電容來記憶信息的。動態

RAM需要設置刷新電路。但動態RAM比靜態RAM集成度高、功耗低,從而成本也低,適于作大容量存儲器。

所以主內存通常采用動態RAM,而高速緩沖存儲器(Cache)則使用靜態RAM。

4.3簡述掩模ROM、PROMsEPROM和EEPROM的主要特點和應用場合。

解:MASKROM價格便宜,但程序在出廠時已經固化,適合程序固定不變的應用場合。

OTPROM的價格適中,同時又擁有--次性可編程能力,適合既要求一定靈活性,又要求低成本的應用

場合,尤其是功能不斷翻新、需要迅速量產的電子產品。

EPROM的寫入要用專用的編程器,并且往芯片中寫內容時必須要加一定的編程電壓。特點是具有可擦

除功能,擦除后即可進行再編程,但是缺點是擦除需要使用紫外線照射一定的時間。

EEPROM的擦除不需要借助于其它設備,它是以電信號來修改其內容的,而且是以Byte為最小修改單

位,不必將資料全部洗掉才能寫入,徹底擺脫了EPROMEraser和編程器的束縛。它的最大優點是可直接用

電信號擦除,也可用電信號寫入。

4.4當前新型存儲器都有哪些?今后的發展趨勢如何?

4.10某RAM芯片的引腳中有12根地址線,8根數據I/O線,該存儲器芯片的容量為多大?若該芯片在系

統中的起始地址為1000H,其結束地址是多少?

解:4K*8,5095H

4.11某CPU有16根地址線(A0?A15),試分析下圖中片選信號百T、言■所指定的存儲器地址范圍。

解:CST:0000H-6FFFH,或者1000H-7FFFH,或者8000H-EFFFH

CS2-:0000H-6FFFH

4.12試為8088CPU設廿192KX8位存儲器系統v共中程序區為64Kx8位,置于CPU尋址空間最高端,采

用27256(32KX8位);數據區為128K義8位,采用62256(32KX8位),置于尋址空間最低端。寫出地址分

配關系,畫出所設計的電路圖。

解:

宙H

tt?

n

r

T.

Y7

RAM:00000-07FFFHROM:20000-27FFFH

08000-0FFFFH28000-2FFFFH

10000-17FFFH

18000-1FFFFH

習題五

5.1分別指出下列指令中源操作數和H的操作數的尋址方式。

(1)MOVBX,1000H(2)MOVBL,[BX]

(3)MOVBUF[BX],AX<4)MOVBX,[BP][SI]

錯誤!未指定書簽。與接口技術

(5)MOV[DI],DL(6)MOVAX,RESULT

解:(1)源:立即數尋址;目的:寄存器尋址

(2)源:寄存器間接尋址;目的:寄存器尋址

(3)源:寄存器尋址;目的:寄存器相對尋址

(4)源:基址變址尋址;目的:寄存器尋址

(5)源:寄存器尋址;目的:寄存器間接尋址

(6)源:直接尋址;目的:寄存器尋址

(7)源:寄存器尋址:目的:直接尋址;

(8)源:相對基址變址尋址;目的:寄存器尋址

5.2設已知:(BX)=200011,(SI)=120H,(DS)=1200H,(SS)=20011,(BP)=300011,符號地址VAREG000H。

試問答在以下各種尋址方式下操作數存放于何處,如果是在存儲單元中,則計算單元的物理地址是什么?

(1)使用BX的寄存器尋址(例如:MOVAX,BX)

(2)立即數尋址(例如:MOVAX,1234)

(3)使用BX的寄存器相對尋址(例如:MOVAX,[BX])

(4)直接尋址(例如:MOVAX,[1234])

(5)使用SI的寄存器間接尋址(例如:MOVAX,[SI])

(6)使用BP和SI的基址變址尋址(例如:MOVAX,[BP][SI])

(7)使用BX和SI的相對基址變址尋址(例如:MOVAX,[BX][S1])

解:(1)操作數在BX寄存器中;

(2)操作數在指令中;

(3)操作數在存儲單元中,物理地址=15000出

(4)操作數在存儲單元中,物理地址:13000H;

(5)操作數在存儲單元中,物理地址=12120H;

(6)操作數在存儲單元中,物理地址=05120H;

(7)操作數在存儲單元中,物理地址=15120H。

5.33aW(DS)=2OOOH,(BX)=100H,(SI)=2H,(20100H)=12Hf(20101H)=34H,(20102H)=56H,(20103H)

=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H),(21203H)=65Ho試指出下列各條指令單獨執行

后累加器中的內容是什么?

(1)MOVAX,1200H(2)MOVAX,BX

(3)MOVAX,[1200H](4)MOVAX,[BX]

(5)MOVAX,1100U[BX](6)MOVAX,[BX[SI]

(7)MOVAX,1100H[BX][SI](8)MOVAL,[BX]

解:(1)(AX)=1200H;(2)(AX)=100H;(3)(AX)=4C2AH;(4)(AX)=3412H

(5)(AX)=4C2AH;(6)(AX)=7856H;(7)(AX)=65B7H;(8)(AX)=XX12H

5.4指出下列指令的錯誤是什么?

(1)MOVBL,AX(2)MOV[BX],[BP+SI]

(3)MOVCS,AX(4)MOVDS,1000H

(5)MOVBX,[SI][DI](6)MOV[2000H],10

解:(1)類型屬性不匹配;(2)兩操作數都是存儲單元;(3)把CS用作目的操作數

(4)立即數送段寄存器;(5)源操作數中兩個均為變址寄存器;(6)類型屬性不明確

5.5設當前數據段寄存器的內容為1B00H,在數據段偏移地址為2000H開始的單元內,含有一個內容為

0FF10H和8000H的指針,它們是一個16位變量的偏移地址和段池址,試寫出把該變量裝入AX的指令序歹U,

并畫出內存圖。

解:LDSBX,[2000H]

MOVAX,[BX]

第6頁共53頁

5.6設當前(SP)=010011,(AX)=200011,(BX)=0B10011,試回答:

執行指令PUSHAX后,(SP)為多少?畫出堆棧示意圖。

再執行指令PUSHBX和POPAX后,(SP)為多少?畫出堆棧示意圖。

解:(1)執行PUSHAX后:(SP)=OOFEH

(2)執行PUSHBX和POPAX后:(SP)=OOFEH

5.7要求從85號端口讀入一個字節數據,然后到數據段首地址為1000H的表格中換取相應的數據碼,再

將該數據輸出至3000號端口,試編寫指令序列。

解:INAL,85

MOVBX,1000H

XLAT

MOVDX,3000

OUTDX,AL

5.8試編寫將某十進制數字轉換成七段代碼的程序段。設該十進制數字存儲在名為BCDKEY的字節變量中,

要求將轉換的結果送入RESULT變量(十進制數字與相應七段代碼的對應表如下)。

十進制數^0123456789

七段代碼3FH06H5BH4FH66H6DH7DH07H7FH6FH

解:MOVAL,BCDKEY

MOBBX,DISPLAY

XLAT

MOVRESULT,AL

5.9根據以下要求編寫相應的指令:

(1)將AX寄存器和BX寄存器的內容相加,結果存入BX寄存器。

(2)用增量指令使采用BX寄存器間接尋址的單元中的字節內容加lo

(3)用BX寄存器利位移量303的寄存器相對尋址方式把存儲器中的一個字和(CX)相加,結果送回該

存儲單元中。

(4)用寄存器BX和SI的基址變址尋址方式,把存儲器中的?個字節與AH寄存器的內容相加,并保存在

AH中。

(5)采用合適的指令,將1000H單元中的字與1200H單元中的字相加,結果存入1000H單元。

解:(1)ADDBX,AX

(2)INCBYTEPTR[BX]

(3)ADD[BX+300H],CX

(4)ADDAH,[BX][SI]

(5)MOVBX,1000H

MOVAX,[120OH]

ADD[BX],AX

3.10設以下表達式中的變量名均為16位用符號數所在單元的地址,編寫指令序列,完成下列運算(出發

運算的余數舍去):

(WXY)/(A+70)-X

(A-BXC)/(X-Y)-Z

解:(1)MOVAX,W

IMULY

MOVBX,A

ADDBX,70

IDIVBX

MOVX,AX

(2)MOVAX,B

錯誤!未指定書簽。與接口技術

IMULC

MOVBX,AX

MOVCX,DX

MOVAX,A

CWD

SUBAX,BX

SBBDX,CX

MOVBX,X

SUBBX,Y

IDIVBX

MOVZ,AX

5.11變量VARA1和變量VARA2已定義如下:

VARA1DW23A8H,028011

VARA2DW0A210H,1248H

(1)將VARA1和VARA2單元中的對應字數據相加,結果存入VARA2指示的單元中

(2)將VARA1單元中的兩個字作為雙字和VARA2單元中的兩個字組成的雙字相加,結果存放在

VRAR2單元中,雙字的存放格式都是低位字在低地址單元、高位字在高地址單元中。

解:(1)MOVAX,VARA1

ADDVARA2,AX

(2)MUVAX,VAKA1

ADDVARA2,AX

MOVAX,VARA1+2

ADCVARA2+2,AX

5.12寫出完成以下組合式BCD碼計算的指令序列:

BCD1+BCD2-BCD3-*DX

解:MOVAL,BCD1

ADDAL,BCD2

DAA

MOVDL,AL

MOVAL,BCD1+1

ADCAL,BCD2+1

DAA

MOVDH,AL

MOVAL,DL

SUBAL,BCD3

DAS

MOVDL,AL

MOVAL,DH

SBBAL,BCD3+1

DAS

MOVDH,AL

5.13指出下列各條指令是否正確,如不正確,則指出其錯在何處。

(1)MOVCS,100011(2)ADCBX,25H

(3)ADD[BX],20(4)MULAX,BL

(5)PUSHCS(6)MOVDX,2000H

(7)ADD[BX+ST],30H(8)POPCS

(9)INC[SI](10)MOV[BX],[SI]

解:(1)錯誤(2)正確(3)錯誤(4)錯誤(5)正確

第8頁共53頁

(6)正確(7)錯誤(8)錯誤(9)錯誤(10)錯誤

5.14用邏輯運算指令分別寫出完成下列要求的指令:

將BX寄存器中的高4位清零。

將CX寄存器中的第0、1兩位置1。

將AL寄存器的中間4位變反。

測試AX的最高位和次高位是否為0o

解:(1)MOVAX,OFFFH

ANDBX,AX

(2)MOVAX,3

ORCX,AX

(3)MOVBL,3CH

XORAL,BL

(4)MOVBX,3FFFH

TESTAX,BX

5.15設(BX)=0A6H,(CL)=3,CF為1,試指出下列各條指令單獨執行后BX中的值。

(1)SARBX,1(2)SHRBX,CL

(3)SHLBL,CL(4)SALBL,1

(5)RORBX,CL(6)RCLBX,CL

(7)ROLBH,1(8)RCRBL,1

解:(1)(BX)=0053H(2)(BX)=0014H(3)(BX)=0030H(4)(BX)=004CH

(5)(BX)=0C014H(6)(BX)=0534H(7)(BX)=0A6H(8)(BX)=00D3H

5.16已知有一32位的無符號數在(DX,AX)中,試編寫指令序列,將該32位數左移4位,將低4位用

0填補;將移出的高4位存入CH的低4位中。

解:MOVCL,4

MOVCH,DH

SHRCH,CL

SHLDX,CL

MOVBL,AH

SHRBL,CL

SHLAX,CL

ORDL,BL

5.17利用移位指令、傳送指令和加法指令完成乘法運算(AX)X10o

解:SALAX,1

MOVBX,AX

MOVCL,2

SALAX,CL

ADDAX,BX

5.18試分別指出在下列3種條件下執行指令SUBAX,BX時,對標志位OF、CF、SF、ZF影響的情況:

(1)(AX)=14C6H,(BX)=80DCH

(2)(AX)=42C8H,(BX)=608DH

(3)(AX)=0D023H,(BX)=9FD0H

解:⑴OF=1,CF=1,SF=1,ZF=O

(2)0F=0,CF=1,SF=1,ZF=O

(3)0F=0,CF=O,SF=O,ZF=O

錯誤!未指定書簽。與接口技術

5.19在8086/8088指令系統中,哪些指令可以加重且前綴?重復前綴共有哪幾種形式?它們的操作功能

是什么?

解:可加重復前綴的指令有:MOVS、STOS、SCAS、LODS、CMPS;

重復前綴的形式有:REP、REPE/REPZ、REPNE/REPNZ

5.20在一個名為STRING、長度為100字節的字符串中查找是否含有字符“$”,如果有則將第一次發現的

“$”字符所在單元的偏移地址送入BX寄存器中;如果未曾找到,則將0FFFFH送入BX寄存器中。

解:CLD

MOVAL,'$'

LEADLSTRING

MOVCX,100

REPNESCASB

JNEZER

DECDI

MOVBX,DI

JMPSTOP

ZER:MOVBX,OFFFFH

STOP:HLT

5.21將2000H段中名為BUFST的緩沖區中長度為200個字節的數據串移到3000H段中名為DSTST的緩沖

區中。編寫兩種采用不同指令實現該功能的程序段。

解:⑴MOVAX,2000H

MOVDS,AX

MOVAX,3000H

MOVES,AX

MOVCX,200

CLD

LEASI,BUFST

LEADI,DSTST

REPMOVSB

HLT

(2)MOVAX,2000H

MOVDS,AX

MOVAX,3000H

MOVES,AX

MOVCX,200

MOVSI,OFFSETBIFST

MOVDI,OFFSETDSTST

AGN:MOVAL,[SI]

MOVES:[DI],AL

INCSI

INCDI

LOOPAGN

HLT

5.22將1000段中名為DATSTR的字符串,向高地址方向平移20個字節,字符串的長度為45字節。

解:STD

MOVAX,1000H

MOVDS,AX

第10頁共53頁

MOVES,AX

LEASI,DATSTR+44

LEADI,DATSTR+64

MOVCX,45

REPMOVSB

HLT

5.23用其它指令完成與下列指令同樣的功能

(1)REPMOVSB(2)REPECMPSW

(3)REPSTOSB(4)REPNESCASB

解:(1)AGAIN:MOVAL,[SI](2)AGAIN:MOVAL,[SI]

MOVES:[DI],ALCMPAL,ES:[DI]

INCSIINCSI

INCDIINCDI

LOOPAGAINLOOPEAGAIN

(3)AGAIN:MOVES:[DI],AL(4)AGAIN:CMPAL,[DI]

INCDIINCDI

LOOPAGAINLOOPNEAGAIN

5.24有100個學生的計算機課程成績存放在COMPLIT緩沖區中,編寫指令序列統計85分以上、60?85分、

60分以下各有多少人,并把統計結果存入ORDER開始的三個字節單元中。

解:LEASI,COMPUT

MOVCX,100

MOVBL,10

MOVBH,0

MOVDX,0

AGAIN:MOVAL,[SI]

CBW

IDIVBL

CMPAL,9

JGERANGE1

CMPAL,8

JEGE85

CMPAL,6

JGERANGE2

INCBH

JMPNEXT

GE85:CMPAH,5

JGERANGE1

RANGE2:INCDL

JMPNEXT

RANGE1:INCDH

NEXT:INCSI

LOOPAGAIN

MOVORDER,DH

MOVORDER+1,DL

MOVORDER+2,BH

HLT

錯誤!未指定書簽。與接口技術

5.25在內存數據區從4000H開始存放著由30個字符組成的字符串,編寫指令序列,查找井統計率中空格

符的個數,并將統計結果存入4020H單元中。

解:MOVSI,4000H

MOVCX,30

SUBBL,BL

MOVAL,20H

AGAIN:CMPAL,[SI]

JNZNEXT

INCBL

NE燈:INCSI

LOOPAGAIN

MOVSI,4020H

MOV[SI],BL

HLT

5.26編寫一指令序列,統計寄存器BX中內容含“1”的個數,將統計結果送入CX寄存器中c

解:SUBCX,CX

G00N:CMPBX,0

JZSTOP

SHRBX,1

JNCJUMP

INCCX

JUMP:JMPGOON

STOP:HLT

5.27試分析下列程序段:

ADDAX,BX

JNOLI

JNCL2

SUBAX,BX

JNCL3

JNOL4

JMPL5

如果AX和BX的內容給定如下:

AXBX

(1)147BH80DCH

(2)0B568H54B7H

(3)4C28H608DH

(4)0D023H9FD0H

(5)94B7H0B568H

問在該5種條件下,以上程序執行完后程序將轉向哪里?

解:⑴L1;(2)L1;(3)L2;(4)L5;(5)L5

5.28設在內存數據段中有一個由28個字節數據組成的數組,數組的起始地址為2000H,試編寫程序段,

將其分成正數組和負數組,正數組存放于2020H開始的單元中;負數組存放于2040H開始的單元中。

解:MOVBX,2000H

MOVCX,1CH

MOVSI,2020H

MOVDI,2040H

L00P1:MOVAL,[BX]

第12頁共53頁

SUBAL,0

JSNEGAT

MOV[SI],AL

INCSI

JMPNEXT

NEGAT:MOV[DI],AL

INCDI

NEXT:LOOPL00P1

HLT

5.29在首地址為VALU的字數組中,存放有10個無符號數,編與指令序列,求出它們的平均值并存放于

BL寄存器中(只取整數)。再統計出數組中有多少個小于平均值的數,將結果存于DI.寄存器中。

解:MOVSI,0

MOVDX,0

MOVCX,DX

AVERAGE:MOVAL,VALU[SI]

CBW

ADDDX,AX

INCSI

LOOPAVERAGE

MOVAX,DX

MOVBL,10

DIVBL

MOVBL,AL

MOVSI,0

MOVDX,0

MOVCX,0

COMPARE:MOVAL,VALU[SI]

CMPAL,BL

JAEGOON

INCDL

GOON:INCSI

LOOPCOMPARE

HLT

5.30有20個ASCII碼表示的分離式BCD碼存放在緩沖區UNPBCD中,編寫指令序列將它們轉換成組合式

BCD碼,即把兩個相鄰字節單元的數碼合并成一個字節單元,高地址單元存放在高4位,低地址單元存放在

低4位,轉換結果存放于PABCD緩沖區中.

解:MOVCX,14H

LEASI,UNPBCD

LEADI,PABCD

CONVERT:PUSHex

MOVAL,[SI]

SUBAL,30H

MOVBL,AL

MOVAL,[SI+1]

SUBAL,30H

MOVCL,4

SHLAL,CL

ADDAL,DL

錯誤!未指定書簽。與接口技術

MOV[DI],AL

POPCX

ADDSI,2

INCDI

LOOPCONVERT

HLT

習題六

6.1請指出變量與標號都有哪些屬性?它們的主要區別是什么?

解:變量的屬性有:段屬性,偏移屬性,類型屬性。

標號的屬性有:段屬性,偏移屬性,距離屬性。

變量和標號都是一種符號地址。變量的內容是代表存放在某些存儲單元中的數據,變量名就代表這些

單元的起始地址;標號是代表一條指令目標代碼的起始地址。

6.2在一個數據段中,試用偽指令定義下列數據或字符變量,并畫出內存分配示意圖。

⑴為十進制數58定義字節變量DEDAT

⑵為二進制數U011010B定義字節變量BINDAT

⑶為十六進制數B7A21I定義字變量11EXDAT

⑷定義6個0的字變量

⑸為字符串'Ihaveapen'定義字節變量STRING

解:(1)DEDATDB58

(2)INDATDB11011010B

(3)HEXDB0B7A2H

(4)DW6DUP(O)

(5)STRINGDB'Ihaveapen'

6.3已知在某數據段中有如下變量定義:

VRWDDW256DUP(?)

現要求對這些變量單元既能進行字操作,同時在另一種場合乂能進行字節操作,請問應該如何解決?

解:用LABEL偽指令進行字節定義:

VRBDLABELBYTE

VRWDDW256(?)

6.4已知有如下賦值語句:

ALPHAEQU100

BETAEQf25

GAMMAEQU2

試指出下列表達式的值為多少?

⑴ALPHA*100(2)ALPHAMODGAMMA+BETA

⑶(ALPHA+2)*BETA-2(4)(BETA/3)MOD5

⑸(ALPHA+3)*(BETAMODGAMMA)(6)ALPHAGEGAMMA

⑺BETAAND7(8)GAMMAOR3

第14頁共53頁

解:⑴10000(2)26(3)2446(4)3

(5)309(6)0FFFFH(7)08H(8)0BH

6.5分析如下程序,畫出堆棧最滿時各單元的地址及內容。

STASEGSEGMENTAT1000H

DW200DUP(?)

TCPLABELWORD

STASEGENDS

CCDSEGSEGMENT

ASSUMECS:CODSEG,SS:STASEG

START:MOVAX,STASEG

MOVSS,AX

MOVSP,OFFSETTOP

PUSHDS

SUBAX,AX

PUSHAX

PUSHBX

PUSHF

HOPF

POPBX

POPAX

CCDSEGENDS

ENDSTART

解:(1)10000(2)26(3)2446(4)3

6.6編寫一完整的匯編語言源程序,在數據段中定義一雙字變量VARLD,再在附加段中也定義一雙字變量

V.ARLE,然后將這兩個雙字內容相加,結果存放于數據段的RESU變量中。

解:DATASEGMENT

WVLDLABELWORD

VARLDDD58A027B4H

RESUDW?,?

DATAENDS

EXTRSEGMENT

WVLELABELWORD

VARLEDD0F4C2380H

EXTRENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:EXTR

START:MOVAX,DATA

MOVDS,AX

MOVAX,EXTR

MOVES,AX

MOVAX,WVLD

ADDAX,ES:WVLE

MOVRESU,AX

MOVAX,WVLD+2

ADCAX,ES:WVLE+2

MOVRESU+2,AX

錯誤!未指定書簽。與接口技術

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

6.7循環程序一般由哪幾部分構成?各部分的功能是什么?

解:(D循環初始化部分。主要是設定循環的初始狀態,為循環作準備。如設置循環最大次數,循環過

程中相關寄存器所需的初始值等等。

(2)循環工作部分。這是循環程序的主體部分,它完成該循環體所要實現的主要功能,如數據的傳送、

運算等。

(3)循環參數調整部分。主要功能是用于修改某些數據,以保證每次循環時參與運行的某些信息能發

生有規律的變化,使完成的功能不完全重復。

(4)循環控制部分。循環控制部分是循環程序設計的關鍵,它根據循環控制條件來控制循環的運行和

結束,該控制功能由循環控制指令完成。

6.8設有一匯編語言源程序如下:

DATSEGSEGMENT

CONDATDB3EH,0l'7JI,68H,9CH,7FH

ORG1000H

SUMDW?

DATSEGENDS

PROSEGSEGMENT

ASSUMECS:PROSEG,DS:DATSEG

MAINPROCFAR

START:PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATSEG

MOVDS,AX

LEABX,CONDAT

MOVCX,5

XORDX,DX

NMP:MOVAL,[BX]

ANDAL,AL

JSNEXT

ADDDL,AL

JNZNEXT

INCDH

NEXT:INCBX

LOOPNMP

LEABX,SUM

MOV[BX],DX

RET

MAINENDP

PROSEGENDS

ENDSTART

簡要說明此程序的功能,指出程序運行后四個通用寄存器AX、BX、CX、DX中的內容各是什么?程序運行的

結果是什么?保存在什么地方?

解:程序功能是,統計CONDAT數據區的9個字節,將正數之和送入1000H單元;將前幾個為0的數的個

數送入1001H單元。

第16頁共53頁

程序執行結果:(AX)=0010H(BX)=1000H(CX)=O(DX)=023EHo

正數之和等于3EH保存于1000H單元中;數組前面0的個數是2,保存于1001H單元中。

6.9設內存自1000H開始的存儲區中,存放有20個帶符號數,試編一程序段,找出其中最小的數,存于數

據區2000H中。

AX,1000H

DS,AX

BX,BUFF

CX,[BX]

AX,0

s

CAN?BX,2

DX,[BX]

DX,AX

ENEXT

JGAX,DX

?XCHG

NEXT?LOOV

溫馨提示

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

評論

0/150

提交評論