微機原理、匯編語言與接口技術(shù) 周杰英張萍 習題答案匯總_第1頁
微機原理、匯編語言與接口技術(shù) 周杰英張萍 習題答案匯總_第2頁
微機原理、匯編語言與接口技術(shù) 周杰英張萍 習題答案匯總_第3頁
微機原理、匯編語言與接口技術(shù) 周杰英張萍 習題答案匯總_第4頁
微機原理、匯編語言與接口技術(shù) 周杰英張萍 習題答案匯總_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第1章 緒論習題與參考答案(部分)1. 把下列二進制數(shù)轉(zhuǎn)換成十進制數(shù)、十六進制數(shù)及bcd碼形式。(1) 10110010b =(2) 01011101.101b =解:(1) 10110010b = 178d = b2h = (0001 0111 1000)bcd(2) 01011101.101b = 93.625d = 5d.ah= (1001 0011.0110 0010 0101)bcd2. 把下列十進制數(shù)轉(zhuǎn)換成二進制數(shù)。(1) 100d =(2) 1000d =(3) 67.21d =解:(1) 100d = 01100100b(2) 1000d = 1111101000b(3) 67

2、.21d = 1000011.0011b3. 把下列十六進制數(shù)轉(zhuǎn)換成十進制數(shù)、二進制數(shù)。(1) 2b5h =(2) 4cd.a5h =解: (1) 2b5h = 693d = 0010 1011 0101b(2) 4cd.a5h = 1229.6445d = 0100 1100 1101.1010 0101 b4. 計算下列各式。(1) a7h+b8h =(2) e4h-a6h =解:(1) a7h+b8h = 15fh(2) e4h-a6h = 3eh5. 寫出下列十進制數(shù)的原碼、反碼和補碼。(1) +89(2) -37解:(1) +89 原碼、反碼和補碼為: 01011001b(2) -3

3、7 原碼 = 10100101 b -37 反碼 = 11011010 b-37 補碼 = 11011011 b6求下列用二進制補碼表示的十進制數(shù)(1)(01001101)補 = (2)(10110101)補 =解:(1)(01001101)補 = 77d(2)(10110101)補 = -75d 7請用8位二進制數(shù)寫出下列字符帶奇校驗的ascii碼。(1)c: 1000011(2)o: 1001111(3)m: 1001101(4)p: 1010000解:(1)c:0 1000011(2)o: 0 1001111(3)m:1 1001101(4)p: 1 10100008請用8位二進制數(shù)寫出

4、下列字符帶偶校驗的ascii碼。(1)+:0101011 (2)=: 0111101(3)#:0100011 (4): 0111110解:(1)+:0 0101011 (2)=: 1 0111101(3)#:1 0100011 (4): 1 01111109敘述cpu 中pc的作用。解:pc是cpu中的程序計數(shù)器,其作用是提供要執(zhí)行指令的地址。第2章 微處理器的結(jié)構(gòu)習題與參考答案1. 80868088 cpu 由哪兩大部分組成?請分別敘述它們的功能。解:8086/8088 cpu均由兩個獨立的邏輯單元組成,一個稱為總線接口單元biu(bus interface unit),另一個稱為執(zhí)行單元e

5、u(execution unit)??偩€接口單元biu取指令時,從存儲器指定地址取出指令送入指令隊列排隊;執(zhí)行指令時,根據(jù)eu命令對指定存儲器單元或i/o端口存取數(shù)據(jù)。執(zhí)行單元eu任務(wù)是執(zhí)行指令,進行全部算術(shù)邏輯運算、完全偏移地址的計算,向總線接口單元biu提供指令執(zhí)行結(jié)果的數(shù)據(jù)和偏移地址,并對通用寄存器和標志寄存器進行管理。2. 80868088與傳統(tǒng)的計算機相比在執(zhí)行指令方面有什么不同?這樣的設(shè)計思想有什么優(yōu)點?解:總線接口部分和執(zhí)行部分是分開的,每當eu執(zhí)行一條指令時,造成指令隊列空出2個或空出一個指令字節(jié)時 ,biu馬上從內(nèi)存中取出下面一條或幾條指令,以添滿他的指令隊列。這樣,一般情況

6、下,cpu在執(zhí)行完一條指令后,便可馬上執(zhí)行下一條指令,不像以往8位cpu那樣,執(zhí)行完一條指令后,需等待下一條指令。即eu從指令隊列中取指令、執(zhí)行指令和biu補充指令隊列的工作是同時進行的。這樣大大提高了cpu利用率,降低了系統(tǒng)都對存儲器速度的要求。 3. 狀態(tài)標志和控制標志有何不同?80868088的狀態(tài)標志和控制標志分別有哪些?解:8086/8088 cpu設(shè)立了一個兩字節(jié)的標志寄存器,共九個標志。其中標志位o、s、z、a、p、c是反映前一次涉及alu操作結(jié)果的狀態(tài)標志,d、i、t是控制cpu操作特征的控制標志。4. 80868088 cpu尋址存儲器時,什么是物理地址?邏輯地址?它們之間有

