第一篇:微機原理與接口技術(第二版)習題答案
第1章
1.1 微處理器、微型計算機和微型計算機系統三者之間有什么不同?
解:
把CPU(運算器和控制器)用大規模集成電路技術做在一個芯片上,即為微
處理器。微處理器加上一定數量的存儲器和外部設備(或外部設備的接口)構成了
微型計算機。微型計算機與管理、維護計算機硬件以及支持應用的軟件相結合就形
成了微型計算機系統。
1.2 CPU在內部結構上由哪幾部分組成?CPU應該具備哪些主要功能? 解:
CPU主要由起運算器作用的算術邏輯單元、起控制器作用的指令寄存器、指
令譯碼器、可編程邏輯陣列和標志寄存器等一些寄存器組成。其主要功能是進行算
術和邏輯運算以及控制計算機按照程序的規定自動運行。
1.3微型計算機采用總線結構有什么優點? 解:
采用總線結構,擴大了數據傳送的靈活性、減少了連線。而且總線可以標準
化,易于兼容和工業化生產。
1.4數據總線和地址總線在結構上有什么不同之處?如果一個系統的數據和地址合用
一套總線或者合用部分總線,那么要靠什么來區分地址和數據? 解:
數據總線是雙向的(數據既可以讀也可以寫),而地址總線是單向的。
8086CPU為了減少芯片的引腳數量,采用數據與地址線復用,既作數據總線也作為
地址總線。它們主要靠信號的時序來區分。通常在讀寫數據時,總是先輸出地址
(指定要讀或寫數據的單元),過一段時間再讀或寫數據。
1.8在給定的模型中,寫出用累加器的辦法實現15×15的程序。
DEC H
JP
NZ,LOOP
HALT
第 2章
作業 答案
2.1 IA-32結構微處理器直至Pentillm4,有哪幾種? 解:80386、30486、Pentium、Pentium Pro、PeruiumII、PentiumIII、Pentium4。
2.6IA-32結構微處理器有哪幾種操作模式? 解:
IA一32結構支持3種操作模式:保護模式、實地址模式和系統管理模式。操
作模式確定哪些指令和結構特性是可以訪問的。
2.8IA-32結構微處理器的地址空間如何形成?
解:
由段寄存器確定的段基地址與各種尋址方式確定的有效地址相加形成了線性地
址。若末啟用分頁機制,線性地址即為物理地址;若啟用分頁機制,則它把線性地
址轉為物理地址。
2.15 8086微處理器的總線接口部件由哪幾部分組成? 解:
8086微處理器中的總線接口單元(BIU)負責CPU與存儲器之間的信息傳
送。具體地說,BIU既負責從內存的指定部分取出指令,送至指令隊列中排隊
(8086的指令隊列有6個字節,而8088的指令隊列只有4個字節);也負責傳送執
行指令時所需的操作數。執行單元(EU)負責執行指令規定的操作。
2.16段寄存器CS=120OH,指令指針寄存器IP=FFOOH,此時,指令的物理地址為
多少? 解:
指令的物理地址=12000H+FFOOH=21FOOH
第3章 作 業答案
3.1分別指出下列指令中的源操作數和目的操作數的尋址方式。
(1)MOV SI, 30O
(2)MOV CX, DATA[DI]
(3)ADD AX, [BX][SI]
(4)AND AX, CX
(5)MOV[BP], AX
(6)PUSHF
解:
(l)源操作數為立即尋址,目的操作數為寄存器尋址。
(2)源操作數為變址寄存器加位移量尋址,目的操作數為寄存器尋址。
(3)源操作數為基址加變址尋址,目的操作數為寄存器尋址。
(4)源操作數和目的操作數都為寄存器尋址。
(5)源操作數為寄存器尋址,目的操作數為寄存器間接尋址。
(6)為堆棧操作。
3.2試述指令MOVAX,2000H和MOV AX,DSz[2000H]的區別。
解:前一條指令是立即尋址,即把立即數2000H傳送至寄存器AX。后一條指令
是直接尋址,是把數據(DS)段中的地址為200OH單元的內容傳送至寄存器AX。
3.3寫出以下指令中內存操作數的所在地址。
(1)MOV AL, [BX+10]
(2)MOV [BP+10], AX
(3)INC BYTEPTR[SI十5]
(4)MOV DL, ES:[BX+SI]
(5)MOV BX,[BP+DI+2] 解:
(1)數據段BX+10單元。
(2)堆棧段BP+10單元。
(3)數據段SI+5字節單元。
(4)附加段(ES段)BX+SI單元。
(5)堆棧段BP+DI+2單元。
3.4判斷下列指令書寫是否正確。
(1)MOV AL, BX
(2)MOV AL, CL
(3)INC [BX]
(4)MOV 5, AL
(5)MOV [BX],[SI]
(6)M0V BL, OF5H
(7)MOV DX, 2000H
(8)POP CS
(9)PUSH CS
解:
(l)不正確,AL與BX數據寬度不同。
(2)正確。
(3)不正確,因為不明確是增量字節還是字。
(4)不正確,立即數不能作為目的操作數。
(5)不正確,因為不明確要傳送的是字節還是字。
(6)正確。
(7)正確。
(8)不正確,CS不能作為:pop指令的操作數。
(9)不正確,CS不能作為PUSH指令的操作數。
3.5設堆錢指針SP的初值為1000H,AX=2000H,BX=3000H,試問:
(1)執行指令PUSHAX后SP的值是多少?
(2)再執行PUSHBX及POPAX后,SP、AX和BX的值各是多少?
解:
(1)SP=OFFEH。
(2)SP=OFFEH;AX=3000H,BX=3000H。
3.6要想完成把[3000H]送[2000H]中,用指令:
MOM[200OH],[300OH]
是否正確?如果不正確,應該用什么方法實現?
解:不正確。
正確的方法是:
MOV AL, [300OH]
MOV [2000H],AL
3.7假如想從200中減去AL中的內容,用SUB200,AL是否正確?如果不正確,應該
用什么方法?
解:不正確。
正確的方法是:
MOV BL, 200
SUB BL,AL
3.8試用兩種方法寫出從8OH端口讀入信息的指令。再用兩種方法寫出從4OH口輸
出10OH的指令。
解:
(1)IN AL, 80H
(2)MOV DX,8OH
IN AL, DX
(3)MOV,AL,lOOH
OUT40H,AL
4)MOV AL,10OH
MOV DX,4OH
OUT DX,AL
3.9假如:AL=20H,BL=1OH,當執行CMPAL,BL后,問:
(1)AL、BL中的內容是兩個無符號數,比較結果如何?影響哪兒個標志位?
(2)AL、BL中的內容是兩個有符號數,結果又如何,影響哪幾個標志位?
解:
(l)AL=2OH,BL=1OH,O=0,S=0,Z=0,A=0,P=0,C=0。
(2)因為兩個都是符號正數,其結果與(l)相同。
3.10若要使AL×10,有哪幾種方法,試編寫出各自的程序段?
解:
(1)使用乘法指令:
MOVBL,10
MULBI,(2)使用移位指令:
SHLAL,1
MOVBL,AL
SHLAL,2
ADDAL,BL
(3)使用加法指令:
ADDAL,AL
MOVBL,AL
ADDAL,AL
ADDAL,AL
ADDAL,BL
3.118086匯編語言指令的尋址方式有哪幾類?哪種尋址方式的指令執行速度最快?
解:尋址方式分為:立即數尋址方式、寄存器操作數尋址方式和存儲器操作數尋
址方式。其中,寄存器操作數尋址方式的指令執行速度最快。
3.12在直接尋址方式中,一般只指出操作數的偏移地址,那么,段地址如何確定?如
果要用某個段寄存器指出段地址,指令中應該如何表示?
解:
默認的數據訪問,操作數在DS段;堆棧操作在SS段;串操作源操作數(SI)在DS段, 目的操作數(DI)在ES段;用BP作為指針在SS段。如果要顯式地指定段地址,則在操
作數中規定段寄存器。例如:
MOVAX,ES:(BX+10H)
3.13在寄存器間接尋址方式中,如果指令中沒有具體指明段寄存器,那么如何確定
段地址?
解:
在寄存器間接尋址方式中,如果指令中沒有具體指明段寄存器,段地址是
隱含約定的,也就是隱含地選擇段寄存器。如操作類型為指令,則指定代碼段寄
存器CS,如操作類型為堆棧操作,則指定堆找段寄存器SS,…,如表3-1中所示。
當需要超越約定時,通常用段替代前綴加冒號“:”來表示段超越,它允許程序設
計者偏離任何約定的段。
例如:
MOV ES:〔BX],AX
這時數據將從寄存器EAX傳送至附加段中由EBX尋址的存儲單元,而不是傳送
到數據段中。
3.14采用寄存器間接尋址方式時,BX、BP、SI、DI分別針對什么情況來使用?這4個
寄存器組合間接尋址時,地址是怎樣計算的?請舉例說明。
解: 在寄存器間接尋址方式下,BX和BP作為間址寄存器使用,而SI、DI作為
變址寄存器使用。除BP間址默認的段為堆棧段,其他的都默認為數據段。它們
都可以單獨使用,或加上偏移量或組合使用。如:
[BX+n]
LBP+n]
[SI+n]
[DI+n]
[BX+SI+n]
[BX+DI+n]
[BP+SI+n]
[BP+DI+n]
3.15設DS=2100H,SS=5200H,BX=1400H,BP=6200H,說明下面兩條指令所進行的具體操作:
MOVBYTEPTR[BP],200
MOVWORDPTR[BX],2000
解:前一條指令是把立即數(應是字節)200,傳送至堆棧段(BP的默認段〉偏移
量由BP規定的字節單元,地址為:52000H+620OH=58200H
第二條指令是把立即數.2000,傳送至數據段(BX的默認段)偏移量由BX規定的字單元,地址為:21000H+1400H=22400H。
3.16使用堆錢操作指令時要注意什么問題?傳送指令和交換指令在涉及內存操作數
時應該分別要注意什么問題?
解:使用堆棧指令可以把內存單元作為一個操作數(從內存到內存)。但堆棧
固定在堆棧段且只能由SP指向。且堆棧操作要修改堆核指針。MOV指令不能實
現內存單元間的數據傳送。XCHG指令是交換,有一個操作數必須是寄存器。
3.17下面這些指令中哪些是正確的?哪些是錯誤的?若是錯誤的,請說明原因。
(1)XCHG CS, AX
(2)MOV[BX], [1000]
(3)XCHGBX, IP
(4)PUSHCS
(5)POP CS
(6)IN BX, DX
(7)MOVBYTE[BX],100O
(8)MOVCS,[1000]
解:
(l)錯誤,CS不能交換。
(2)錯誤,MOV指令不能在內存間傳送。
(3)錯誤,IP不能交換。
(4)錯誤,CS可以作為PUSH指令的操作數。
(5)錯誤,CS可以作為POP指令的操作數。
(6)錯誤,IN指令的目的操作數是累加器。
(7)錯誤,目的操作數是字節單元。
(8〉錯誤,CS不能作為MOV指令的目的操作數。
3.18 以下是格雷碼的編碼表,O 0000 0001
0011 0010 0110 0111 0101 0100 1100
請用換碼指令和其他指令設計一個程序段,以實現由格雷碼向ASCII碼的轉換。
解:
MOVBX,TABLE
MOVSI,ASCII_TAB
MOVAL,0
MOVCX,10 TRAN:XLATTABLE
MOVDL,AL
ADDDL,30H
MOV[SI],DL
INCAL
LOOPTRAN 3.19使用乘法指令時,特別要注意先判斷是用有符號數乘法指令還是用無符號數乘
法指令,這是為什么?
解:因為有符號數和無符號數,其數的乘法是一樣的。但結果的符號取決于兩
個操作數的符號。
3.20字節擴展指令和字擴展指令一般用在什么場合?舉例說明。
解:主要用于字節相除和字相除之前,把被除數擴展為兩倍寬度的操作數。
3.21 什么叫BCD碼?什么叫組合的BCD碼?什么叫非組合的BCD碼?8086匯編語言在對
BCD碼進行加、減、乘、除運算時,采用什么方法?
解:BCD碼為十進制編碼的二進制數。組合的BCD數是把兩位BCD加在一個字節
中,高位的在高4位。非組合的BCD碼是把一位BCD數放在一個字節的低4位,高4位
為0。8086在BCD加、減和乘法運算以后用BCD調整指令把結果調整為正確的BCD
數。在BCD除法之前先用BCD調整指令再做除法.3.22用普通運算指令執行BCD碼運算時,為什么要進行十進制調整?具體地講,在
進行BCD碼的加、減、乘、除運算時,程序段的什么位置必須加上十進制調整
指令?
解:因為8086指令把操作數作為二進制數進行二進制運算,要得到正確的BCD結
果,需要進行調整。在加、減、乘法指令之后加上BCD調整指令,而在除法指令
之前先用BCD調整指令再用除法指令。
第4章
作業答案
4.1在下列程序運行后,給相應的寄存器及存儲單元填入運行的結果:
MOV AL, 1OH
MOV CX, 100OH
MOV BX, 2000H
MOV [CX],AL
XCHGCX,BX
MOV DH, [BX]
MOV DL, 01H
XCHGCX, BX
MOV [BX],DL
HLT
解:寄存器及存儲單元的內容如下:
AL=1OH
BL=OOH
BH=2OH
CL=OOH
CH=1OH
DH=1OH
(10O0H)=lOH
(200OH)=0lH 2.要求同題4.1,程序如下:
MOV AL, 50H
MOV BP, 100OH
MOV BX, 200OH
MOV[BP],AL
MOV DH, 20H
MOV[BX],DH
MOV DL, OlH
MOV DL, [BX]
MOV CX, 300OH
HLT
解:寄存器及存儲單元的內容如下:
AL=5OH
BL=OOH
BH=20H
CL=OOH
CH=30H
DL=20H
DH=2OH
BP=100OH
(10OOH)=5OH
(20OOH)=20H
4.3自1000H單元開始有一個100個數的數據塊,若要把它傳送到自200OH開始的存
儲區中去,可以采用以下3種方法實現,試分別編制程序以實現數據塊的傳送。
(l)不用數據塊傳送指令
(2)用單個傳送的數據塊傳送指令
(3)用數據塊成組傳送指令。
解:
(1)
LEA SI, 1OOOH
LEA DI, 200OH
MOV CX, 100
L1: MOV AX, [SI]
MOV[DI],AX
LOOPLl
HLT
(2)
LEASI,100OH
LEADI,2000H
MOVCX,100
CLD
L1: MOVSB
LOOP L1
HLT
(3)
LEASI, 100OH
LEADI, 200OH
MOVCX, 100
CLD
REP MOVSB
HLT
4.4 利用變址寄存器,編寫一個程序,把自1000H單元開始的100個數傳送到自1070H
開始的存儲區中去。
解:
LEASI,100OH
LEADI,1070H
MOVCX,100
CLD
REP MOVSB
HLT
4.5要求同題4.4,源地址為2050H,目的地址為2000H,數據塊長度為50.解:
LEASI,205OH
LEADI,200OH
MOVCX,50
CLD
REPMOVSB
HLT
4.6編寫一個程序,把自100OH單元開始的100個數傳送'至105OH開始的存儲區中
(注意:數據區有重疊)。
解:
LEASI, 100OH
LEADI,1050H
ADDSI, 63H
ADDDI, 63H
MOVCX, 100
STD
REPMOVSB
HLT
4.7在自0500H單元開始,存有100個數。要求把它傳送到1000H開始的存儲區中,但在傳送過程中要檢查數的值,遇到第一個零就停止傳送。
解:
LEA SI, 050OH
LEA DI, 10OOH
MOV CX, 100
N1: MOV AL, [SI]
CMP AL, 0
JZ N2
MOV[DI],AL
INC SI
INC DI
LOOPN1
N2: HLT
4.14若在0500H單元中有一個數
(1)利用加法指令把它乘2,且送回原存儲單元(假定X×2后仍為一個字節);
(2)X×4;
(3)X×10(假定X×l0≤255).解:
(1)LEA BX, 050OH
MOV AL, [BX]
ADD AL, AL
MOV[BX],AL
(2)LEA BX, 0500H
MOV AL, [BX]
ADD AL, AL
ADD AL, AL
MOV[BX],AL
(3)LEABX, 050OH
MOVAL, [BX]
ADDAL, AL
MOVDL, AL
ADDAL, AL
ADD AL,AL
ADDAL, DL
MOV[BX],AL
第 5 章
作業答案
5.1 總線周期的含義是什么?8086/8088CPU的基本總線周期由幾個時鐘組成?如果
一個CPU的時鐘頻率為8MHz,那么,它的一個時鐘周期是多少?一個基本總線周期是多
少?如果主頻為5MHz呢?
解:CPLI訪問總線(從內存儲器或I/0端口讀/寫字節或字)所需的時間稱為總線周期。8086/8088CPU的基本總線周期由4個時鐘組成。若CPU的時鐘頻率為8(5)MHz,時
鐘周期為1/8MHz=125(1/5MHz=2O)ns,基本總線周期為4×125(200)ns=500(800)ns
5.2在總線周期的TI、T2、T3、T4狀態,CPU分別執行什么動作?什么情況下需要插入
等待狀態Tw?Tw在哪兒插入?怎樣插入?
解: 下面以存儲器讀為例進行說明。
在Tl周期:輸出地址信號、地址鎖存允許信號、內存或I/O端口訪問控制信號;
在T2周期:CPIJ開始執行數據傳送操作,此時,8086CPU內部的多路開關進行切換,將
地址/數據線AD15~AD0上的地址撤銷,切換為數據總線,為讀寫數據作準
備。8288總線控制器發出數據總線允許信號和數據發送/接收控制信號
DT/R允許數據收發器工作,使數據總線與8086CPU的數據線接通,并控制數
據傳送的方向。同樣,把地址/狀態線A19/S6~A16/S3切換成與總線周期有
關的狀態信息,指示若干與周期有關的情況。
在T3周期:開始的時鐘下降沿上,8086CPU采樣READY線。如果READY信號有效(高電平),則在T3狀態結束后進人TA狀態。在T4狀態開始的時鐘下降沿,把數據總線上的數據讀入CPU或寫到地址選中的單元。在T4狀態:結束總線周期。如果訪問的是慢速存儲器或是外設接口,則應該在Tl狀態輸出的地址,經過譯碼選中某個單元或設備后,立即驅動READY信號到低電平。8086CPU在T3狀態采樣到READY信號無效,就會插入等待周期Tw,在Tw 狀態CPU繼續采樣READY信號;直至其變為有效后再進人T4狀態,完成數據傳送,結束總線周期。在T4狀態,8086CPU完成數據傳送,狀態信號S2 ~S0。變為無操作的過渡狀態。在此期間,8086CPU結束總線周期,恢復各信號線 的初態,準備執行下一個總線周期。
第6章 作 業 答 案
6.1 若有一單板機,具有用8片2114構成的4KBRAM,連線如圖創所示。
若以每1KBRAM作為一組,則此4組RAM的基本地址是什么?地址有沒有重疊區?每一組的地址范圍為多少?
解:RAM的基本地址為:
第一組 OOOOH~03FFH
第二組 4000H~43FFH
第三組 8000H~83FFH
第四組 COOOH~C3FFH
地址有重疊區。每一組的地址范圍為OOOH~3FFH(1024個字節)。
6.4若要擴充1KBRAM(用2114片子),規定地址為8000H~83FFH,地址線應該如何
連接?
解:擴充lKBRAM至規定地址8000H~83FFH,其地址線的低10位接芯片,高6位地址
(Al5~A10=100000)產生組選擇信號。
第7 章
作 業 答 案
7.1 外部設備為什么要通過接口電路和主機系統相連?
解: 因為外部設備種類繁多,輸入信息可能是數字量、模擬量或開關量,而且輸
入速度、電平、功率與CPU差距很大。所以,通常要通過接口電路與主機系統
相連。
7.4 CPU和輸入輸出設備之間傳送的信息有哪幾類?
解:CPU和輸入輸出設備之間傳送的信息主要有3類。
(l)數據
在微型計算機中,數據通常為8位、16位或32位。
(2)狀態信息
在輸入時,有輸入設備的信息是否準備好;在輸出時有輸出設備是否有空,若輸
出設備正在輸出信息,則以忙指示等。
(3)控制信息
例如,控制輸入輸出設備啟動或停止等。
7.9設一個接口的輸入端口地址為0100H,狀態端口地址為0104H,狀態端口中第5位
為1表示輸入緩沖區中有一個字節準備好,可以輸入。設計具體程序以實現查詢式
輸入。
解: 查詢輸入的程序段為:
POLl: IN AL, 0104H
ANDAL,20H
JZ POLl
IN AL, 0100H
第 8 章作 業 答 案
8.1在中斷響應過程中,8086CPU向8259A發出的兩個RT互信號分別起什么作用?
解:
CPU發出的第一個INTA脈沖告訴外部電路,其提出的中斷請求已被響應,應準備將類型號發給CPU,8259A接到了這個INTA脈沖時,把中斷的最高優先級
請求置入中斷狀態寄存器(ISR)中,同時把IRR(中斷請求寄存器)中的相應位復
位。CPU發出的第二個INTA脈沖告訴外部電路將中斷的類型號放在數據總線
上。
8.28086CPU最多可以有多少個中斷類型?按照產生中斷的方法分為哪兩大類?
解:8086CPU最多可以有256個中斷類型。按照產生中斷的方法,可以分為內
部中斷(軟件中斷)和外部(硬件中斷)中斷兩大類。
8.9 在編寫中斷處理子程序時,為什么要在子程序中保護許多寄存器?
解:因為在用戶程序運行時,會在寄存器中有中間結果,當在中斷服務程序中要
使用這些寄存器前要把這些寄存器的內容推至堆棧保存(稱為保護現場)。在從
中斷服務程序返回至用戶程序時把這些內容從堆找恢復至寄存器中(稱為恢復
現場)。
8.12若在一個系統中有5個中斷源,其優先權排列為:1、2、3、4、5,它們的中斷服
務程序的入口地址分別為:3000H、302OH、3050H、3080H、30AOH。編寫一個程序, 當有中斷請求CPU響應時,能用查詢方式轉至申請中斷的優先權最高的源的中斷服
務程序。
解: 若5個中斷源的中斷請求放在一中斷狀態寄存器中,按優先權分別放在狀態的7 位(優先權最高)至位3中。查詢方法的程序段為:
IN
AL,STATUS
CMP
AL,80H
JNE
N1
JMP
3000H
N1:
IN
AL,STATUS
CMP
AL,40H
JNE
N2
JMP
3020H
N2:
IN
AL,STATUS
CMP
AL,20H
JNE N3
JMP 3050H
N3:
IN
AL,STATUS
CMP AL,10H
JNE N4
JMP 3080H
N4:
IN
AL,STATUS
CMP AL,08H
JNE N5
JMP 30A0H N5:
RET
第9章 作 業 答 案
9.3在某一應用系統中,計數器/定時器8253地址為340H~343H,定時用作分頻器(N 為分頻系數),定時器2用作外部事件計數器,如何編制初始化程序?
解:
定時器0用作分頻器,工作方式2,其初始化程序為:
MOV AL,34H
OUT 343H,AL
MOV AL,N1
OUT 342H,AL
MOV AL,N2
OUT 342H,AL
定時器2用作外部事件計數器,工作在方式0,其初始程序:
MOV AL,0B0H
OUT 343H,AL
MOV AL,N1
OUT 342H,AL
MOV AL,N2
OUT 342H,AL
9.4若已有一頻率發生器,其頻率為1MHZ,若要示求通過計數器/定時器8253,著重
產生每秒一次的信號,8253應如何連接?編寫出初始化程序。
解:
1MHZ的信號要變為每秒一次,則需經過106分頻。一個通道的計數為16位最
大為65536。故需要需兩個通道級連,則每個通道計數為1000。用通道0和通道1級連,都工作在方式2,初始化程序為:
MOV AL,34H
OUT 343H,AL
MOV AL,0E8H
OUT 342H,AL
MOV AL,03
OUT 342H,AL
MOV AL,74H
OUT 343H,AL
MOV AL,0E8H
OUT 342H,AL
MOV AL,03
OUT 342H,AL
9.9編程將計數器/定時器8253計數器0設置為模式1,計數初值3000H;計數器1設置
為模式2初值為2010H;計數器2設置為模式4初值為4030H;
解:若端口地址為:0F8H~0FBH,初始化程序為:
MOV AL,32H
OUT 0FBH,AL
MOV AL,00H
OUT 0F8H,AL
MOV AL,30H
OUT 0F8H,AL
MOV AL,74H
OUT
0FBH,AL
MOV AL,10H
OUT
0F9H,AL
MOV
AL,20H
OUT
0F9H,AL
MOV
AL,0B8H
OUT
0FBH,AL
MOV
AL,30H
OUT
0FAH,AL
MOV
AL,40H
OUT
0FAH,AL
第10 章 作 業 答 案
10.4可編程并行接口芯片8255A的3個端口在使用時有什么差別?
解:通常端口A或B作為輸入輸出的數據端口(端口A還可以作為雙向數據端口), 而端口C作為控制或狀態信息的端口,它在“方式”字的控制下,可以分成兩個4位的端
口。每個端口包含一個4位鎖存器。它們分別與端口A和B配合使用,可用以作為控制
信號輸出,或作為狀態信號輸入。
10.7 8255A有哪幾種基本工作方式?對這些工作方式有什么規定?
解:8255A有3種基本的工作方式:
方式0-----基本輸入輸出:
方式1-----選通輸入輸出;
方式2-----雙向傳送。
10.8設置8255A工作方式,8255A的控制口地址為OOC6H。要求端口A工作在方式1,輸
入;端口B工作在方式0,輸出;端口C的高4位配合端口A工作;低4位為輸入。
解:按要求的方式控制字為:10111001B。編程語句為:
MOVAL,0B9H
OUTOOC6H, AL;
10.9設可編程并行接口芯片8255A的4個端口地址為OOCOH、00C2H、00C4H、OOC6H,要求用置0/置1方式對PC6置1,對PC4置0。
解:對端口C的PC6置1的控制字為: 00001101B,對PC4置O的控制字為:
0000100OB。
程序段為:
MOV AL,DH
OUT OOC6H, AL
MOV AL,08H.OUT00C6H, AL
第二篇:微機原理與接口技術習題答案10章
第10章 定時/計數器8253應用設計
1.試分析 8255A方式0、方式1和方式2的主要區別,并分別說明它們適合于什么應用場合。
答:方式0是基本的輸入/輸出,端口A、B、C都可以作為輸入輸出端口。適用于CPU與非智能I/O設備的數據傳輸;
方式1是有聯絡信號的輸入/輸出,端口A、B都可以設定成該方式,此時三個端口的信號線分成了A、B兩組,PC7~PC4用作A組的聯絡信號,PC3~PC0用作B組的聯絡信號。適用于高速CPU與低速I/O設備的數據傳輸;
方式2是雙向傳輸,只有A組端口可以設定成該方式,PC6~PC7用作輸出的聯絡信號,PC4~PC5用作輸入的聯絡信號,PC3用作中斷請求信號。適用于雙機之間數據的并行傳送。
2.8255A的A組設置成方式1輸入,與CPU之間采用中斷方式聯絡,則產生中斷請求信號INTRA的條件是 STBA=
,IBFA=
,INTEA=。
3.如果8255A的端口地址為300H~303H,A組和B組均為方式0,端口A為輸出,端口B為輸入,PC3~PC0為輸入,PC7~PC4為輸出,寫出8255A的初始化程序段;編程實現將從端口C低4位讀入的值從高4位送出。解: MOV DX,303H
MOV AL,10000011B OUT DX,AL MOV DX,302H IN AL,DX MOV CL,4 SHL AL,CL OUT DX,AL 4.在實際應用中經常需要檢測設備的狀態,并進行指示。在8086最小方式系統下,有一片8255A,其分配的端口地址為8F00H~8F07H中的奇地址,外部設備產生的狀態有16個(K15~K0),要求采用4個發光二極管來指示開關量中“1”的個數。(1)畫出8255A - 0 - 的連接圖;(2)編寫程序段實現連續檢測并顯示。解:(1)
8086D8~D158255D0~D7RDRDWRA2A1M/IOBHEA15A11A10A9A8A0A14A13A12A7A6A5A4A3PA0PA1......WRA1PA716位開關量(K15~K0)A0PB0PB1PB7......VCCCSPC3PC2PC1PC0
(2)MOV DX,8F07H
MOV AL,10010010B;端口A、B方式0輸入,端口C方式0輸出 OUT DX,AL NEXT:
L2:
MOV DX,8F03H;從端口B讀取高8位開關量 IN AL,DX XCHG AL,AH MOV DX,8F01H;從端口A讀取低8位開關量 IN AL,DX MOV BX,AX XOR AL,AL MOV CX,16 CLC SHL BX,1
- 1 -
L1:
JNC L1 INC AL LOOP L2 MOV DX,8F05H;從端口C送出 OUT DX,AL JMP NEXT;進行下一次檢測
5.利用IBM PC系統機的總線槽,開發由一片8255A構成的子系統,8255A端口地址為260H~263H,編程實現產生如圖10.20所示的8個信號(各個信號的節拍不必嚴格相等)。
Y0Y1Y7?
圖10.20 要求產生的信號波形
解:8355A與IBM PC機總線的連接框圖如下:
可將8255A的端口A作為要產生的信號的輸出端口,設定為方式0輸出,端口B和端口C不做使用,均設定為方式0輸出。程序段如下:
MOV
DX,263H
;設定8255A的工作方式
- 2 -
MOV
AL,10000000B
OUT
DX,AL
MOV
DX,260H
;產生指定信號
XOR
AL,AL
OUT
DX,AL REP:
MOV
AL,80H
MOV
CX,7 REP1:
OUT
DX,AL
SAR
AL,1
LOOP REP1
MOV
CX,8 REP2:
SHL
AL,1
OUT
DX,AL
LOOP REP2
JMP
REP
6.在實際應用中,經常會遇到要求輸入多個數據量,這時需要用到多路開關,如圖10.21表示八選一的邏輯框圖及其真值表。現有8組16位開關量數據(無符號數),要求通過一片8255A(端口地址為260H~263H)分時輸入到CPU(8088最小方式系統)中,并找出它們中的最大值,并通過4個發光二極管指示其序號(燈亮表示“1”)。畫出8255A的連接圖,并編程實現。
解:由于開關量是16為數據,故可以將8255A的PA端與PB端設定為方式0,分別讀取開關量的低八位和高八位,以PC低三位端口的控制八選一電路的輸出依次從X0到X7,- 3 -
八選一x0x1x2x3x4x5x6x7ys0s1s2s2s1s00 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1yx0x1x2x3x4x5x6x7圖10.21 八選一邏輯電路使用PC端口的高八位輸出最大開關量的序號(該序號為1~8),控制發光二極管的亮滅以碼指示序號。連接圖如下:
程序段如下:
MOV DX,263H
MOV AL,10011010B;設定工作方式,PA,PB均工作于方式0,PA、PB為輸入,PC為輸出
OUT
DX,AL
MOV
CX,8
XOR
BX,BX
MOV
SI,0
;SI表示輸入開關量的序號 ST1:
MOV
DX,262H
OUT
DX,SI
MOV
DX,260H
;將開關量數據的低八位寫入AL
IN
AL,DX
MOV
DX,261H
;將開關量數據的高八位寫入AH
IN
AH,DX
- 4 -
CMP
BX,AX
JA
NEXT
MOV
BX,AX
;將當前最大值保存在BX中
INC
SI
PUSH
SI
;將當前最大值的序號壓棧 NEXT:
INC
SI
LOOP
ST1
POP
SI
XOR
AX,AX
MOV
AX,SI
MOV
CL,4
ROL
AL,CL
MOV
DX,262H
OUT
DX,AL
;最大值的序號出棧
;將最大值的序號(4位)移至AL的高四位 的高四位輸出最大值序號 - 5 -
;PC
第三篇:微機原理與接口技術習題答案2
第2章 8086 CPU結構與功能
1.微處理器內部結構由哪幾部分組成?闡述各部分的主要功能。解:微處理器內部結構由四部分組成:
(1)算術邏輯運算單元ALU:完成所有的運算操作;
(2)工作寄存器:暫存尋址信息和計算過程中的中間結果;
(3)控制器:完成指令的讀入、寄存和譯碼,并產生控制信號序列使ALU完成指定操作;
(4)I/O控制邏輯:處理I/O操作。
2.微處理器級總線有哪幾類?各類總線有什么作用? 解:微處理器級總線有三類:
(1)數據總線:傳送信息;
(2)地址總線:傳送地址碼;
(3)控制總線 傳送控制信號。
3.為什么地址總線是單向的,而數據總線是雙向的?
解:地址碼只能由CPU生成。而數據需要在CPU和存儲器之間傳輸。4.8086/8088微處理器內部有哪些寄存器?其主要作用是什么?
解:8086CPU內部有14個16位寄存器,其中8個通用寄存器(4數據寄存器AX、BX、CX、DX,4地址指針/變址寄存器SI、DI、SP、BP),4個段寄存器(CS、DS、ES、SS),2個控制寄存器(指令指針IP,微處理器狀態字PSW)。
應該注意的是:可以在指令中用作為地址指針的寄存器有:SI、DI、BP和BX;在微處理器狀態字PSW中,一共設定了9個標志位,其中6個標志位用于反映ALU前一次操作的結果狀態(CF,PF,AF,ZF,SF,OF),另3個標志位用于控制CPU操作(DF,IF,TF)。
5.如果某微處理器有20條地址總線和16條數據總線:
(1)假定存儲器地址空間與I/O地址空間是分開的,則存儲器地址空間有多大?
(2)數據總線上傳送的有符號整數的范圍有多大? 解:(1)存儲器地址空間為:220?1MB
1(2)有符號數范圍為: ?2~2?1,即 -32768~32767 6.將十六進制數62A0H與下列各數相加,求出其結果及標志位CF、AF、SF、ZF、OF
15和PF的值:
(1)
1234H;(2)
4321H;(3)
CFA0H;(4)
9D60H 解:(1)
74D4H
CF=0 AF=0 SF=0 ZF=0 OF=0 PF=1
(2)
A5C1H CF=0 AF=0 SF=1 ZF=0 OF=1 PF=0
(3)
3240H
CF=1 AF=0 SF=0 ZF=0 OF=0 PF=0
(4)
0000H
CF=1 AF=0 SF=0 ZF=1 OF=0 PF=1 7.從下列各數中減去4AE0H,求出其結果及標志位CF、AF、SF、ZF、OF和PF的值:
(1)1234H;(2)5D90H;(3)9090H;(4)EA04H 解:(1)
C754H
CF=1 AF=0 SF=1 ZF=0 OF=0 PF=0(2)
12B0H
CF=0 AF=0 SF=0 ZF=0 OF=0 PF=0(3)
45B0H
CF=0 AF=0 SF=0 ZF=0 OF=1 PF=0
(4)
9F24H
CF=0 AF=0 SF=1 ZF=0 OF=0 PF=1 9.寫出下列存儲器地址的段地址、偏移地址和物理地址:(1)2134:10A0;(2)1FA0:0A1F;(3)267A:B876 解:物理地址=段地址*10H+偏移地址
(1)段地址:2134H,偏移地址:10A0H,物理地址:223E0H(2)段地址:1FA0H,偏移地址:0A1FH,物理地址:2041FH(3)段地址:267AH,偏移地址:B876H,物理地址:32016H 10.給定一個數據的有效地址為2359H,并且(DS)=490BH,求該數據的物理地址。解:物理地址=段地址*10H+偏移地址
物理地址=490BH +2359H = 4B409H 11.如果在一個程序段開始執行之前,(CS)=0A7F0H,(IP)=2B40H,求該程序段的第一個字的物理地址。
解:物理地址=段地址*10H+偏移地址
物理地址=CS*10H+IP = AAA40H 12.IBM PC有哪些寄存器可用來指示存儲器的地址? 解:變址寄存器SI,DI,堆棧指針SP,BP,另外還有BX。
第四篇:微機原理與接口技術習題答案4
第4章 匯編語言程序設計
1.已知在BUF的起始處保存有N個字符的ASCII碼,編寫匯編語言程序實現,將這組字符串傳送到緩沖區BUFR中,并且使字符串的順序與原來的順序相反。解:BUF
BUFR
MOV CX, N LEA SI, BUF LEA DI, BUFR ADD DI,CX DEC DI L1: MOV AL,[SI] MOV [DI],AL INC SI DEC DI LOOP L1
2.利用移位、傳送和相加指令實現AX的內容擴大10倍。
解:將擴大后的結果放在DX:AX中,注意到10×AX=8×AX+2×AX。XOR SHL RCL DX,DX AX, 1 DX, 1 DB “BONJOUR_BELLE” DB 100 DUP(?)MOV BX,AX MOV SHL RCL SHL RCL CX,DX AX, 1 DX, 1 AX, 1 DX, 1 ADD ADC AX, BX DX, CX 3.在緩沖區VAR中連續存放著3個16位的無符號數,編寫程序實現將其按遞增關系排列;如果VAR中保存的為有符號數,則再編寫程序實現將其按遞減關系排列。解:VAR DW 1236,-432,3900 XOR SI,SI MOV AX,VAR[SI] CMP AX, VAR[SI+2] JAE L1 XCHG AX, VAR[SI+2] L1:
CMP AX, VAR[SI+4] JAE L2 XCHG AX, VAR[SI+4] L2: MOV VAR[SI], AX MOV AX,VAR[SI+2] CMP AX, VAR[SI+4] JAE L3 XCHG AX, VAR[SI+4] L3:
MOV VAR[SI+2], AX 4.編寫程序段實現將AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,則得到的(DX)=10110110 10011001B。解:利用移位指令完成。
L1: SHR AL,1 RCR DX,1 XOR DX,DX MOV CX,8
SHR BL,1 RCR DX,1 LOOP L1 5.在變量VAR1和VAR2中分別保存有兩個字節型的正整數,編寫完整的匯編語言程序實現:
(1)當兩數中有一個奇數時,將奇數存入VAR1,偶數存入VAR2;
(2)當兩數均為奇數時,兩個變量的內容不變;(3)當兩數均為偶數時,兩數縮小一倍后存入原處。
解:當VAR1為奇數時,不論VAR2的奇偶性,這兩個單元的內容均不變;只有當VAR1為偶數時,如果VAR2為奇數,則VAR1與VAR2內容交換;如果VAR2為偶數,則兩數縮小一倍后存入原處。DATA SEGMENT
VAR1
DB 28
VAR2 DB 36 DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA START: MOV AX, DATA MOV DS,AX MOV ES, AX MOV AL,VAR1 MOV BL,VAR2 TEST AL,1 JZ EVEN1 JMP OVER
EVEN1:
TEST BL,1
JZ
EVEN2
MOV VAR1,BL MOV JMP VAR2,AL OVER EVEN2:
SHR MOV SHR MOV AL,1 VAR1,AL BL,1 VAR2,BL
OVER:
MOV AH,4CH MOV AL,0 INT ENDS END START 21H CODE
6.已知在字變量VAR1、VAR2和VAR3中保存有3個相同的代碼,但有一個錯碼,編寫程序段找出這個錯碼,并將它送到AX,其地址送SI;如果3個代碼都相同,則在AX中置-1標志。解:在數據段中定義:
VAR1 DW 5A34H VAR2 DW 5A35H VAR3 DW 3A34H
在代碼段中編寫程序段:
MOV AX,-1 MOV BX,VAR1 CMP BX,VAR2 JZ
L2 CMP BX,VAR3 JZ
L1 MOV AX,BX LEA SI,VAR1 JMP OVER L1: MOV AX,VAR2 LEA SI,VAR2 JMP OVER L2: CMP BX,VAR3 JZ
OVER MOV AX,VAR3 LEA SI,VAR3 OVER: 7.分析下列程序段的功能:
MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 解:程序段完成DX:AX組成的32位無符號數左移4位,低位補零(也即除以16)。8.下列程序段執行后,求BX寄存器的內容:
MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL 解:實際上完成BX內容循環右移2位,因此,BX寄存器的內容為C02DH。9.下列程序段執行后,求BX寄存器的內容:
MOV CL,5 MOV BX,7D5CH SHR BX,CL 解:完成BX內容邏輯右移5位,因此,BX寄存器的內容為03EAH。10.將BUFFERS中N個字按相反順序傳遞到BUFFERT中。解:
LEA SI,BUFFERS LEA DI,BUFFERT MOV CX,N ADD DI,N ADD DI,N SUB DI,2 L1: MOV AX,[SI] MOV [DI],AX ADD SI,2 SUB DI,2 LOOP L1 11.數組ARRAY中存放有一組字型數據,前兩個字節存放數據長度(5的倍數)。為給這個數組中的數據進行加密保護,每5個數據取出一個數據進行加密處理:奇數位進行取反,偶數位不變,例如對數據0110 1100 1011 0001B加密后變成1100 0110 0001 1011B,編寫加密程序encrpytion 和解密程序 unencrpytion。
解:約定從第一個數據開始,每5個數據為一組,每組中的第一個數據采取加密/解密處理。由于加密算法采用的是取反操作,解密算法也采用取反操作,因此解密和解密算法是同一個程序。
ENCRPYTION PROC NEAR LEA SI,ARRAY
XOR DX,DX
MOV AX,[SI]
MOV BX,5
DIV BX
MOV CX, AX
ADD SI, 2 L1:
MOV AX, [SI]
XOR AX,0AAAAH
MOV [SI], AX
ADD SI,10
LOOP L1
RET ENCRPYTION ENDP
13.設BUF中存放有N個無符號數(或有符號數),編程實現求它們的最小值(存入AX)和最大值(存入DX)。
解:BUF存放有N個無符號數的程序如下: MOV CX,N-1 LEA SI,BUF MOV AX,[SI] MOV DX,AX ADD SI,2 L1: CMP AX,[SI] JBE NOCHG1 XCHG AX,[SI] NOCHG1: CMP DX,[SI] JAE NOCHG2 XCHG DX,[SI] NOCHG2: ADD SI,2 LOOP L1 如果BUF中存放的是有符號數,則只需要將程序中的兩行內容修改:
JBE NOCHG1 JAE NOCHG2
改成:JLE NOCHG1 改成:JGE NOCHG2
14.設BUFFER中存放有N個無符號(第1個字節存放緩沖區的長度),編程實現將其中的0元素抹去,并更新其長度。
解:設BUFFER中存放的是字節型數據。采用雙指針方法:SI為讀指針,DI為寫指針,從低地址開始,內存中讀出一個字節,如果不為0,則寫入內存;如果為0,則不進行寫操作。
LEA SI, BUFFER XOR CX,CX MOV CL, [SI] INC SI MOV DI, SI XOR BH,BH XOR AL,AL L1: CMP [SI],AL JZ L2 MOV BL,[SI] MOV [DI],BL INC DI INC BH L2: INC SI LOOP L1 MOV BUFFER,BH 16.編寫一個子程序實現統計AL中1的個數,然后檢測出字節型緩沖區BUF中0和1個數相等的元素個數。
解:統計AL中1的個數,只需將AL右移,移出的一位內容進行累加,子程序為: COUNTBYTE PROC NEAR
PUSH AX
PUSH CX
MOV CX,8
XOR BL,BL COU1:
SHR AL,1
ADC BL,0
LOOP COU1
POP CX
POP AX
RET COUNTBYTE ENDP 在此基礎上,可以檢測出字節型緩沖區BUF中0和1個數相等的元素個數,即一個字節中有4個1。設BUF中有N個字節型數據,結果保持在BH中。
MOV CX,N LEA SI, BUF XOR BH,BH L1: MOV AL,[SI] CALL COUNTBYTE CMP BL,4 JNZ L2 INC BH L2: INC SI LOOP L1
19.在緩沖區BUFFER中,第1個字節存放數組的長度(<256),從第2個字節開始存放字符的ASCII碼,編寫子程序完成在最高位給字符加上偶校驗。解:STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)
TOP LABEL BYTE STACK ENDS
DATA SEGMENT BUFFER DB 3
DB 'ABC'
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DI,BUFFER
XOR CX,CX
MOV CL,[DI]
INC DI
CALL SETEVEN
MOV AH,4CH
MOV AL,0
INT 21H SETEVEN
PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DI SETEVEN1:
MOV AL,[DI]
CALL COUNTBYTE
;加偶校驗子程序
;返回DOS;首字節為字符串長度;字符串
AND BL,01H
JZ SETEVEN2
OR AL,80H
MOV [DI],AL SETEVEN2:
INC DI
LOOP SETEVEN1
POP DI
POP CX
POP BX
POP AX
RET SETEVEN
ENDP COUNTBYTE PROC NEAR
PUSH AX
PUSH CX
MOV CX,8
XOR BL,BL COU1:
SHR AL,1
ADC BL,0
LOOP COU1
POP CX
POP AX
RET COUNTBYTE ENDP CODE ENDS
END START 20.編寫程序完成求多位數(N個字)的絕對值。21.已知斐波那契數列的定義為:F1數列前n項的子程序。
?1,F2?1,Fi?Fi?1?Fi?2(i?3),編寫求該解:設獎斐波那契數列存放在字變量RESULT中。在數據段中定義
RESULT DW 100H DUP(?)
在代碼段中編寫子程序 FIBONACCI PROC NEAR
XOR DI,DI
MOV RESULT[DI],1
;前兩個數為1
MOV RESULT[DI+2],1
ADD DI,4
MOV CX,N L1:
MOV AX, RESULT[DI-4]
ADD AX, RESULT[DI-2]
MOV RESULT[DI],AX
ADD DI,2
LOOP L1
RET FIBONACCI ENDP
22.編寫程序實現循環顯示10條信息,保存每條信息的變量分別為INFOM1~INFORM10。解:在數據段中定義變量:
TABLE DW INFORM1, INFORM2, INFORM3, INFORM4, INFORM5
DW INFORM6, INFORM7, INFORM8, INFORM9, INFORM10 在代碼段中編寫程序段:
MOV XOR MOV MOV CX,10 SI,SI DX,TABLE[SI] AH,9 L1:
INT ADD CALL LOOP 21H SI,2 WAIT L1 這里,WAIT為延時子程序,用于在顯示信息之間的停頓。
23.編寫程序實現將包含20個數據的數組ARRAY分成兩個數組:正數數組ARRAYP和負數數組ARRAYN,并分別將這兩個數組中數據的個數顯示出來。
解:先編寫一個子程序DISPALD,完成以3位十進制數形式顯示出AL的內容。
DISPALD PROC NEAR PUSH AX PUSH CX PUSH DX XOR AH,AH MOV CL,100 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV AL,AH XOR AH,AH MOV CL,10 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV DL,30H ADD DL,AH MOV AH,2 INT 21H POP DX POP CX POP AX RET DISPALD ENDP
在此基礎上,根據題目要求,需要用到3個指針:SI指向源數組ARRAY,DI指向正數數組ARRAYP,BX指向負數數組ARRAYN。
MOV XOR LEA LEA LEA MOV AND JS MOV INC INC JMP MOV INC INC INC CX,20 DX,DX SI,ARRAY DI,ARRAYP BX,ARRAYN AL,[SI] AL,AL L2 [DI],AL DI DL L3 [BX],AL BX DH SI L1:
L2:
L3:
LOOP MOV CALL MOV CALL L1 AL,DL DISPALD AL,DH DISPALD 24.編寫程序實現求緩沖區BUFFER的100個字中的最小偶數(存入AX)。解:設BUFFER中存放的是有符號數。
L1:
L2: MOV CX,100 LEA SI,BUFFER MOV AX, 7FFFH AND WORD PTR [SI],1 JNZ L2 CMP [SI],AX JGE L2 MOV AX,[SI] ADD SI,2 LOOP L1
225.編寫程序實現求級數1解:BL用于存放項數。
?22???n2??的前n項和剛大于2000的項數n。
STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)TOP LABEL WORD STACK ENDS DATA SEGMENT
DB 100H DUP(?)DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV BL,1
MOV CX,0 COUNT:
MOV AL, BL
MUL BL
ADD CX,AX
CMP CX,2000
JA EXIT
INC BL
JMP COUNT EXIT:
26.定義一條宏指令,實現將指定數據段的段地址傳送到段寄存器ES或DS的功能。解:
27.定義一條宏指令,實現從鍵盤中輸入一個字符串(利用INT 21H的09號功能)。28.定義一條宏指令,實現在屏幕上輸出回車、換行。29.利用其它指令完成與下列指令一樣的功能:
(1)REP MOVSB;
(3)REP STOSB;
解:設DF=0(1)
L1: MOV AL,[SI]
MOV ES:[DI],AL INC INC SI DI
(2)REP LODSB;(4)REP SCASB。
LOOP L1(2)
L1: MOV AL,[SI] INC SI LOOP L1(3)
L1: MOV ES:[DI],AL
INC DI LOOP L1(4)
L1: MOV AL,[SI]
CMP AL,ES:[DI] INC INC SI DI LOOP L1 30.設在數據段中定義了:
STR1 DB ‘ASSEMBLE LANGUAGE’ STR2 DB 20 DUP(?)利用字符串指令編寫程序段實現:
(1)從左到右將STR1中的字符串傳送到STR2;(2)從右到左將STR1中的字符串傳送到STR2;(3)將STR1中的第6個和第7個字節裝入DX;
(4)掃描STR1字符串中有無空格,如有則將第一個空格符的地址傳送到SI。解: STR1中有17個字符(含一個空格),設DS和ES均指向STR1和STR2所在的段。(1)
CLD MOV LEA LEA REP MOV LEA LEA CX,17 SI,STR1 DI,STR2 MOVSB CX,17 SI,STR1 DI,STR2(2)
ADD DEC MOV MOV DEC INC LOOP LEA MOV MOV LEA MOV CMP JZ INC LOOP SI,CX SI AL,[SI] [DI],AL SI DI L1 SI,STR1 DX,[SI+6] CX,17 SI,STR1 AL,20H [SI], AL L2 SI L1 L1:
(3)
(4)
L1:
L2:
31.設在數據段中定義了:
STRING DB ‘Today is Sunday & July 16, 2000’
編寫程序實現將STRING中的’&’用’/’代替。解:STRING中保存了30個字符。
MOV LEA MOV CMP JNZ MOV INC LOOP CX,30 SI,STRING AL,’&’ [SI],AL L2 BYTE PTR [SI],’/’ SI L1 L1:
L2:
32.分析下列程序段完成的功能:
MOV CX,100 LEA SI,FIRST LEA DI,SECOND REP MOVSB 解:將緩沖區FIRST中100個字節傳送到SECOND中。33.分析下列程序段:
LEA DI,STRING MOV CX,200 CLD MOV AL,20H REPZ SCASB JNZ FOUND JMP NOT_FOUND 問:轉移到FOUND的條件。
解:在緩沖區STRING中搜索非空格字符,如果有非空格則轉到FOUND,如果200個單元中都是空格,則轉到NOT_FOUND。
34.設在數據段的變量OLDS和NEWS中保存有5個字節的字符串,如果OLDS字符串不同于NEWS字符串,則執行NEW_LESS,否則順序執行程序。解:設DS和ES均指向字符串OLDS和NEWS所在的段。CLD MOV
35.編程實現將STRING字符串中的小寫字母變換成大寫字母。解:設STRING中的字符個數為N。
LEA LEA REPZ JNZ CX,5 SI,OLDS DI,NEWS CMPSB NEW_LESS
MOV LEA MOV AND INC CX,N SI,STRING AL,5FH [SI],AL SI L1:
LOOP L1 36.設在數據段中定義了:
STUDENT_NAME DB 30 DUP(?)STUDENT_ADDR DB 9 DUP(?)STUDENT_PRINT DB 50 DUP(?)編寫程序實現:
用空格符清除緩沖區STUDENT_PRINT; 在STUDENT_ADDR中查找第一個’_’字符; 在STUDENT_ADDR中查找最后一個’_’字符;
如果STUDENT_NAME中全為空格符,則STUDENT_PRINT全存入’*’;
將STUDENT_NAME傳送到STUDENT_PRINT的前30個字節中,將STUDENT_ADDR傳送到STUDENT_PRINT的后9個字節中。
37.(上機題)編寫程序實現,將緩沖區BUFFER中的100個字按遞增排序,并按下列格式順序顯示:
數據1 <原序號> 數據2 <原序號> ??
38.(上機題)按同余法產生一組隨機數N(1 Total <總人數> A: <人數1> B: <人數2> C: <人數3> D: <人數4> E: <人數5> F: <人數6> 39.(上機題)編寫程序實現下列5項功能,通過從鍵盤輸入1~5進行菜單式選擇: (1)按數字鍵“1”,完成將字符串中的小寫字母變換成大寫字母。用戶輸入由英文大小寫字母或數字0~9組成的字符串(以回車結束),變換后按下列格式在屏幕上顯示: <原字符串>例如:abcdgyt0092 <新字符串> ABCDGYT0092 按任一鍵重做;按Esc鍵返回主菜單。 (2)按數字鍵“2”,完成在字符串中找最大值。用戶輸入由英文大小寫字母或數字 0~9組成的字符串(以回車結束),找出最大值后按下列格式在屏幕上顯示: <原字符串> The maximum is <最大值>. 按任一鍵重做;按Esc鍵返回主菜單。 (3)按數字鍵“3”,完成輸入數據組的排序。用戶輸入一組十進制數值(小于255),然后變換成十六進制數,并按遞增方式進行排序,按下列格式在屏幕上顯示: <原數值串> <新數值串> 按任一鍵重做;按Esc鍵返回主菜單。 (4)按數字鍵“4”,完成時間的顯示。首先提示用戶對時,即改變系統的定時器 HH:MM:SS(以冒號間隔,回車結束),然后在屏幕的右上角實時顯示出時 間:HH:MM:SS。 按任一鍵重新對時;按Esc鍵返回主菜單。 (5)按數字鍵“5”,結束程序的運行,返回操作系統。解: ※主程序的編程思路: 此程序共5個功能,可采用跳轉表法來實現多路分支結構程序設計。現將這5個程序段,各程序段的首地址分別標號為G1,G2,G3,G4,G5。將5個程序段的入口地址做成表TABLE放入數據段,程序根據給定的參數計算出欲轉入的程序段的首地址在TABLE中的位置后,取出該地址,跳轉至該程序段。 首先,通過調用子程序MENU,設置顯示器,并輸出提示文檔。接著,讀取‘1’-‘5’之間的ASCII表示數。然后,通過跳轉表TABLE實現由輸入參數轉入相應的程序段。由于表中按“字”存放數據,則每個數據的位移量是:0、2、4、6、8。對于輸入參數N,計算位移量的公式是N=(N-1)*2。 當輸入‘1’時,跳轉到標號G1。調用子程序CHGLTR,完成將輸入字符串中的小寫字母變換成大寫字母。用戶按鍵,若為ESC,則轉到主程序段首調用MENU,否則,轉到標號G1; 當輸入‘2’時,跳轉到標號G2。調用子程序MAXLTR,完成在輸入字符串中找最大值。用戶按鍵,若為ESC,則轉到主程序段首調用MENU,否則,轉到標號G2; 當輸入‘3’時,跳轉到標號G3。調用子程序SORTNUM,完成輸入數據組的排序。用戶按鍵,若為ESC,則轉到主程序段首調用MENU,否則,轉到標號G3。 當輸入‘4’時,跳轉到標號G4。調用子程序TIMCHK,完成時間的顯示。用戶按鍵,若為ESC,則轉到主程序段首調用MENU,否則,轉到標號G4。 當輸入‘5’時,跳轉到標號G5。結束程序的運行,返回操作系統。其流程框圖見圖3-1。 一、填空題(每空 1 分,共 15 分)得分 評閱人 1.RESET信號到來后8088/86的CS和IP 分別為 _FFFF_H 和_0000_H。2.在特殊全嵌套方式下,8259可響應 同級或高級 中斷請求。3.CPU與外設接口通過? 數據 總線傳送狀態信號與命令信號。4.8255有3種工作方式, 其中 方式2 只允許A口使用。5.有地址重迭現象的譯碼方式為 部分譯碼 和 線選法。 6.外設端口的編址方式有 I/O端口獨.立編址 和 I/O端口與存儲器統一編址。7.INT8253采用BCD碼計數時,其最大計數值為__10000__,此時的計數初值為__0000__。 8.8088/8086的AD7-AD0是地址數據復用引腳,在T1時傳送__地址信號__。9.8259A作為主片時其引腳CAS0-CAS2的信息傳送方向是_向外_。 10.RS-232C是適用于__數據終端設備DTE__和__數據通信設備DCE__間的接口。 二、單項選擇題(每小題1分,共20分)得分 評閱人 1.8086CPU尋址I/O端口最多使用(4)條地址線。(1)8(2)10(3)12(4)16 2.CPU執行IN指令時有效的信號組合是(1)。(1)=0, =1(2)=0, =0(3)=0, =1(4)=0, =0 3.某計算機的字長是16位,它的存儲器容量是64KB,若按字編址那么它的最大尋址范圍是(2)。 (1)64K字(2)32K字(3)64KB(4)32KB 4.某一SRAM芯片的容量是512×8位,除電源和接地線外,該芯片的其他引腳最少應為(4)根。 (1)25(2)23(3)21(4)19 5.8088/8086的基本總線周期由(2)個時鐘周期組成。(1)2(2)4(3)5(4)6 6.在8086系統中中斷號為0AH,則存放中斷向量的內存起始地址為(2)。(1)0AH(2)28H(3)4AH(4)2AH 7.采用兩片8259A可編程中斷控制器級聯使用,可以使CPU的可屏蔽中斷擴大到(1)。 (1)15級(2)16級(3)32級(4)64級 8.當IF=0,8088/8086CPU不響應(2)中斷請求。(1)INT N(2)INTR(3)NMI(4)INTO 9.8253可編程定時器/計數器中,其二進制的最大計數初值為(3)。(1)65536(2)7FFFH(3)0000H(4)FFFFH 10.8086/88CPU在響應中斷時要執行(2)個中斷響應周期。(1)1個(2)2個(3)3個(4)4個 11.中斷向量表是存放(2)的存儲區域.(1)中斷類型號(2)中斷服務程序入口處地址(3)中斷斷點地址(4)程序狀態字 12.INT8255中可用置位/復位控制字對(3)的各位進行按位操作以實現某些控制功能。 (1)A口(2)B口(3)C口(4)數據總線緩沖器 11.RS-232C標準規定信號“0”和“1”的電平是(3)。(1)0V和+3V~+15V(2)-3V~-15V和0V(3)+3V至+15V和-3V~-15V(4)+3V~+15V和-0V 12.對于開關型設備的控制,適合采用的I/O傳送方式是(1)。(1)無條件(2)查詢(3)中斷(4)DMA 13.傳送數據時,占用CPU時間最長的傳送方式是(1)。(1)查詢(2)中斷(3)DMA(4)IOP 14.既然是在數據傳輸率相同的情況下,那么,又說同步字符傳輸速度要高于 異步字符傳輸其原因是(2)。 (1)發生錯誤的概率少(2)附加位信息總量少(3)雙方通信同步(4)字符之間無間隔 15.巳知DRAM2118芯片容量為16K×1位, 若組成64KB的系統存儲器,則組成的芯片組數和每個芯片組的芯片數為(4).(1)2和8(2)1和16(3)4和16(4)4和8 16.INT 8259中斷屏蔽寄存儲器的作用是(2).(1)禁止CPU響應外設的中斷請求(2)禁止外設向CPU發中斷請求(3)禁止軟中斷請求(4)禁止NMI中斷請求 17.在正常EOI方式下, 中斷結束命令是清除(2)中的某一位.(1)IRR(2)ISR(3)IMR(4)程序狀態字 18.軟中斷INT N的優先級排列原則是(3).(1)N值愈小級別愈高(2)N值愈大級別愈高(3)無優先級別(4)隨應用而定 19.串行異步通信傳輸的主要特點是(2).(1)通信雙方不必同步(2)每個字符的發送是獨立的 (3)字符之間的傳送時間長度應相同(4)字符發送速率由波特率決定 20.8位D/A轉換器的分辨率能給出滿量程電壓的(4).(1)1/8(2)1/16(3)1/32(4)1/256 三、判斷說明題(正者在括號內打“√”,誤者在括號內打“×”,均需說明理由。每小題2分,共10分)得分 評閱人 1.8086CPU在讀/寫總線周期的T3狀態結束對READY線采樣,如果READY為低電平,則在T3與T4狀態之間插入等待狀態TW。(×)應改為:8086CPU在讀/寫總線周期的T3狀態開始對READY線采樣,如果READY為低電平,則在T3與T4狀態之間插入等待狀態TW。 2.在8253的方式控制字中,有一項計數鎖存操作,其作用是暫停計數器的計數。(×) 應改為:鎖存計數器的當前值到鎖存器,但不影響對計數器的計數工作。 3.8250的溢出錯誤指示CPU還未取走前一個數據,接收移位寄存器又將接收到的一個新數據送至輸入緩沖器。(√) 4.在8088系統(最小組態)中,執行指令”MOV [2000H],AX”需1個總線周期。(×) 應改為:需2個總線周期 5.DMA控制器8237A現行字節數寄存器的值減到0時,終止計數。(×)應改為:DMA控制器8237A現行字節數寄存器的值減到0,再由0減到0FFFFH時,終止計數。 四、簡答題(每小題5分,共20分)得分 評閱人 1.試述8250的數據接收時鐘RCLK使用16倍比特率的時鐘信號接收異步通信信號的原因以及接收過程。 答:主要是為了確定起始位避免傳輸線上的干擾。 其接收過程為:接收器檢測到串行數據輸入引腳SIN由高電平變低后,連續測試8個RCLK時鐘周期,若采樣到的都是低電平,則確認為起始位;若低電平的保持時間不足8個RCLK時鐘周期,則認為是傳輸線上的干擾。 2.8255A工作于方式2,采用中斷傳送,CPU如何區分輸入中斷還是輸出中斷? 答:CPU響應8255A的中斷請求后,在中斷服務程序的開始可以查詢8255A的狀態字,判斷~OBFA(PC7)和IBFA(PC5)位的狀態來區分是輸入中斷還是輸出中斷,并據此轉向相應的輸入或輸出操作。 3.用2K×4位RAM構成64KB的存儲系統,需要多少RAM芯片?需要多少位地址作為片外地址譯碼?設系統為20位地址線,采用全譯碼方式。答:64片。 9位。其中A16~A19固定,A10~A15譯碼形成組選信號。 4.請說明Intel8253各個計數通道中三個引腳信號CLK,OUT和GATE的功能。答:CLK為計數時鐘輸入引腳,為計數器提供計數脈沖。 GATE為門控信號輸入引腳,用于啟動或禁止計數器操作,如允許/禁止計數、啟 動/停止計數等。 OUT為輸出信號引腳以相應的電平或脈沖波形來指示計數的完成、定時時間到。 五、簡單應用題(每小題5分,共15分)得分 評閱人 1.Intel8253的通道0按方式3工作,時鐘CLK0的頻率為1兆,要求輸出方波的頻率為40KHz,采用BCD碼計數,設通道0的地址為PORT0,請對它寫入計數值。解:n(計數初值)=1MHz/40KHz=25 寫入計數值的程序段: MOV AL,25H OUT PORT0,AL 2.若8086系統采用單片8259A,其中斷類型碼為46H,則其中斷矢量表的地址指針是多少?這個中斷源應連向8259A的哪一個IR輸入端? 解:中斷矢量表的地址指針是46H×4=118H 應連向8259A的IR6第五篇:微機原理與接口技術試題及答案