微機(jī)原理陳繼紅版部分答案_第1頁
微機(jī)原理陳繼紅版部分答案_第2頁
微機(jī)原理陳繼紅版部分答案_第3頁
微機(jī)原理陳繼紅版部分答案_第4頁
微機(jī)原理陳繼紅版部分答案_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

微機(jī)原理陳繼紅版部分答案第三章8086/8088指令系統(tǒng)和尋址方式習(xí)題答案3.1總結(jié)計(jì)算機(jī)中十進(jìn)制、二進(jìn)制、八進(jìn)制及十六進(jìn)制數(shù)的書寫形式。123D、0AFH、77Q、1001110B分別表示什么計(jì)數(shù)制的數(shù)?答案:123D、0AFH、77Q、1001110B分別表示十進(jìn)制、十六進(jìn)制、八進(jìn)制、二進(jìn)制。3.2字長為8位、16位二進(jìn)制數(shù)的原碼、補(bǔ)碼表示的最大數(shù)和最小數(shù)分別是什么?答案:8位原碼表示的最大數(shù):(27-1)、8位補(bǔ)碼表示的最大數(shù):(27-1)、8位原碼表示的最小數(shù):-(27-1)、8位補(bǔ)碼表示的最小數(shù)-27。16位原碼表示的最大數(shù):(215-1)、16位補(bǔ)碼表示的最大數(shù):(215-1)、16位原碼表示的最小數(shù):-(215-1)、16位補(bǔ)碼表示的最小數(shù)-215。3.3把下列十進(jìn)制數(shù)分別轉(zhuǎn)換為二進(jìn)制數(shù)和十六進(jìn)制數(shù)。(1)125(2)255(3)72(4)5090答案:(1)125二進(jìn)制數(shù):01111101B;十六進(jìn)制數(shù):7DH。(2)255二進(jìn)制數(shù):11111111B;十六進(jìn)制數(shù):0FFH。(3)72二進(jìn)制數(shù):01001000B;十六進(jìn)制數(shù):48H。(4)5090二進(jìn)制數(shù):0001001111100010B;十六進(jìn)制數(shù):13E2H。3.4把下列無符號二進(jìn)制數(shù)分別轉(zhuǎn)換為十進(jìn)制數(shù)和十六進(jìn)制數(shù)。(1)11110000(2)10000000(3)11111111(4)01010101答案:(1)11110000十進(jìn)制數(shù):240D;十六進(jìn)制數(shù):0F0H。(2)10000000十進(jìn)制數(shù):128D;十六進(jìn)制數(shù):80H。(3)11111111十進(jìn)制數(shù):255D;十六進(jìn)制數(shù):0FFH。(4)01010101十進(jìn)制數(shù):85D;十六進(jìn)制數(shù):55H。3.5把下列無符號十六進(jìn)制數(shù)分別轉(zhuǎn)換為十進(jìn)制數(shù)和二進(jìn)制數(shù)。(1)FF(2)ABCD(3)123(4)FFFF答案:(1)FF十進(jìn)制數(shù):255D;二進(jìn)制數(shù);11111111B。(2)ABCD十進(jìn)制數(shù):43981D;二進(jìn)制數(shù);1010101111001101B。(3)123十進(jìn)制數(shù):291D;二進(jìn)制數(shù);000100100011B。(4)FFFF十進(jìn)制數(shù):65535D;二進(jìn)制數(shù);1111111111111111B。3.6分別用8位二進(jìn)制數(shù)和16位二進(jìn)制數(shù)寫出下列十進(jìn)制數(shù)的原碼和補(bǔ)碼。(1)16(2)-16(3)+0(4)-0(5)127(6)-128(7)121(8)-9答案:(1)168位二進(jìn)制數(shù)原碼:00010000補(bǔ)碼:00010000;16位二進(jìn)制數(shù)原碼:0000000000010000補(bǔ)碼:0000000000010000。(2)-168位二進(jìn)制數(shù)原碼:10010000補(bǔ)碼:11110000;16位二進(jìn)制數(shù)原碼:1000000000010000補(bǔ)碼:1111111111110000。(3)+08位二進(jìn)制數(shù)原碼:00000000補(bǔ)碼:00000000;16位二進(jìn)制數(shù)原碼:0000000000000000補(bǔ)碼:0000000000000000。(4)-08位二進(jìn)制數(shù)原碼:10000000補(bǔ)碼:00000000;16位二進(jìn)制數(shù)原碼:1000000000000000補(bǔ)碼:0000000000000000。(5)1278位二進(jìn)制數(shù)原碼:01111111補(bǔ)碼:01111111;16位二進(jìn)制數(shù)原碼:0000000001111111補(bǔ)碼:0000000001111111。(6)-1288位二進(jìn)制數(shù)原碼:無補(bǔ)碼:10000000;16位二進(jìn)制數(shù)原碼:1000000010000000補(bǔ)碼:1111111110000000。(7)1218位二進(jìn)制數(shù)原碼:01111001補(bǔ)碼:01111001;16位二進(jìn)制數(shù)原碼:0000000001111001補(bǔ)碼:0000000001111001。(8)-98位二進(jìn)制數(shù)原碼:10001001補(bǔ)碼:11110111;16位二進(jìn)制數(shù)原碼:1000000010001001補(bǔ)碼:1111111111110111。3.7試實(shí)現(xiàn)下列轉(zhuǎn)換。(1)[X]原=10111110B,求[X]補(bǔ)(2)[X]補(bǔ)=11110011B,求[-X]補(bǔ)(3)[X]補(bǔ)=10111110B,求[X]原(4)[X]補(bǔ)=10111110B,求[X]反答案:(1)11000010(2)00001101(3)11000010(4)101111013.8假設(shè)兩個二進(jìn)制數(shù)A=01101010,B=10001100,試比較它們的大小。(1)A、B兩數(shù)均為帶符號的補(bǔ)碼數(shù)(2)A、B兩數(shù)均為無符號數(shù)答案:(1)A、B兩數(shù)均為帶符號的補(bǔ)碼數(shù):A>B(2)A、B兩數(shù)均為無符號數(shù):A<B3.9下列各數(shù)均為十進(jìn)制數(shù),請用8位二進(jìn)制數(shù)補(bǔ)碼計(jì)算下列各題,用十六進(jìn)制數(shù)表示其運(yùn)算結(jié)果,并判斷是否溢出,驗(yàn)證教材中所給的判斷依據(jù)。(1)90+71(2)90-71(3)-90-71(4)-90+71(5)-90-(-71)答案:(1)90+71=161>127溢出[90]補(bǔ)+[71]補(bǔ)=01011010+01000111=10100001=0A1H=[-91]補(bǔ)(2)90-71=19<127無溢出[90]補(bǔ)+[-71]補(bǔ)=01011010+10111001=00010011=13H=[19]補(bǔ)(3)-90-71=-161<-128溢出[-90]補(bǔ)+[-71]補(bǔ)=10100110+10111001=01011111=5FH=[95]補(bǔ)(4)-90+71=-19>-128無溢出[-90]補(bǔ)+[71]補(bǔ)=10100110+01000111=11101101=0EDH=[-19]補(bǔ)(5)-90-(-71)=-19>-128無溢出[-90]補(bǔ)+[71]補(bǔ)=10100110+01000111=11101101=0EDH=[-19]補(bǔ)3.10完成下列8位二進(jìn)制數(shù)的邏輯運(yùn)算。(1)11001100∧10101010(2)11001100∨10101010(3)11001100⊕10101010(4)10101100∧10101100(5)10101100⊕10101100(6)10101100∨10101100(7)10101100答案:(1)11001100∧10101010=10001000(2)11001100∨10101010=11101110(3)11001100⊕10101010=01100110(4)10101100∧10101100=10101100(5)10101100⊕10101100=00000000(6)10101100∨10101100=10101100(7)10101100=010100113.11以下均為2位十六進(jìn)制數(shù),試說明當(dāng)把它們分別看作無符號數(shù)或字符的ASCII碼值,它們所表示的十進(jìn)制數(shù)和字符是什么?(1)30H(2)39H(3)42H(4)62H(5)20H(6)7H答案:(1)30H所表示的十進(jìn)制數(shù)是:48D;字符是:0。(2)39H所表示的十進(jìn)制數(shù)是:57D;字符是:9。(3)42H所表示的十進(jìn)制數(shù)是:66D;字符是:B。(4)62H所表示的十進(jìn)制數(shù)是:98D;字符是:b。(5)20H所表示的十進(jìn)制數(shù)是:32D;字符是:sp空格。(6)7H所表示的十進(jìn)制數(shù)是:7D;字符是:BEL報警。3.12把以下十進(jìn)制數(shù)分別以壓縮BCD碼、非壓縮BCD碼、ASCII碼串表示。(1)2(2)78答案:(1)2壓縮BCD碼:0010、非壓縮BCD碼:00000010、ASCII碼:0110010(2)78壓縮BCD碼:01111000、非壓縮BCD碼:0000011100001000、ASCII碼:01101110111003.13設(shè)浮點(diǎn)數(shù)格式如下圖所示:階碼、尾數(shù)均以補(bǔ)碼表示,基數(shù)為2,求:+25.6和-361.25的規(guī)格化浮點(diǎn)數(shù)。答案:1)+25.6D=11001.1001100110B=0.110011001100110×25+5=0101B,補(bǔ)碼:0101,尾數(shù):[0.110011001100110]補(bǔ)=0.110011001100110規(guī)格化浮點(diǎn)數(shù):0000010101100110011001102)-361.25D=-101101001.01B=29×(-0.101101001010000)+9=1001,補(bǔ)碼:1001,尾數(shù):[-0.101101001010000]補(bǔ)=1.010010110110000規(guī)格化浮點(diǎn)數(shù):0000100110100101101100003.14設(shè)某計(jì)算機(jī)用12位表示一個浮點(diǎn)數(shù),該浮點(diǎn)數(shù)從高位到低位依次為:階符1位、階碼3位(原碼表示)、數(shù)符1位、尾數(shù)7位(補(bǔ)碼表示),則010010110011的真值是多少?答案:-9.6253.158086匯編語言指令的尋址方式有哪幾類?哪種尋址方式的指令執(zhí)行速度最快?解:尋址方式分為:立即數(shù)尋址方式、寄存器操作數(shù)尋址方式和存儲器操作數(shù)尋址方式。其中,寄存器操作數(shù)尋址方式的指令執(zhí)行速度最快。3.16在直接尋址方式中,一般只指出操作數(shù)的偏移地址,那么,段地址如何確定?如果要用某個段寄存器指出段地址,指令中應(yīng)該如何表示?解:默認(rèn)的數(shù)據(jù)訪問,操作數(shù)在DS段;堆棧操作在SS段;串操作源操作數(shù)(SI)在DS段,目的操作數(shù)(DI)在ES段;用BP作為指針在SS段。如果要顯式地指定段地址,則在操作數(shù)中規(guī)定段寄存器。例如:MOVAX,ES:(BX+10H)3.178086系統(tǒng)中,設(shè)DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,BP=0100H,VAR的偏移量為0600H,請指出下列指令的目標(biāo)操作數(shù)的尋址方式,若目標(biāo)操作數(shù)為存儲器操作數(shù),計(jì)算它們的物理地址。(1)MOVBX,12;目標(biāo)操作數(shù)為寄存器尋址(2)MOV[BX],12;目標(biāo)操作數(shù)為寄存器間址PA=10300H(3)MOVES:[SI],AX;目標(biāo)操作數(shù)為寄存器間址PA=20200H(4)MOVVAR,8;目標(biāo)操作數(shù)為存儲器直接尋址PA=10600H(5)MOV[BX][SI],AX;目標(biāo)操作數(shù)為基址加變址尋址PA=10500H(6)MOV6[BP][SI],AL;目標(biāo)操作數(shù)為相對的基址加變址尋址PA=12306H(7)MOV[1000H],DX;目標(biāo)操作數(shù)為存儲器直接尋址PA=11000H(8)MOV6[BX],CX;目標(biāo)操作數(shù)為寄存器相對尋址PA=10306H(9)MOVVAR+5,AX;目標(biāo)操作數(shù)為存儲器直接尋址PA=10605H3.18下面這些指令中哪些是正確的?那些是錯誤的?如果是錯誤的,請說明原因。(1)XCHGCS,AX;錯,CS不能參與交換(2)MOV[BX],[1000];錯,存儲器之不能交換(3)XCHGBX,IP;錯,IP不能參與交換(4)PUSHCS;錯,CS不能為PUSH的操作數(shù)(5)POPCS;錯,不能將數(shù)據(jù)彈到CS中(6)INBX,DX;輸入/輸出只能通過AL/AX(7)MOVBYTE[BX],1000;1000大于255,不能裝入字節(jié)單元(8)MOVCS,[1000];CS不能作為目標(biāo)寄存器(9)MOVBX,OFFSETVAR[SI];OFFSET只能取變量的偏移地址(10)MOVAX,[SI][DI];SI、DI不能成為基址加變址(11)MOVCOUNT[BX][SI],ES:AX;AX是寄存器,不能加段前綴3.19試述以下指令的區(qū)別:⑴MOVAX,3000H與MOVAX,[3000H]答案:⑴MOVAX,3000H指令源操作數(shù)的尋址方式為立即尋址方式,指令執(zhí)行結(jié)果為:(AX)=3000H。而MOVAX,[3000H]指令源操作數(shù)的尋址方式為直接尋址方式,指令執(zhí)行結(jié)果為:DS:3000H)_AX。⑵MOVAX,MEM與MOVAX,OFFSETMEM答案:⑵MOVAX,MEM指令源操作數(shù)的尋址方式為直接尋址方式,指令執(zhí)行結(jié)果為:DS:MEM)_AX。而MOVAX,OFFSETMEM指令的執(zhí)行結(jié)果是把MEM的偏移量送AX。⑶MOVAX,MEM與LEAAX,MEM答案:⑶MOVAX,MEM指令的執(zhí)行結(jié)果是DS:MEM)_AX。而LEAAX,MEM的執(zhí)行結(jié)果是把MEM的偏移量送AX。(4)JMPSHORTL1與JMPNEARPTRL1答案:JMPSHORTL1為段內(nèi)無條件短程轉(zhuǎn)移,跳轉(zhuǎn)的范圍不得超過帶符號的8位二進(jìn)制數(shù)表示的字節(jié)范圍;JMPNEARPTRL1為段內(nèi)無條件近程轉(zhuǎn)移,跳轉(zhuǎn)的范圍不得超過帶符號的16位二進(jìn)制數(shù)表示的字節(jié)范圍。(5)CMPDX,CX與SUBDX,CX答案:CMPDX,CX是比較,也是利用減法比較,但是dx中的值不變,標(biāo)志寄存器改變。SUBDX,CX是做減法運(yùn)算,dx中為減后的值,標(biāo)志寄存器改變(6)MOV[BP][SI],CL與MOVDS:[BP][SI],CL答案:BP默認(rèn)的段基址是SS,物理地址PA=SS+BP+SI;第二個重定義為DS段基址,物理地址PA=DS+BP+SI3.20設(shè)DS=2100H,SS=5200H,BX=1400H,BP=6200H,說明下面兩條指令所進(jìn)行的具體操作:MOVBYTEPTR[BP],20HMOVWORDPTR[BX],20H解:前一條指令是把立即數(shù)20H,傳送至堆棧段(BP的默認(rèn)段)偏移量由BP規(guī)定的字節(jié)單元,地址為:52000H+6200H=58200H第二條指令是把立即數(shù)20H,傳送至數(shù)據(jù)段(BX的默認(rèn)段)偏移量由BX規(guī)定的字單元,地址為:21000H+1400H=22400H。3.21設(shè)當(dāng)前SS=2010H,SP=FE00H,BX=3457H,計(jì)算當(dāng)前棧頂?shù)牡刂窞槎嗌???dāng)執(zhí)行PUSHBX指令后,棧頂?shù)刂泛蜅m?個字節(jié)的內(nèi)容分別是什么?答案:當(dāng)前棧頂?shù)牡刂?2FF00H當(dāng)執(zhí)行PUSHBX指令后,棧頂?shù)刂?2FEFEH(2FEFEH)=57H(2FEFFH)=34H3.22設(shè)DX=78C5H,CL=5,CF=1,確定下列各條指令執(zhí)行后,DX和CF中的值。(1)SHRDX,1;DX=3C62HCF=1(2)SARDX,CL;DX=03C6HCF=0(3)SHLDX,CL;DX=18A0HCF=1(4)RORDX,CL;DX=2BC6HCF=0(5)RCLDX,CL;DX=18B7HCF=1(6)RCRDH,1;DX=BCC5HCF=03.23設(shè)AX=0A69H,VALUE字變量中存放的內(nèi)容為1927H,寫出下列各條指令執(zhí)行后寄存器和CF、ZF、OF、SF、PF的值。AXCFZFOFSFPF(1)XORAX,VALUE;134EH00001(2)ANDAX,VALUE;0821H00001(3)SUBAX,VALUE;F142H10011(4)CMPAX,VALUE;0A69H10011(5)NOTAX;F596HXXXXX(6)TESTAX,VALUE;0A69H000013.24設(shè)AX和BX中是符號數(shù),CX和DX是無符號數(shù),請分別為下列各項(xiàng)確定CMP和條件轉(zhuǎn)移指令。CX值超過DX轉(zhuǎn)移。AX未超過BX轉(zhuǎn)移。DX為0轉(zhuǎn)移。CX值等于小于DX轉(zhuǎn)移。答案:(1)CMPCX,DXJANEXT(2)CMPAX,BXJLENEXT(3)CMPDX,0JZNEXT(4)CMPCX,DXJBENEXT3.25閱讀分析下列指令序列:ADDAX,BXJNOL1JNCL2SUBAX,BXJNCL3JNOL4JMPL5若AX和BX的初值分別為以下5種情況,則執(zhí)行該指令序列后,程序?qū)⒎謩e轉(zhuǎn)向何處(L1~L5中的一個)。AX=13C6H,BX=80DCHAX=0B568H,BX=54B7HAX=42C8H,BX=608DHAX=0D023H,BX=9FD0HAX=9FD0H,BX=0D023H答案:(1)轉(zhuǎn)L1:不溢出,轉(zhuǎn)移到L1處;(2)轉(zhuǎn)L1:不溢出,轉(zhuǎn)移到L1處;(3)轉(zhuǎn)L2:溢出,不轉(zhuǎn)移到L1處,進(jìn)位CF=0,轉(zhuǎn)移到L2處;(4)轉(zhuǎn)L3:溢出,不轉(zhuǎn)移到L1處,進(jìn)位CF=1,不轉(zhuǎn)移到L2處,減法借位CF=0,轉(zhuǎn)移到L3處;(5)轉(zhuǎn)L5:溢出,不轉(zhuǎn)移到L1處,進(jìn)位CF=1,不轉(zhuǎn)移到L2處,減法借位CF=1,不轉(zhuǎn)移到L3處,不溢出OF=0,轉(zhuǎn)移到L4處;3.26用普通運(yùn)算指令執(zhí)行BCD碼運(yùn)算時,為什么要進(jìn)行十進(jìn)制調(diào)整?具體地講,在進(jìn)行BCD碼的加、減、乘、除運(yùn)算時,程序段的什么位置必須加上十進(jìn)制調(diào)整指令?解:因?yàn)?086指令把操作數(shù)作為二進(jìn)制數(shù)進(jìn)行二進(jìn)制運(yùn)算,要得到正確的BCD結(jié)果,需要進(jìn)行調(diào)整。在加、減、乘法指令之后加上BCD調(diào)整指令,而在除法指令之前先用BCD調(diào)整指令再用除法指令。3.27在編寫乘除法程序時,為什么常用移位指令來代替乘除法指令?編寫一段程序,實(shí)現(xiàn)將BX中的數(shù)除以10,結(jié)果仍然放在BX中。解:用移位指令時,左移l位相當(dāng)于將操作數(shù)乘2,右移1位相當(dāng)于將操作數(shù)除2。用移位指令實(shí)現(xiàn)一些簡單的乘除法程序,比用乘法指令和除法指令進(jìn)行乘、除運(yùn)算要快得多。用除法指令實(shí)現(xiàn):MOVCL0AHMOVAX,BXIDIVCLMOVBX,AX3.28串操作指令使用時特別要注意和SI,DI這兩個寄存器及方向標(biāo)志DF密切相關(guān)。請具體就指令MOVSB/MOVSW、CMPSB/CMPSW、SCASB/SCASW、LODSB/LODSW、STOSB/STOSW列表說明和SI、DI及DF的關(guān)系。解答:SIDIDFMOVSB/MOVSW指出源地址指出目的地址不帶REP重復(fù)前綴時,DF=0,每傳送一次,SI、DI加1或加2,DF=1,SI、DI則減1或減2CMPSB/CMPSW存放源字符串首地址存放目的字符串首地址DF=0,每次比較后,SI、DI加1或加2,CX減1,DF=1,SI、DI減1或減2,CX減1SCASB/SCASW無指出字符串首址偏移量無LODSB/LODSW作為地址指針存放處理結(jié)果DF=1時,地址作增量修改,DF=0時,地址作減量修改STOSB/STOSW無存放目的地址無3.29用串操作指令設(shè)計(jì)實(shí)現(xiàn)以下功能的程序段:首先將100H個數(shù)從2170H處搬到1000H處,然后,從中檢索相等于VAL中字符的單元,并將此單元值換成空格符。解答:START:MOVAX,DSMOVES,AXMOVSI,2170HMOVDI,1000HMOVCX,100HCLDREPMOVSBANOTHER:MOVDI,1000HMOVAL,VALMOVCX,100HCLDAGE:SCASBJZFINDECCXJNZAGEJMPOVERFIN:MOVBYTEPTR[DI-1],20HCMPCX,0JNZAGEOVER:RET3.30求雙字長數(shù)DX∶AX的相反數(shù)。答:NEGDXNEGAXSBBDX,03.31試對數(shù)據(jù)段偏移地址為101H單元中的單字節(jié)數(shù)求補(bǔ)后存入102H,最高位不變,低7位取反存入103H,高4位置1,低4位不變,存入104H。答:MOVAX,[0101H]MOVBX,AXMOVCX,AXNOTAXMOV[0102H],AXXORBX,7FHMOV[0103H],BXANDCX,0F0HMOV[0104H]3.32試編寫一個程序,比較兩個同長字符串STRING1和STRING2所含字符是否相同,若相同MATCH單元賦值1,若不相同MATCH單元賦值0。答案:程序段為:;數(shù)據(jù)定義STRING1DB…ABCDEFGHIJK;串1,作為源串STRING2DB…ABCDFGKJ;串2,作為目標(biāo)串MATCHDB?;定義MATCH單元;功能代碼MOVAX,SEGSTRING1MOVDS,AX;源串段地址送DSMOVAX,SEGSTRING2MOVES,AX;目標(biāo)串段地址送ESLEASI,STRING1;源串偏移地址送SILEADI,STRING2;目標(biāo)串偏移地址送DIMOVCX,STRING1-STRING2;重復(fù)次數(shù)送CXCLD;地址增REPECMPSB;相等繼續(xù)比較,不相等退出JZEQUAL;退出時,若ZF=1,表示兩串相等MOVMATCH,0;不相同,MATCH單元賦值0JMPOVEREQUAL:MOVMATCH,1;相同MATCH單元賦值1OVER:HLT3.34編寫代碼,計(jì)算a+10b+100c+20d,其中a、b、c、d均為單字節(jié)無符號數(shù),結(jié)果為16位,存入SUM開始的兩單元中。datasegmentmadb12mbdb21mcdb86mddb150SUMdw0dataendscodesegmentassumeds:data,cs:codestart:movax,datamovds,axmovdh,0movdl,mamovah,0moval,10mulmbadddx,axmovah,0moval,100mulmcmovah,0moval,20mulmdadddx,axmovSUM,dxcodeendsendstart3.35試_______編寫一段程序把LIST到LIST+100中的內(nèi)容傳到BLK到BLK+100中去。答案:程序段為:MOVAX,SEGLISTMOVDS,AX;源串段地址送DSMOVAX,SEGBLKMOVES,AX;目標(biāo)串段地址送ESLEASI,LIST;源串偏移地址送SILEADI,BLK;目標(biāo)串偏移地址送DIMOVCX,101;重復(fù)次數(shù)送CXCLD;地址增REPMOVSB3.36設(shè)CS:0100H單元有一條兩字節(jié)的JMPSHORTLAB指令,若其中的位移量為:⑴56H⑵80H⑶78H(4)0E0H試寫出轉(zhuǎn)向目標(biāo)的物理地址是多少?答:因?yàn)镃S:0100H處存放兩字節(jié)指令JMPSHORTLAB,所以當(dāng)執(zhí)行該指令時(IP)=0102H(1)轉(zhuǎn)向目標(biāo)的物理地址是:(CS)*10H+(IP)+0056H=CS:0058H(2)轉(zhuǎn)向目標(biāo)的物理地址是:(CS)*10H+(IP)+0FF80H=CS:0082H;80H對應(yīng)的負(fù)數(shù)為-80H(向上轉(zhuǎn)移,負(fù)位移量)(3)轉(zhuǎn)向目標(biāo)的物理地址是:(CS)*10H+(IP)+0078H=CS:0180H(4)轉(zhuǎn)向目標(biāo)的物理地址是:(CS)*10H+(IP)+0FFE0H=CS:00E2H;E2H對應(yīng)的負(fù)數(shù)為-1EH(向上轉(zhuǎn)移,負(fù)位移量)3.37不使用除法指令,將堆棧段中10H、11H單元中的雙字節(jié)帶符號數(shù)除以8,結(jié)果存入12H、13H單元(注:多字節(jié)數(shù)存放格式均為低位在前,高位在后)。POPAXPOPBXTESTAX,8000H;測試被除數(shù)符號位MOVCL,3JZZS;若為正數(shù),跳轉(zhuǎn)到ZSSARAX,CLJMPOVERZS:SHRAX,CLOVER:PUSHAX3.38數(shù)據(jù)段中3030H起有兩個16位的帶符號數(shù),試求它們的積,存入3034H-3036H單元中。MOVAX,[3030H]MOVBX,[3032H]IMULBXMOV[3034H],AXMOV[3036H]3.39考慮以下調(diào)用序列:(1)MAIN調(diào)用NEAR的SUBA過程(返回的偏移地址為150BH);(2)SUBA調(diào)用NEAR的SUBB過程(返回的偏移地址為1A70H);(3)SUBB調(diào)用FAR的SUBC過程(返回的偏移地址為1B50H,段地址為1000H);(4)從SUBC返回SUBB;(5)從SUBB返回SUBA;(6)從SUBA返回MAIN。請畫出每次調(diào)用或返回時,堆棧內(nèi)容和堆棧指針變化情況。答:*****(SP)150BH*****150BH(SP)*****150BH(SP)*****150BH(SP)*****(SP)150BH(SP)*****(1)(2)(3)(4)(5)(6)1A70H1A70H1000H1B50H1A70H第四章匯編語言程序設(shè)計(jì)習(xí)題答案(部分)4.1什么是標(biāo)號?它有哪些屬性?答:標(biāo)號是一種特殊的標(biāo)識符,它代表代碼段中的某個具體位置,它主要用于表明轉(zhuǎn)移的目標(biāo)位置。源程序中的標(biāo)號都有三種屬性:段、偏移及類型。4.2什么是變量?它有哪些屬性?答:變量名代表存儲器中的一個數(shù)據(jù)區(qū)的名字。源程序中的變量有五種屬性:段、偏移、類型、長度、規(guī)模。4.3什么是偽指令?什么是宏指令?偽指令在什么時候被執(zhí)行?宏指令在程序中如何被調(diào)用?答:偽指令語句是一種不產(chǎn)生目標(biāo)代碼的語句,它僅僅在匯編過程中告訴匯編程序應(yīng)如何匯編。偽指令語句是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作。宏是若干語句組成的程序段,宏指令語句用來定義宏。一旦把某程序段定義成宏,則可以用宏名代替那段程序。在匯編時,要對宏進(jìn)行宏展開,展開的過程是將宏名用程序段代替。4.4匯編語言表達(dá)式中有哪些運(yùn)算符?它們所完成的運(yùn)算是在什么時候進(jìn)行的?答:匯編語言表達(dá)式中的運(yùn)算符有:算術(shù)運(yùn)算符+、-、*、/、MOD邏輯運(yùn)算符AND、OR、NOT、XOR關(guān)系運(yùn)算符EQ、NE、LT、GT、LT、LE、GE分析運(yùn)算符SEG、OFFSET、TYPE、LENGTH、SIZE屬性運(yùn)算符PTR、THIS、SHORT其它LOW、HIGH這些運(yùn)算符都是在在匯編時由匯編程序?qū)ζ溥\(yùn)算的。4.5畫出下列語句中的數(shù)據(jù)在存儲器中的存儲情況。ORG100HVARBDB34,34H,…GOOD?,2DUP(1,2DUP(0))VARWDW5678H,…CD?,$+2,2DUP(100)VARCEQU12VARBDS:0100H22HDS:010BH00HDS:0101H34HVARWDS:010CH78HDS:0102H47HDS:010DH56HDS:0103H4FHDS:010EH44HDS:0104H4FHDS:010FH43HDS:0105H44HDS:0110H12HDS:0106H01HDS:0111H01HDS:0107H00HDS:0112H64HDS:0108H00HDS:0113H00HDS:0109H01HDS:0114H64HDS:010AH00HDS:0115H00H4.6按下列要求,寫出各數(shù)據(jù)定義語句。DB1為10H個重復(fù)的字節(jié)數(shù)據(jù)序列:1,2,5個3,4。DB2為字符串…STUDENTS?DB3為十六進(jìn)制數(shù)序列:12H,ABCDH用等值語句給符號COUNT賦以DB1數(shù)據(jù)區(qū)所占字節(jié)數(shù),該語句寫在最后。解答:DB1DB16DUP(1,2,5DUP(3),4)DB2DB…STUDENTS?DB3DW12H,0ABCDHCOUNTEQUDB2-DB14.7指令ORAX,1234HOR0FFH中兩個OR有什么差別?這兩個操作數(shù)分別在什么時候執(zhí)行?解答:(1)指令ORAX,1234HOR0FFH中的第一個OR是指令系統(tǒng)中的“或”指令,而第二個OR是表達(dá)式中表示邏輯“或”關(guān)系的。(2)指令ORAX,1234HOR0FFH中的第一個OR是在CPU執(zhí)行指令操作時才會執(zhí)行。而第二個OR是在匯編時就會將1234H和0FFH作邏輯“或”運(yùn)算,得到結(jié)果12FFH。然后執(zhí)行第一個OR指令,完成AX的內(nèi)容與12FFH的邏輯“或”運(yùn)算。4.8對于下面的數(shù)據(jù)定義,各條MOV指令單獨(dú)執(zhí)行后,有關(guān)寄存器的內(nèi)容是什么?PREPDB?TABADW5DUP(?)TABBDB…NEXT?TABCDD12345678H(1)MOVAX,TYPEPREP;AX=1(2)MOVAX,TYPETABA;AX=2(3)MOVAX,LENGTHTABA;AX=5(4)MOVAX,SIZETABA;AX=10(5)MOVAX,LENGTHTABB;AX=1(6)MOVDX,SIZETABC;AX=44.9設(shè)數(shù)據(jù)段DSEG中符號及數(shù)據(jù)定義如下,試寫出數(shù)據(jù)在內(nèi)存中的存儲示意圖。(數(shù)據(jù)段DSEG定義略)解答:DABDS:0100H2FHDS:0113HDS:0101H47HDS:0114HDS:0102H4FHDS:0115HDS:0103H54HDS:0116HDS:0104H4FHDS:0117HDS:0105H2FHDS:0118HDS:0106H0DHDS:0119HDS:0107H0AHDS:011AHDBBDS:0108H05HDS:011BHDS:0109H13HDDWDS:011CH32HDS:010AH61HDS:011DH31HCCBDS:010BHDS:011EH64HDS:010CHDS:011FH00HDS:010DHDS:0120H33HDS:010EHDS:0121H03HDS:010FHDS:0122H78HDS:0110HDS:0123H00HDS:0111HDS:0124H64HDS:0112HDS:0125H00H4.10若自STRING單元開始存放有一個字符串(以字符…$?結(jié)束),試完成:(1)編程統(tǒng)計(jì)該字符串長度(不包含$字符,并假設(shè)長度為兩字節(jié))。(2)把字符串長度放在STRING單元,把整個字符串往下移兩個單元。程序段為:(1)MOVSI,OFFSETSTRINGXORBX,BXCONT:MOVAL,[SI]CMPAL,…$?JZNEXTINCBXINCSIJMPCONTNEXT:MOVAH,4CHINT21H(2)STRINGDB…$?COUNTEQU$-STRINGMOVSI,OFFSETSTRINGMOVCX,COUNTADDSI,CXCONT:DECSIMOVAL,[SI]MOV[SI+2],ALLOOPCONTMOVCX,COUNTMOVSTRING,CXMOVAH,4CHINT21H4.11將字符串STRING中的…&?字符用空格代替,字符串STRING“ItisFEB&03”。解答程序?yàn)椋篋ATASEGMENTSTRINGDB…ItisFEB&03?COUNTEQU$-STRINGDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETSTRINGMOVCX,COUNTMOVAL,…$?CONT:CMPAL,[SI]JNZNEXTMOVBYTEPTR[SI],…?NEXT:INCSILOOPCONTMOVAH,4CHINT21HCODEENDSENDSTART4.12設(shè)BLOCK起有20個單字節(jié)的數(shù),試將它們按降序排列。解答程序?yàn)椋篋ATASEGMENTORG0100HBLOCKDB12H,87H,51H,68H,00H,02H,0FFH,0D6H,45H,77H,80H,9FHLENEQU$-BLOCKDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,LEN-1;BX_比較輪數(shù)LOP0:MOVSI,LEN-1;SI_第N個數(shù)在數(shù)據(jù)表中的偏移量MOVCX,BX;CX_比較次數(shù)計(jì)數(shù)值MOVDX,0;DX_置交換標(biāo)志為第N個數(shù)在數(shù)據(jù)表中偏移量LOP1:MOVAL,BLOCK[SI]CMPAL,BLOCK[SI-1];比較相鄰兩數(shù)JLENEXTMOVAH,BLOCK[SI-1];交換兩數(shù)MOVBLOCK[SI-1],ALMOVBLOCK[SI],AHMOVDX,1;DX_發(fā)生交換處的位置NEXT:DECSI;修改數(shù)據(jù)地址LOOPLOP1;一輪比較完嗎?CMPDX,0;本輪發(fā)生交換嗎?JZSTOP;已全部排好序,轉(zhuǎn)程序結(jié)束DECBX;所有輪都比較完否?JNZLOP0;未完繼續(xù)STOP:MOVAH,4CHINT21HCODEENDSENDSTART4.14試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來。解答程序?yàn)椋篸atasegmentmessagedb'pleaseenterthesmallletter:',0ah,0dh,'$'message2db'thecapitalletteris:',0ah,0dh,'$'errordb'entermustbesmall!pleaseenteragain:',0ah,0dh,'$'message3db'thecapitalletteris:','$'letterdb?dataendsstacksegmentdb100hdup(?)stackendscodesegmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,axjmpl1xorax,axerror1:leadx,errormovah,09hint21hl1:leadx,messagemovah,09hint21hleadx,lettermovah,01hint21hpushaxmovdl,0ahmovah,02hint21hmovdl,0dhint21hleadx,message3movah,09hint21hpopaxcmpal,'z';比較,判斷是否小寫字母jaerror1cmpal,'a'jberror1;大寫字母重新輸入subal,20H;減20H轉(zhuǎn)換為大寫字母movdl,almovah,02hint21hmovax,4c00hint21hcodeendsendstart4.15鍵盤輸入十個學(xué)生的成績,試編制一個程序統(tǒng)計(jì)69~69分,70~79分,80~89分,90~99分及100分的人數(shù),分別存放到S6,S7,S8,S9及S10單元中。解答程序?yàn)椋篋ATASEGMENTBUFDB10DUP(?)S6DB?S7DB?S8DB?S9DB?S10DB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETS6XORAL,ALMOVCX,0504HCONT:MOV[SI],ALINCSILOOPCONTMOVCX,10MOVSI,OFFSETBUFCONT1:MOVAH,1INT21HSHLAL,CLMOVBL,ALMOVAH,1INT21HSUBAL,30HORAL,BLMOV[SI],ALCMPAL,70HJAENEXT1INCBYTEPTRS6NEXT1:CMPAL,80HJAENEXT2INCBYTEPTRS7NEXT2:CMPAL,90HJAENEXT3INCBYTEPTRS8NEXT3:CMPAL,99HJANEXT4INCBYTEPTRS9JMPNEXT5NEXT4:INCBYTEPTRS10NEXT5:INCSILOOPCONT1MOVAH,4CHINT21HCODEENDSENDSTART4.17在有序表“11,22,33,44,55,66,77,88,99,00”中查找44。若找到置find為其在表中的位置;未找到,find置0。4.18分別實(shí)現(xiàn)滿足下面要求的宏定義:(1)可對任一寄存器實(shí)現(xiàn)任意次數(shù)的左移操作。(2)任意兩個單元中的數(shù)據(jù)相加存入第三個單元中。(3)將任意一個8位寄存器中的壓縮BCD碼轉(zhuǎn)為兩個ASCII碼,并在屏幕上顯示。(2)宏定義的代碼段如下:ADDMMACROM1,M2,M3MOVAX,[M1]ADDAX,[M2]MOV[M3],AXENDM第五章8086系統(tǒng)時序和微機(jī)總線習(xí)題答案(部分)5.1什么是時鐘周期、總線周期、指令周期?答:8086CPU執(zhí)行一條指令是由取指令、譯碼和執(zhí)行等操作組成的,為了使8086CPU的各種操作協(xié)調(diào)同步進(jìn)行,8086CPU必須在時鐘信號CLK控制下工作,時鐘信號是一個周期性的脈沖信號,一個時鐘脈沖的時間長度稱為一個時鐘周期(ClockCycle),是時鐘頻率(主頻)的倒數(shù),時鐘周期是計(jì)算機(jī)系統(tǒng)中的時間基準(zhǔn)。8086CPU要通過總線才能與外部交換信息,CPU通過總線接口單元與外部交換一次信息,稱為一次總線操作,所耗用的時間稱為一個總線周期(BusCycle),也稱機(jī)器周期(MachineCycle)。一個總線周期由若干個時鐘周期組成,總線操作的類型不同,總線周期也不同。一個總線周期內(nèi)完成的數(shù)據(jù)傳輸,一般有傳送地址和傳送數(shù)據(jù)兩個過程。8086CPU執(zhí)行一條指令所需要的時間稱為指令周期(InstructionCycle),一個指令周期由若干個總線周期組成,5.28086微處理器各個T狀態(tài)的主要功能。答:(1)在T1狀態(tài),CPU往多路復(fù)用總線上發(fā)出地址信息,以指出要尋址的存儲單元或外設(shè)端口的地址。(2)在T2狀態(tài),CPU從總線上撤消地址,而使總線的低16位浮空,置成高阻狀態(tài),為傳輸數(shù)據(jù)作準(zhǔn)備??偩€的最高4位(A19~A16)用來輸出本總線周期狀態(tài)信息。在這些狀態(tài)信息用來表示中斷允許狀態(tài),當(dāng)前正在使用的段寄存器名等。(3)在T3狀態(tài),多路總線的高4位繼續(xù)提供狀態(tài)信息,而多路總線的低16位(8088則為低8位)上出現(xiàn)由CPU寫出的數(shù)據(jù)或者CPU從存儲器或端口讀入的數(shù)據(jù)。(4)在有些情況下,外設(shè)或存儲器速度較慢,不能及時地配合CPU傳送數(shù)據(jù)。這時,外設(shè)或存儲器會通過“READY”信號線在T3狀態(tài)啟動之前向CPU發(fā)一個“數(shù)據(jù)未準(zhǔn)備好”信號,于是CPU會在T3之后插入1個或多個附加的時鐘周期Tw。Tw也叫等待狀態(tài),在Tw狀態(tài),總線上的信息情況和T3狀態(tài)的信息情況一樣。當(dāng)指定的存儲器或外設(shè)完成數(shù)據(jù)傳送時,便在“READY”線上發(fā)出“準(zhǔn)備好”信號,CPU接收到這一信號后,會自動脫離Tw狀態(tài)而進(jìn)入T4狀態(tài)。(5)在T4狀態(tài),總線周期結(jié)束。5.38086和8088有何區(qū)別?答:這兩種CPU的主要區(qū)別如下:⑴外部數(shù)據(jù)總線位數(shù):8086CPU的外部數(shù)據(jù)總線有16位,在一個總線周期內(nèi)可輸入/輸出一個字(16位數(shù)據(jù)),使系統(tǒng)處理數(shù)據(jù)和對中斷響應(yīng)的速度得以加快;而8088CPU的外部數(shù)據(jù)總線為8位,在一個總線周期內(nèi)只能輸入/輸出一個字節(jié)(8位數(shù)據(jù))。⑵指令隊(duì)列容量:8086CPU的指令隊(duì)列可容納6個字節(jié),且在每個總線周期中從存儲器中取出2個字節(jié)的指令代碼填入指令隊(duì)列,這可提高取指操作和其它操作的并行率,從而提高系統(tǒng)工作速度;而8088CPU的指令隊(duì)列只能容納4個字節(jié),且在每個總線周期中能取一個字節(jié)的指令代碼,從而增長了總線取指令的時間,在一定條件下可能影響取指令操作和其它操作的并行率。⑶引腳特性:兩種CPU的引腳功能是相同的,但有以下幾點(diǎn)不同:1)AD15~AD0的定義不同:在8086中都定義為地址/數(shù)據(jù)復(fù)用總線;而8088中,由于只需8條數(shù)據(jù)總線,因此,對應(yīng)于8086的AD15~AD8這8條引腳定義為A15~A8,只作地址線使用。2)34腳的定義不同:在8086中定義為BHE信號;而在8088中定義為SSO,它與DT/R,IO/M一起用作最小方式下的周期狀態(tài)信號。3)28腳的相位不同,在8086中為M/IO;而在8088中被倒相,改為IO/M,以便與8080/8085系統(tǒng)的總線結(jié)構(gòu)兼容。5.48086是怎樣解決地址線和數(shù)據(jù)線的復(fù)用問題的?ALE的作用是什么?答:(1)、AD15-AD0采用分時的多路轉(zhuǎn)換方法來實(shí)現(xiàn)對地址線和數(shù)據(jù)線的復(fù)用。在總線周期T1狀態(tài)下,這些引線表示為低16位地址線,在總線周期為T2、T3、TW狀態(tài),這些引線用作數(shù)據(jù)總線,可見對復(fù)用信號是用時間來加以劃分的,他要求在T1狀態(tài)下先出現(xiàn)低16位地址時,用地址鎖存器加以鎖存,隨后的T狀態(tài),即使這些用作數(shù)據(jù)線,而低16位地址線的地址狀態(tài)去被記錄保存下來,并達(dá)到地址總線上。(2)、ALE是地址鎖存允許信號,高電平有效。5.58086有哪4種最基本的總線操作?答:(1)存儲器及I/O的讀/寫操作(2)中斷響應(yīng)操作(3)總線請求及響應(yīng)操作(4)總線空閑——指CPU正進(jìn)行內(nèi)部操作、不進(jìn)行對外操作的總線空閑狀態(tài)Ti。5.68086微處理器的輸入控制信號有HOLD、INTR和NMI,其含義各是什么?當(dāng)它們

溫馨提示

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

評論

0/150

提交評論