7、何關(guān)系?解:8086/8088系統(tǒng)中每個存儲單元都有一個物理地址,物理地址就是存儲單元的實際地址編碼。在cpu與存貯器之間進行任何信息交換時,需利用物理地址來查找所需要的訪問的存儲單元。邏輯地址由段地址和偏移地址兩部分組成。邏輯地址的表示格式為:段地址:偏移地址。知道了邏輯地址,可以求出它對應的物理地址:物理地址=段地址10h+偏移地址。5. 段寄存器cs1200h,指令指針寄存器ipff00h,此時,指令的物理地址為多少?指向這一物理地址的cs值和ip值是唯一的嗎?解:根據(jù):物理地址=段地址10h+偏移地址,指令的物理地址為21f00h。指向這一物理地址的cs值和ip值不唯一。6. 8086

8、 cpu中信號和a0信號是通過怎樣的組合解決存儲器和外設(shè)端口的讀寫的?這種組合決定了8086系統(tǒng)中存儲器偶地址體及奇地址體之間應該用什么信號區(qū)分?怎樣區(qū)分?解:若存取一個字節(jié)的數(shù)據(jù),總是用一個總線周期來完成該操作;若存取一個字,則依該字是規(guī)則字還是不規(guī)則字需用一個或兩個總線周期來完成。對規(guī)則字,只用一個總線周期來完成16位數(shù)據(jù)的傳送,而對于非規(guī)則字則用相鄰兩個總線周期來完成該字的存儲操作,先取其奇地址字節(jié)(即數(shù)據(jù)的低位字節(jié)),然后存取偶地址字節(jié)。在組成存儲系統(tǒng)時,總是偶地址單元的數(shù)據(jù)通過ad0ad7傳送,而奇地址單元的數(shù)據(jù)通過ad8ad15傳送,即通過總線高字節(jié)傳送。信號和a0信號控制存儲器讀

9、寫見下表:操作a0 使用的數(shù)據(jù)總線存取規(guī)則字 00ad15ad0傳送偶地址的一個字節(jié)10ad7ad0傳送奇地址的一個字節(jié)01ad15ad8存取非規(guī)則字 01ad15ad8(第一個總線周期)10ad7ad0(第二個總線周期)11為非法碼第3章 80x86指令系統(tǒng)習題與參考答案1、指出下列指令中操作數(shù)的尋址方式(8086系統(tǒng))。(1) movax,100(2) movax,100(3) movdl,bp+si(4) movbx,cx(5) movdx,si(6) mov1234hbx,ds(7) movdi+5678h,al(8) mov12bpdi,bh(9) popcx(10)movax,bx

10、+si+10解:目的操作數(shù)源操作數(shù)(1) movax,100寄存器尋址立即數(shù)尋址(2) movax,100寄存器尋址直接尋址(3) movdl,bp+si寄存器尋址基址變址尋址(4) movbx,cx寄存器間接尋址寄存器尋址(5) movdx,si寄存器尋址寄存器間接尋址(6) mov1234hbx,ds寄存器相對尋址寄存器尋址(7) movdi+5678h,al寄存器相對尋址寄存器尋址(8) mov12bpdi,bh相對基址變址尋址寄存器尋址(9) popcx寄存器尋址隱含為堆棧(10)movax,bx+si+10寄存器尋址相對基址變址尋址2、指出下列指令中操作數(shù)的尋址方式(80386系統(tǒng))

11、。(1) movebx+12h,ax(2) movebp+edi*2,ebx(3) movebx*4,bx(4) movedx,eax+esi*8-12h解:目的操作數(shù)源操作數(shù)(1)寄存器相對尋址寄存器尋址(2)基址比例變址尋址寄存器尋址(3)比例變址尋址寄存器尋址(4)寄存器尋址相對基址比例變址尋址3、指出以下指令中,哪些指令是非法的,并說明為什么(8086系統(tǒng))。(1) push1234h(2) movcs,ax(3) inax, 300(4) movax,dx+12(5) movbx,bx(6) movds,1000h(7) xchgal,al(8) moval,100h(9) movd

12、x,al(10)leabl,bx+5(11)leadx,bx(12)mov1000h,12h(13)addax,ds(14)sub0100h,byte ptr 0001(15)shlbl,2(16)shrcl,cl(17)mulal,bl(18)int400解:(1)非法,8086系統(tǒng)不允許push指令的操作數(shù)為立即數(shù);(2)非法,mov指令中cs不能作為目的操作數(shù);(3)非法,端口號大于0ffh;(4)非法,dx不能出現(xiàn)在中括號內(nèi);(5)合法;(6)非法,不能把立即數(shù)賦給段寄存器;(7)合法;(8)非法,源操作數(shù)大于0ffh,不能賦給8位寄存器al;(9)非法,源操作數(shù)是8位寄存器,目的操作

13、數(shù)卻是16位寄存器,不匹配;(10)非法,lea指令得到的是16位偏移量,但目的操作數(shù)是8位寄存器;(11)非法,lea指令的源操作數(shù)只能是存儲器操作數(shù);(12)非法,指令存在歧義,無法確定傳送的是字節(jié)還是字;(13)非法,段寄存器不能參與算術(shù)運算;(14)非法,源和目的寄存器不能同為存儲器操作數(shù);(15)非法,在8086系統(tǒng)中,移位次數(shù)大于1時需要將移位次數(shù)存放到cl中;(16)合法;(17)非法,在8086系統(tǒng)中mul指令沒有雙操作數(shù)的用法;(18)非法,中斷類型號大于0ffh。4、指出以下指令中,哪些指令是非法的,并說明為什么(80386系統(tǒng))。(1) movax,12ebxsi*16(

14、2) rcreax,10(3) push5678h(4) pop1000h(5) moveax+eax,eax(6) moval,esp+esp*2(7) movbl,ax+12(8) imulal,bl,12解:(1)非法,比例因子只能是1、2、4、8,不能是16;(2)合法;(3)合法;(4)非法,pop指令的目的操作數(shù)不能是立即數(shù);(5)合法;(6)非法,esp只能作為基址寄存器,不能作為變址寄存器;(7)非法,在386系統(tǒng)中ax不能作為基址寄存器,也不能作為變址寄存器;(8)合法。5、假設(shè)(ax)=1234h,(bx)=5678h,(sp)=1000h,指出執(zhí)行下面的程序段后,各相關(guān)寄

15、存器及堆棧段中的內(nèi)容。pushax ;(ax)=?,(bx)=?,(sp)=?,棧頂字節(jié)sp=?, 棧頂?shù)诙止?jié)sp+1=?pushbx ;(ax)=?,(bx)=?,(sp)=?,棧頂字節(jié)sp=?, 棧頂?shù)诙止?jié)sp+1=?popax ;(ax)=?,(bx)=?,(sp)=?,棧頂字節(jié)sp=?, 棧頂?shù)诙止?jié)sp+1=?解:(ax)=1234h,(bx)=5678h,(sp)=0ffeh,棧頂字節(jié)sp=34h,棧頂?shù)诙止?jié)sp+1=12h(ax)=1234h,(bx)=5678h,(sp)=0ffch,棧頂字節(jié)sp=78h,棧頂?shù)诙止?jié)sp+1=56h(ax)=5678h,(bx)=567

16、8h,(sp)=0ffeh,棧頂字節(jié)sp=34h,棧頂?shù)诙止?jié)sp+1=12h6、假設(shè)a、b、c、d、x、y為字節(jié)變量,aa、bb、yy為字變量,試利用算術(shù)運算指令編寫程序段,完成以下各算術(shù)運算題。(1)計算yya+b*c,其中a、b、c都是無符號數(shù);(2)計算(aa+bb)/(c-d),商賦給x,余數(shù)賦給y,其中aa、bb、c、d都是帶符號數(shù);(3)計算yy(a-b)*c,其中a、b、c都是未組合bcd碼。解:(1)moval,bmulcaddal,aadcah,0movyy,ax(2)movax,aaaddax,bbmovbl,csubbl,didivblmovx,almovy,ah(3)

17、moval,asubal,baasmulcaammov yy, ax7、利用移位指令編寫程序段,實現(xiàn)以下運算。(1)計算axax*10,其中ax為無符號數(shù);(2)32位帶符號數(shù)存放在寄存器dx和ax中,其中dx存放高16位,ax存放低16位計算(dx,ax)(dx,ax)*2。(3)32位帶符號數(shù)存放在寄存器dx和ax中,其中dx存放高16位,ax存放低16位計算(dx,ax)(dx,ax)/2。解:(1)shlax,1movbx,axshlax,1shlax,1addax,bx(2)salax,1rcldx,1(3)sardx,1rcrax,18、指出以下指令執(zhí)行后,標志寄存器of、sf、z

18、f、af、pf、cf的狀態(tài)。(1)(al)=0ffh,(bl)=20h,執(zhí)行指令:addal,bl(2)(al)=01h, (bl)=02h,執(zhí)行指令:cmpal,bl(3)(al)=0ffh,執(zhí)行指令:inc al(4)(al)=0,執(zhí)行指令:decal(5)(al)=0f0h,(bl)=04h,執(zhí)行指令:imulbl(6)(ax)=1f0h,(bl)=08h,執(zhí)行指令:divbl(7)(al)=12h, (bl)=34h,執(zhí)行指令:testal,bl(8)(al)=98h,執(zhí)行指令:salal,1解:ofsfzfafpfcf(1)000001(2)010111(3)00111(4)0101

19、1(5)00(6)(7)00000(8)10011注:0表示結(jié)果為0,1表示結(jié)果為1,表示結(jié)果不變,表示結(jié)果不確定。9、在8086系統(tǒng)下,編寫實現(xiàn)如下功能的程序段:(1)從地址為80h的端口中讀入一個字節(jié);(2)如果該字節(jié)最高位為“1”,則將字節(jié)0ffh送到地址為81h的端口中,并退出程序;(3)如果該字節(jié)最高位為“0”,則轉(zhuǎn)向第(1)步,繼續(xù)循環(huán)掃描。解: 參考程序段:again:inal, 80htestal, 80hjzagainmoval, 0ffhout81h, al10、我們知道,mov指令并不能直接修改cs、ip的值,但事實上,我們還可以通過其他方法來達到修改cs、ip的目的。試

20、編寫一個程序段,使該程序段運行后,(cs)=0100h,(ip)=0000h。解:方法一、利用段間返回指令retf:movax,0100hpushax;段基址入棧movax,0pushax;偏移量入棧retf方法二、利用jmp指令實現(xiàn)段間跳轉(zhuǎn),假設(shè)addr為雙字變量:movword ptr addr,0;word ptr addr偏移量movword ptr addr+2, 0100h;word ptr addr+2段基址jmpdword ptr addr第4章 匯編語言程序設(shè)計習題與參考答案1、指出以下數(shù)據(jù)定義偽指令所分配的字節(jié)數(shù)(8086系統(tǒng))。(1)data1db10,?,a(2)dat

21、a2dw10 dup(2,3 dup(?),1)(3)data3dbhello,world!,$(4)data4dwdata4解:(1)3字節(jié);(2)100字節(jié);(3)13字節(jié);(4)2字節(jié)。2、指出以下數(shù)據(jù)定義偽指令所分配的字節(jié)數(shù)(80386系統(tǒng))。(1)data1df12,34,56(2)data2dfdata2(3)data3dq0,10 dup(?)(4)data4dt0,1,2解:(1)18字節(jié);(3)6字節(jié);(3)88字節(jié);(4)30字節(jié)。3、指出以下指令中哪些是無效的,并說明原因。(1)addrdb$(2)datadbf0h,12h(3)1_datadw1234h(4)vardw

22、var1;var1為一個字節(jié)變量(5)movax,10-var1;var1為一個字變量(6)movbx,var2*2+1;var2為一個字變量解:(1)非法,地址計數(shù)器$是32位數(shù);(2)非法,以字母開頭的16進制數(shù)應在前面加“0”,即應為“0f0h”;(3)非法,變量名非法,不能以數(shù)字開頭;(4)合法;(5)非法,地址表達式不能是“常數(shù)-地址”;(6)非法,地址表達式不能出現(xiàn)乘法。4、假設(shè)已定義數(shù)據(jù)段如下:datasegmentorg100hdata1db10 dup(1,2,3)data2dwdata1,$dataends且段寄存器ds已初始化為該數(shù)據(jù)段的段基址(假設(shè)段基址為1234h)。

23、請指出以下指令執(zhí)行后,相應的寄存器中的內(nèi)容。(1)movax,word ptr data1;(ax)=?(2)movbx,data2;(bx)=?(3)movcx,data2+2;(cx)=?(4)movdx,offsetdata2;(dx)=?(5)movsi,segdata1;(si)=?(6)movdi,lengthdata1;(di)=?(7)movsp,type data1;(sp)=?(8)movbp,size data2;(bp)=?解:(1)(ax)=0201h;(2)(bx)=0100h;(3)(cx)=0120h;(4)(dx)=011eh;(5)(si)=1234h;(6

24、)(di)=000ah;(7)(sp)=0001h;(8)(bp)=0002h。5、在8086系統(tǒng)下,編寫完整程序,實現(xiàn)從鍵盤上輸入8位二進制數(shù),從顯示器上顯示相應的16進制數(shù),例如從鍵盤上輸入“00010010”,應在顯示器上顯示“12h”。解:參考程序:datasegmentmsg1dbinput binary number(esc to exit):,$msg2db0ah,0dh,input error!,0ah,0dh,$dataendsoutputmacroasc;定義輸出一個字符的宏movdl, ascmovah, 2int21hendmcodesegmentassumecs:co

25、de, ds:datamainprocfarpushdsmovax, 0pushaxmovax, datamovds, axagain:leadx, msg1movah, 9int21h;提示輸入信息movcx, 8;輸入8位二進制數(shù)movbl, 0l:movah, 1int21hshlbl, 1cmpal, 1bh;esc鍵退出jzdonecmpal, 0;輸入“0”jznextcmpal, 1;輸入“1”jnzerror;輸入其他則出錯incblnext:looploutput0ahoutput0dhpushbxmovcl, 4shrbl, clcalltran;顯示高4位對應的16進制數(shù)

26、popbxandbl, 0fhcalltran;顯示低4位對應的16進制數(shù)outputhoutput0ahoutput0dhjmpagainerror:leadx, msg2movah, 9int21hjmpagaindone:retmainendptranprocfarcmpbl, 0ahjbbelowaddbl, 7below:addbl, 30houtputblrettranendpcodeendsendmain6、在8086系統(tǒng)下,編寫完整程序,實現(xiàn)從鍵盤上輸入兩個4位十進制數(shù),從顯示器上顯示這兩個數(shù)之和,例如輸入“1234”、“5678”,應在顯示器上顯示“6912”。解:參考程序:

27、datasegmentmsg1db input the first number(esc to exit):,$msg2db input the second number(esc to exit):,$msg3db0ah,0dh,input error!input again:,$dataendsoutputmacroasc;定義輸出一個字符的宏movdl, ascmovah, 2int21hendmcodesegmentassumecs:code, ds:datamain:movax, datamovds, axagain:leadx, msg1movah, 9int21h;提示輸入第一個

28、數(shù)callinput;輸入過程pushbxoutput0ahoutput0dhleadx, msg2 movah, 9int21h;提示輸入第二個數(shù)callinput;輸入過程output0ahoutput0dhpopax;實現(xiàn)兩個4位組合bcd碼相加addal, bl;低8位相加daa;校正movcl, al;保存至cladcah, bh;高8位相加moval, ah;移至aldaa;校正movah, almoval, clmovbx, ax;最后結(jié)果放在bx中jncnextoutput 1;如果相加結(jié)果大于9999,則顯示進位“1”next:pushbxmovcl, 4shrbh, cla

29、ddbh, 30houtputbh;顯示千位數(shù)popbxpushbxandbh, 0fhaddbh, 30houtputbh;顯示百位數(shù)popbxpushbxmovcl, 4shrbl, claddbl, 30houtputbl;顯示十位數(shù)popbxandbl, 0fhaddbl, 30houtputbl;顯示個位數(shù)output0ahoutput0dhjmpagaininputprocfar;輸入一個4位十進制數(shù)的過程begin:movcx, 4movbx, 0l:shlbx, 1shlbx, 1shlbx, 1shlbx, 1;bx的值乘以16movah, 1int21h;輸入cmpal,

30、1bh;esc鍵退出jzdonecmpal, 0jberror;非數(shù)字,出錯cmpal, 9jaerror;非數(shù)字,出錯subal, 30hxorah, ahaddbx, ax;將輸入加到bx中l(wèi)ooplreterror:leadx, msg3movah, 9int21hjmpbegindone:movah, 4chint21hinputendpcodeendsendmain7、在8086系統(tǒng)下,編寫完整程序,實現(xiàn)兩個32位帶符號數(shù)相乘。假設(shè)被乘數(shù)存放在以字變量mul1開始的連續(xù)4個字節(jié)中,乘數(shù)存放在以字變量mul2開始的連續(xù)4個字節(jié)中中,相乘結(jié)果存放在以字變量res開始的連續(xù)8個字節(jié)中。解:

31、參考程序:datasegmentmul1dw0ffffh,0ffffh;被乘數(shù)mul2dw5678h,1234h;乘數(shù)resdw4 dup(0);結(jié)果dataendscodesegmentassumecs:code, ds:datamainprocfarpushdsmovax, 0pushaxmovax, datamovds, axmovcx, mul1movbp, mul1+2movsi, mul2movdi, mul2+2testbp, 8000h;被乘數(shù)是否為負數(shù)jznext1notbp;為負數(shù),則取反加1notcxaddcx, 1adcbp, 0next1:testdi, 8000h;

32、乘數(shù)是否為負數(shù)jznext2notsi;為負數(shù),則取反加1notdiaddsi, 1adcdi, 0next2:movax, si;相乘過程mulcxmovres, axmovres+2, dxmovax, simulbpaddres+2, axadcres+4, dxmovax, dimulcxaddres+2, axadcres+4, dxmovax, dimulbpaddres+4, axadcres+6, dxmovax, mul1+2xorax, mul2+2;判斷被乘數(shù)和乘數(shù)是否同號jnsdone;同號,則結(jié)果為正數(shù),無須修改結(jié)果notres;不同號,則結(jié)果為負數(shù),須取反加1not

33、res+2notres+4notres+6addres, 1adcres+2, 0adcres+4, 0adcres+6, 0done:retmainendpcodeendsendmain8、在8086系統(tǒng)下,編寫完整程序,找出字節(jié)數(shù)組array中的最大值和最小值。假設(shè)array的長度為100個字節(jié),每個字節(jié)為一個無符號數(shù),程序執(zhí)行后最大值將存放到字節(jié)變量max中,最小值則存放到字節(jié)變量min中。解:參考程序:datasegmentarraydb100 dup(?);字節(jié)數(shù)組maxdb?;最大值mindb?;最小值dataendscodesegmentassumecs:code, ds:dat

34、amainprocfarpushdsmovax, 0pushaxmovax, datamovds, axleasi, arraycldmovbh, 0;存放臨時最大值的寄存器movbl, 0ffh;存放臨時最小值的寄存器movcx, 100again:lodsbcmpal, bhjnanext1movbh, al;如果當前數(shù)值比臨時最大值大,則代替next1:cmpal, bljnbnext2movbl, al;如果當前數(shù)值比臨時最小值小,則代替next2:loopagainmovmax, bhmovmin, blretmainendpcodeendsendmain9、在8086系統(tǒng)下,編寫完

35、整程序,將字節(jié)數(shù)組array中的所有數(shù)據(jù)往高地址的方向移動一位,即原來存放在array中的字節(jié)移動到array+1中,原來存放在array+1中的字節(jié)移動到array+2中,依此類推。假設(shè)array的長度為100個字節(jié)。解:可利用movsb指令實現(xiàn)移位,但應該注意,必須從串尾開始移動,因為假如直接從串頭開始,將串頭移到第二個數(shù),那么第二個數(shù)將被覆蓋。為使程序能從串尾開始移動,可令方向標志位df=1。參考程序:datasegmentarraydb100 dup(?), ?dataendscodesegmentassumecs:code, ds:datamainprocfarpushdsmovax

36、, 0pushaxmovax, datamovds, axmoves, axleasi, array+99;si指向源串尾leadi, array+100;di指向新串尾std;df=1,串尾先移動movcx, 100repmovsb;循環(huán)移動retmainendpcodeendsendmain10、在8086系統(tǒng)下,編寫在長字符串l_str中查找短字符串s_str的完整程序,如果找到匹配的字符串,則將字節(jié)變量res置0ffh,否則置0。例如,在字符串“ababcd”中可找到字符串“abc”,則res=0ffh。解:參考程序:datasegmentl_strdbabdababcd;長串l_lt

37、hdw$-l_str;長串長度s_strdb abc;短串s_lthdw$-s_str;短串長度resdb?;存放結(jié)果dataendscodesegmentassumecs:code, ds:datamainprocfarpushdsmovax, 0pushaxmovax, datamovds, axmoves, axleasi, l_strleadi, s_strcldmovcx, l_lthsubcx, s_lthinccx;作串比較的次數(shù)again:callcomp;進行串比較incsiloopagainmovres, 0retmainendpcompprocfarpushcxpushs

38、ipushdimovcx, s_lthrepzcmpsbjzyes;如果兩個串相同,則說明找到popdipopsipopcxretyes:movres, 0ffhmovah, 4ch int21hcompendpcodeendsendmain11、在80386系統(tǒng)下,編程實現(xiàn)兩個64位無符號數(shù)相乘。解:參考程序:.386. modelsmall.datamul1dd3456789ah, 12345678h;被乘數(shù)mul2dd789abcdeh, 3456789ah;乘數(shù)resdd4 dup(0);存放128位結(jié)果,初始化為0.codemain:movax, datamovds, axmovea

39、x, mul2mulmul1movres, eaxmovres+4, edxmoveax, mul2mulmul1+4addres+4, eaxadcres+8, edxmoveax, mul2+4mulmul1addres+4, eaxadcres+8, edxmoveax, mul2+4mulmul1+4addres+8, eaxadcres+12, edxmovah, 4chint21hendmain第5章 微機總線技術(shù)習題與參考答案1. 總線周期的含義是什么?80888086基本總線周期由幾個時鐘周期組成?解:總線周期是指cpu從存儲器或io端口存取一個字節(jié)所需的時間。80888086

40、基本總線周期由4個時鐘周期組成。2. 從引腳信號來看,8086和8088有什么不同?解:從引腳信號來看,8086的地址引腳與數(shù)據(jù)引腳復用,引腳為ad0ad15,而8088同樣也采用了地址引腳與數(shù)據(jù)引腳復用,但引腳為ad0ad7。3. 試說明80868088工作在最小方式下和最大方式下系統(tǒng)基本配置的差別。在最大組態(tài)下,80868088的外圍電路由哪些器件組成?它們的作用是什么?解:80868088工作在最大方式下時,需要使用8288總線控制器,但是工作在最小方式下時不需要使用。80868088工作在最大方式下時,外圍電路包括8284時鐘發(fā)生器、8286數(shù)據(jù)發(fā)送接收器、8282地址鎖存器以及828

41、8總線控制器。8284將晶體振蕩器的振蕩頻率分頻,向80868088以及計算機系統(tǒng)提供符合定時要求的時鐘信號、準備好信號和系統(tǒng)復位信號。8286數(shù)據(jù)發(fā)送接收器增加數(shù)據(jù)總線的驅(qū)動能力。8282地址鎖存器用來鎖存cpu地址信號,特別是地址數(shù)據(jù)線、地址狀態(tài)線上出現(xiàn)的地址信號。8288根據(jù)cpu要執(zhí)行的指令提供的狀態(tài)信號建立控制時序,輸出讀寫控制命令。4. 80868088數(shù)據(jù)信號與地址信號是共用引腳的,怎樣把這兩種不同的信號分離出來?解:80868088工作時,對數(shù)據(jù)信號與地址信號的公用引腳進行分時復用,采用8282地址鎖存器來分離數(shù)據(jù)與地址信號。在t1狀態(tài)時,cpu提供ale地址鎖存允許信號,將地

42、址信號鎖存到8282地址鎖存器。然后,在t2、t3、tw狀態(tài),用作傳送數(shù)據(jù)信號。5. 在總線周期的t1、t2、t3、t4狀態(tài),cpu分別執(zhí)行什么動作?什么情況下需要插入等待狀態(tài)tw?tw在哪兒插入?怎樣插入?解:cpu在t1、t2、t3、t4 這四個狀態(tài)完成一個總線周期。在t1狀態(tài),把地址信息從地址線a19a16,a15a8和ad7ad0上輸出,且立即發(fā)出地址鎖存信號ale,把在a19a16上出現(xiàn)的高4位地址和在ad15ad0(8088則是ad7ad0)上出現(xiàn)的地址,在外部地址鎖存器上鎖存。在t2狀態(tài),cpu發(fā)送讀寫等控制命令。在t3、t4狀態(tài),cpu發(fā)送或接收數(shù)據(jù),并在t4狀態(tài)結(jié)束此總線周期

43、。當外部存儲器或i/o端口的時序不能與cpu的時序相配合時,就需要插入tw周期。因此,在cpu中設(shè)計了一條準備就緒ready輸入線,即存儲器或i/o端口輸給cpu的狀態(tài)線。cpu在t3采樣ready線,若為高電平,則在t3狀態(tài)后進入t4狀態(tài)。若存儲器或i/o端口來不及在t4狀態(tài)的前沿把數(shù)據(jù)準備好,則當cpu在t3狀態(tài)采樣時應使ready線為低電平,并在t3狀態(tài)后插入一個等待狀態(tài)tw。6. 80868088在最大組態(tài)下的存儲器讀/寫周期和i/o周期中,8288發(fā)出的控制信號為什么能夠和80868088發(fā)出的地址信號相配合?解:8288總線控制器根據(jù)cpu要執(zhí)行的指令提供的狀態(tài)信號建立控制時序,輸

44、出讀寫控制命令。8288總線控制器接收80868088的狀態(tài)信號,以確定cpu執(zhí)行何種操作,發(fā)出相應的控制命令信號,以控制系統(tǒng)中有關(guān)部件的工作。7. 在t1狀態(tài)下,80888086cpu數(shù)據(jù)地址線上是什么信息?用哪個信號可將此信息鎖存起來?數(shù)據(jù)信息是什么時候送出的?在最大組態(tài)下,怎樣使系統(tǒng)地址總線和系統(tǒng)數(shù)據(jù)總線上同時分別存在地址信息和數(shù)據(jù)信息?解:在t1狀態(tài)下,80888086cpu數(shù)據(jù)地址線上是地址信息。用ale信號可將地址信息鎖存起來。數(shù)據(jù)信息在t2開始以后送出。在最大組態(tài)下,ad15ad0在8288發(fā)出的ale下降沿控制下將地址信息鎖存后送系統(tǒng)地址總線a15a0(對8088則為ad7ad

45、0)。a19s6a16s3 經(jīng)ale下降沿控制鎖存后送系統(tǒng)地址總線a19a16;cpu的ad0ad7在8288發(fā)出的 (數(shù)據(jù)收發(fā)控制信號)和den(數(shù)據(jù)允許信號)信號控制下,經(jīng)雙向總線驅(qū)動器連接到系統(tǒng)數(shù)據(jù)總線d7d0,這樣,實現(xiàn)了地址和數(shù)據(jù)及狀態(tài)信號的分離,使地址信號和數(shù)據(jù)信號同時分別出現(xiàn)在系統(tǒng)地址總線和數(shù)據(jù)總線上。8. reset信號來到后,80868088系統(tǒng)的cs和ip分別等于多少?解:csffffh,ip0000h9. 在中斷響應過程中,80868088往8259a發(fā)的兩個信號分別起什么作用?解:cpu在每一個中斷響應地機器周期,都給出中斷響應信號。在第一個機器周期,使ad0ad7浮空

46、。在第二個機器周期,被響應地外設(shè)(或接口片子)應向數(shù)據(jù)線上輸送一個字節(jié)的中斷向量類型,cpu把它讀入后,就可以在中斷向量表上找到該設(shè)備的服務(wù)程序的入口地址,轉(zhuǎn)入中斷服務(wù)。10. 總線保持過程是怎樣產(chǎn)生和結(jié)束的?畫出時序圖并說明。解:總線保持過程包括總線保持請求和保持響應操作。當一個系統(tǒng)中具有多個總線主模塊時,除cpu之外的其它總線主模塊為了獲得對總線的控制,需向cpu發(fā)出總線保持請求信號,當cpu接到此請求信號,并在同意讓出總線時,就向發(fā)該請求的主模塊發(fā)響應信號。具體過程是:在最小模式下,cpu在每個時鐘周期的上升沿處,對hold引腳進行檢測,若hold已變?yōu)楦唠娖?有效狀態(tài)),則在總線周期的

47、t4狀態(tài)或空閑狀態(tài)ti之后的下一個狀態(tài),由hlda引腳發(fā)出響應信號。同時cpu將把對總線的控制權(quán)轉(zhuǎn)讓給發(fā)出hold的設(shè)備,到發(fā)出hold信號的設(shè)備再將hold變?yōu)榈碗娖?無效)時,cpu才又收回總線控制權(quán)。時序圖如下:第6章存儲系統(tǒng)習題與參考答案1 簡述pc中存儲器分級結(jié)構(gòu)的組成。cache是為了解決什么問題引入的,虛擬存儲器又是為解決什么問題而引入的?答:pc中存儲器分級結(jié)構(gòu)的組成中包括:cpu中的寄存器、cache、主存和輔存。引入cache,可以解決主存的速度跟不上cpu的速度的問題,可以提高cpu訪問主存的速度。引入虛擬存儲器可以解決主存容量不夠大時的裝載大程序遇到的問題。在虛擬存儲技

48、術(shù)中,拿出一部分硬盤空間來充當內(nèi)存使用,當內(nèi)存占用完時,計算機就會自動調(diào)用硬盤來充當內(nèi)存,以緩解內(nèi)存使用的壓力。2、半導體存儲器可分為哪幾個類型?試分別說明它們各自的特點。解:從存取方式來分,有讀寫存儲器ram和只讀存儲器rom。ram也稱為隨機存取存儲器,cpu在執(zhí)行程序的過程中能對它進行讀出和寫入操作。在ram中可分為雙極型(bipolar)和mos型ram兩大類。雙極型ram具有很高的存取速度,但是雙極型ram的集成度低,單片容量小,功耗大,成本高。mos型ram具有功耗低、集成度高、單片容量大的特點,但存取速度則較慢。mos型ram又可以分為靜態(tài)ram和動態(tài)ram兩種。rom器件的功能

49、是只許讀出,不許寫入,一旦有了信息,就不能輕易改變,也不會在掉電時丟失,所以它只能用在不需要經(jīng)常對信息進行修改和寫入的地方。rom可以分為4種:掩膜rom、可編程rom、可擦除、可編程rom和可電擦除的、可編程rom等。3、列出半導體存儲器的主要性能指標。解:半導體存儲器的性能指標有:存儲芯片容量、存取速度、可靠性、價格、易失性、集成度、功耗和電源種類等。4、試比較sram和dram的優(yōu)缺點。解:sram用由6管構(gòu)成的觸發(fā)器作為基本電路,不需要刷新電路,而且易于用電池作后備電源。dram是利用電容的記憶功能保存信息,由于電容存在漏電電流,即使電源不掉電,電荷會隨著電容放電而泄露,從而導致信息丟

50、失,所以需要刷新。與sram相比,dram的主要優(yōu)點是集成度高、功耗小、價格低。而不足之處是與cpu的接口電路比較復雜,有兩個問題要解決:一個是上面所講的刷新問題,另一個是地址信號的輸入問題。dram一般用于組成大容量的內(nèi)存系統(tǒng)。5、若某微機系統(tǒng)的系統(tǒng)ram存儲器由四個模塊組成,每個模塊的容量為128k字節(jié),若四個模塊的地址是連續(xù)的,最低地址為00000h,試指出每個模塊的首末地址。解:第一個模塊:00000h1ffffh;第二個模塊:20000h3ffffh;第三個模塊:40000h5ffffh;第四個模塊:60000h7ffffh。6、對于下列芯片,它們的片內(nèi)地址線各有多少根?若分別用以下

溫馨提示

  • 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

提交評論