微機原理和接口技術(shù)-習題答案解析_第1頁
微機原理和接口技術(shù)-習題答案解析_第2頁
微機原理和接口技術(shù)-習題答案解析_第3頁
微機原理和接口技術(shù)-習題答案解析_第4頁
微機原理和接口技術(shù)-習題答案解析_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

·PAGE26·微機原理與接口技術(shù).PAGE28/NUMPAGES28第一章習題及答案1.微處理器內(nèi)部包含哪三大部分?解:運算器、控制器和寄存器組。2.完成下列數(shù)制的轉(zhuǎn)換①10101101B=〔D=〔H解:10101101B=173D=ADH。②0.11B=〔D解:0.11B=0.75D。③211.25=<>B=<>H解:211.25=11010011.01B=D3.4H。④10111.0101B=<>H=<>BCD解:10111.0101B=17.5H=23.3125D=〔00100011.0011000100100101BCD3.已知X=+1011010B,Y=–0011011B,設機器數(shù)為8位,分別寫出X、Y的原碼、反碼和補碼。解:4.已知X的真值為32,Y的真值為–19,求解:5.已知X=51,Y=–86,用補碼完成下列運算,并判斷是否產(chǎn)生溢出〔設字長為8位。①X+Y②X-Y③–X+Y④–X-Y解:[X]補=[X]補=00110011B[Y]補=[Y]反+1=[11010110]反+1=10101001+1=10101010B[X+Y]補=[X]補+[Y]補=00110011B+10101010B=11011101BX+Y=[[X+Y]補]補=[11011101]補=10100010+1=10100011B②11110111B,因為,所以產(chǎn)生溢出。③01110111B,因為,所以產(chǎn)生溢出。④00100011B,因為,所以未產(chǎn)生溢出。6.若使與門的輸出端輸出高電平,則各輸入端的狀態(tài)是什么?解:各輸入端為高電平。7.若使與非門的輸出端輸出低電平,則各輸入端的狀態(tài)是什么?解:各輸入端為高電平。8.如果74LS138譯碼器的Y4端輸出低電平,則C、B、A三個輸入端的狀態(tài)分別是什么?解:C、B、A三個輸入端的狀態(tài)分別是‘1’,‘0’,‘第二章習題及答案1.8086/8088CPU由哪兩大功能部分所組成?簡述它們的主要功能?解:8086/8088CPU由EU和BIU兩大功能部分組成。執(zhí)行單元EU主要完成指令的譯碼和執(zhí)行。執(zhí)行單元通過EU控制電路從BIU中取出指令,經(jīng)過指令譯碼形成各種定時控制信號,向EU內(nèi)各功能部件發(fā)出相應的控制命令,以完成指令所規(guī)定的操作。總線接口單元BIU是8086/8088同外部聯(lián)系的接口。它負責所有涉及外部總線的操作,包括取指令、讀操作數(shù)、寫操作數(shù)、地址轉(zhuǎn)換和總線控制等。BIU內(nèi)部設置指令預取隊列,每當指令隊列有兩個或兩個以上的字節(jié)空間,且執(zhí)行單元未向BIU申請讀/寫存儲器操作數(shù)時,BIU順序地預取后續(xù)指令的代碼,并填入指令隊列中。當EU執(zhí)行的是轉(zhuǎn)移指令時,則BIU清除當前的指令預取隊列的內(nèi)容,從新的地址取回指令,并立即送到EU去執(zhí)行,然后,從后續(xù)的指令序列中取回指令填滿隊列。2.什么是指令流水線?指令流水線需要哪些硬件支持?解:指令流水線是指8086/8088CPU內(nèi)部的執(zhí)行單元EU和總線接口單元BIU通過指令預取隊列協(xié)同工作從而實現(xiàn)指令的并行執(zhí)行。指令流水線最主要的硬件支持是BIU內(nèi)部的指令預取隊列。3.邏輯地址如何轉(zhuǎn)換成物理地址?已知邏輯地址為2D1EH:35B8H,對應的物理地址是什么?解:邏輯地址是段基址和段內(nèi)偏移地址形式的地址。 物理地址=段基址×16+段內(nèi)偏移已知邏輯地址為2D1EH:35B8H,則對應的物理地址4.8088和8086的指令預取隊列的長度分別是多少?解:8088的指令預取隊列的長度為4字節(jié);8086的指令預取隊列的長度為6字節(jié)。5.簡述8086/8088CPU內(nèi)部的各寄存器的作用。解:AX、BX、CX和DX通用寄存器一般用于存放參與運算的數(shù)據(jù)或運算的結(jié)果。SP:用于存放堆棧棧頂?shù)亩蝺?nèi)偏移量。BP:用于存放訪問內(nèi)存時的偏移地址。 SP和BP也可以用來存放數(shù)據(jù),它們的默認段寄存器都是SS。SI和DI通常在間接尋址方式中存放操作數(shù)的偏移地址。在串操作指令中,DI的默認段寄存器是ES。SI和DI也可以用來存放數(shù)據(jù)。CS:代碼段寄存器,用于存放代碼段的段基址。DS:數(shù)據(jù)段寄存器,用于存放數(shù)據(jù)段的段基址。SS:堆棧段寄存器,用于存放堆棧段的段基址。ES:附加段寄存器,用于存放附加段的段基址。IP:指令指針寄存器,用于存放CPU即將執(zhí)行的下一條指令在代碼段中的段內(nèi)偏移地址。FLAGS:標志寄存器,用于存放指令執(zhí)行結(jié)果的特征。6.8086/8088CPU內(nèi)部的狀態(tài)標志寄存器共有幾位標志位?各位的含義是什么?解:狀態(tài)標志寄存器共有9位標志位,其中包含6個狀態(tài)標志位和3個控制標志位。狀態(tài)標志位:CF〔CarryFlag:進位標志。當算術(shù)運算結(jié)果使最高位產(chǎn)生進位或借位時,則CF=1;否則CF=0。PF〔ParityFlag:奇偶標志。若運算結(jié)果中的低8位含有偶數(shù)個1,則PF=1;否則PF=0。AF〔AuxiliarycarryFlag:輔助進位標志。運算過程中若D3位向D4有進位或借位時,AF=1;否則AF=0。ZF〔ZeroFlag:零標志。若運算結(jié)果為0,則ZF=1;否則ZF=0。SF〔SignFlag:符號標志。若運算結(jié)果為負,則SF=1;否則SF=0。OF〔OverflowFlag:溢出標志。當帶符號數(shù)的補碼運算結(jié)果超出機器所能表達的范圍時,就會產(chǎn)生溢出,這時OF=1;否則OF=0??刂茦酥疚唬篋F〔DirectionFlag:方向標志??刂拼僮髦噶畹牡刂纷兓姆较颉.擠F=0時,串操作指令的地址指針按增量變化;當DF=1時,串操作指令的地址指針按減量變化。IF〔InterruptFlag:中斷允許標志??刂莆⑻幚砥魇欠裨试S響應可屏蔽中斷請求。若IF=1,則允許響應;否則禁止響應。TF〔TrapFlag:單步標志。TF=1時,CPU工作在單步方式。7.8086/8088系統(tǒng)中存儲器的分段原則是什么?解:分段原則是要求段的起始單元的物理地址是16的整數(shù)倍,每段的物理長度為64KB。8.當ALE有效時,8088的地址/數(shù)據(jù)總線上將出現(xiàn)什么信息?解:當ALE有效時,8088的地址/數(shù)據(jù)總線上將出現(xiàn)地址信息。9.READY管腳的作用是什么?解:READY用于微處理器時序中插入等待狀態(tài)。若該引腳被置為低電平,則微處理器進入等待狀態(tài)并保持空閑;若該引腳被置為高電平,則它對微處理器的操作不產(chǎn)生影響。CPU在讀、寫操作時序中的T3時鐘周期開始處,通過檢測READY管腳的狀態(tài)來決定是否插入TW等待時鐘周期,以解決CPU與存儲器或I/O接口之間速度不匹配的矛盾。10.為什么在基于8086/8088的系統(tǒng)中經(jīng)常需要使用緩沖器?解:由于基于8086/8088的系統(tǒng)驅(qū)動能力的不足,需要使用緩沖器。11.8088工作在最小模式下包含哪些控制信號?解:最小模式下包含的控制信號有:RD、WR、IO/M、ALE、DT/R、DEN和INTA等信號。12.若CS=4000H,則當前代碼段可尋址的存儲空間范圍是多少?解:CS=4000H時,當前代碼段可尋址的存儲空間范圍為40000H~4FFFFH。第三章習題及答案什么叫尋址方式?8086指令系統(tǒng)中有哪幾種尋址方式?解:尋址方式,即獲得地址的方法,主要指獲得段內(nèi)偏移地址的方法,段基址常采用默認方式獲得。8086CPU指令系統(tǒng)的尋址方式有兩類:獲得指令中操作數(shù)地址的方法。獲得要執(zhí)行的下一條指令的地址的方法。8086指令系統(tǒng)中有8種操作數(shù)尋址方式,立即尋址。。。。。。。下列指令中BUFF為字節(jié)類型變量,DATA為常量,指出下列指令中源操作數(shù)的尋址方式:〔1MOVAX,1200〔2MOVAL,BUFF〔3SUBBX,[2000H]〔4MOVCX,[SI]〔5MOVDX,DATA[SI]〔6MOVBL,[SI][BX]〔7MOV[DI],AX〔8ADDAX,DATA[DI+BP]〔9PUSHF〔10MOVBX,ES:[SI]解:〔1MOVAX,1200 ;立即尋址〔2MOVAL,BUFF ;直接尋址〔3SUBBX,[2000H] ;直接尋址〔4MOVCX,[SI] ;寄存器間接尋址〔5MOVDX,DATA[SI] ;寄存器相對尋址〔6MOVBL,[SI][BX];基址變址尋址〔7MOV[DI],AX;寄存器尋址〔8ADDAX,DATA[DI+BP];基址變址相對尋址〔9PUSHF ;隱含尋址〔10MOVBX,ES:[SI] ;寄存器間接尋址指出下列指令的錯誤并改正?!?MOVDS,1200〔2MOVAL,BX〔3SUB33〔4PUSHAL〔5MUL45H〔6MOV[BX],[SI]〔7MOVSBYTEPTRDS:[DI],BYTEPTRDS:[SI]〔8ADDDATA[DI+BP],ES:[CX]〔9JMPBYTEPTR[SI]〔10OUT3F8H,AL解:〔1MOVDS,1200 ;不能用立即數(shù)給段基址寄存器賦值〔2MOVAL,BX ;操作數(shù)類型不一致〔3SUB33H,AL ;立即數(shù)不能作為目的操作數(shù)〔4PUSHAL ;壓棧指令的操作數(shù)必須是字類型〔5MUL45H ;乘法指令中的操作數(shù)不能是立即數(shù)〔6MOV[BX],[SI] ;源和目的操作數(shù)不能同時為內(nèi)存操作數(shù)〔7MOVSBYTEPTRDS:[DI],BYTEPTRDS:[SI] ;目的操作數(shù)應該在ES段。〔8ADDDATA[DI+BP],ES:[CX] ;CX不能做間址寄存器使用〔9JMPBYTEPTR[SI] ;操作數(shù)必須是字類型〔10OUT3F8H,AL ;16位的端口地址不能直接在輸入輸出指令中使用。根據(jù)要求寫出一條〔或幾條匯編語言指令?!?將立即數(shù)4000H送入寄存器BX?!?將立即數(shù)4000H送入段寄存器DS?!?將變址寄存器DI的內(nèi)容送入數(shù)據(jù)段中2000H的存儲單元。〔4把數(shù)據(jù)段中2000H存儲單元的內(nèi)容送段寄存器ES。〔5將立即數(shù)3DH與AL相加,結(jié)果送回AL?!?把BX與CX寄存器內(nèi)容相加,結(jié)果送入BX。〔7寄存器BX中的低4位內(nèi)容保持不變,其他位按位取反,結(jié)果仍在BX中。〔8實現(xiàn)AX與-128的乘積運算。〔9實現(xiàn)CX中高、低8位內(nèi)容的交換?!?0將DX中D0、D4、D8位置1,其余位保持不變。解:〔1將立即數(shù)4000H送入寄存器BX。MOVBX,4000H〔2將立即數(shù)4000H送入段寄存器DS。MOVAX,4000HMOVDS,AX〔3將變址寄存器DI的內(nèi)容送入數(shù)據(jù)段中2000H的存儲單元。MOV[2000H],DI〔4把數(shù)據(jù)段中2000H存儲單元的內(nèi)容送段寄存器ES。MOVAX,[2000H]MOVES,AX〔5將立即數(shù)3DH與AL相加,結(jié)果送回AL。ADDAL,3DH〔6把BX與CX寄存器內(nèi)容相加,結(jié)果送入BX。ADDBX,CX〔7寄存器BX中的低4位內(nèi)容保持不變,其他位按位取反,結(jié)果仍在BX中。MOVAX,BX,NOTAXANDAX,0FFF0HANDBX,000FHORBX,AX〔8實現(xiàn)AX與-128的乘積運算。MOVBX,-128IMULBX〔9實現(xiàn)CX中高、低8位內(nèi)容的交換。MOVAL,8ROLCXAL〔10將DX中D0、D4、D8位置1,其余位保持不變。0RDX,0111H設SS=2000H,SP=1000H,SI=2300,DI=7800,BX=9A00H。說明執(zhí)行下面每條指令時,堆棧內(nèi)容的變化和堆棧指針的值。PUSHSIPUSHDIPOPBX解:PUSHSI〔0FFFH=23H〔0FFEH=00HSP=0FFEHPUSHDI〔0FFDH=78H〔0FFCH=00HSP=0FFCHPOPBXBX=7800HSP=0FFEH內(nèi)存中18FC0H、18FC1H、18FC2H單元的內(nèi)容分別為23H、55、5AH,DS=1000H,BX=8FC0H,SI=1,執(zhí)行下面兩條指令后AX=?DX=?MOVAX,[BX+SI]LEADX,[BX+SI]解:AX=5A55HDX=8FC1H回答下列問題:〔1設AL=7FH,執(zhí)行CBW指令后,AX=?〔2設AX=8A9CH,執(zhí)行CWD指令后,AX=?DX=?解:〔1設AL=7FH,執(zhí)行CBW指令后,AX=007FH〔2設AX=8A9CH,執(zhí)行CWD指令后,AX=8A9CHDX=FFFFH執(zhí)行以下兩條指令后,FLAGS的6個狀態(tài)標志位的值是什么?MOVAX,847BHADDAX,9438H結(jié)果為118B3H解:CF=1PF=0〔為運算結(jié)果的低8位奇偶AF=1ZF=0SF=0OF=1下面程序段將03E8H轉(zhuǎn)換成十進制數(shù)并顯示,填寫指令后的空格。MOVAX,03E8H ;AH=03H,AL=E8HMOVCX,4MOVDI,2000H;DI=2000HMOVBX,10;BH=00,BL=0AHGO0:SUBDX,DX;CF=0,ZF=1DIVBX;AX=64H,DX=0MOV[DI],DL;[DI]=0INCDILOOPGO0;CX=3MOVCX,4GO1:DECDI ;DI=2003HMOVDL,[DI];DL=01ORDL,30H;DL=31HMOVAH,02;顯示1位十進制數(shù)1INT21HLOOPGO1用串操作指令替換以下程序段:ABC:MOVAL,[SI]MOVES:[DI],ALINCSIINCDILOOPABC解:REPMOVSB設AX=AAH,順序執(zhí)行下列各條指令,填寫空格?!?XORAX,0FFFFH;AX=〔2ANDAX,13A0H〔3ORAX,25C9H;A〔4TESTAX,0004H;AX=解:〔1XORAX,0FFFFH;AX=FF55H〔2ANDAX,13A0H;AX=〔3ORAX,25C9H;AX=〔4TESTAX,0004H;AX=00AAH試寫出執(zhí)行下列3條指令后BX寄存器的內(nèi)容。MOVCL,2HMOVBX,CO2DHSHRBX,CL解:BX=300BH執(zhí)行下列程序段后,AX、BX的內(nèi)容各是什么?〔1MOVAX,0001HMOVBX,8000HNEGAX;0-0001HMOVCX,4AA:SHLAX,1RCLBX,1LOOPAAHLT解:AX=FFF0HBX=000FH〔2MOVAX,0

MOVBX,1

MOVCX,100A:ADDAX,BX

INCBX

LOOPA

HLT解:AX=8080HBX=0101H編寫程序段,實現(xiàn)下述要求:使AX寄存器的低4位清0,其余位不變。使BX寄存器的低4位置1,其余位不變。測試AX的第0位和第4位,兩位都是1時將AL清0。測試AX的第0位和第4位,兩位中有一個為1時將AL清0。解:〔1使AX寄存器的低4位清0,其余位不變。ANDAX,0FFF0H使BX寄存器的低4位置1,其余位不變。ORAX,0FH〔3測試AX的第0位和第4位,兩位都是1時將AL清0。TESTAX,01HJZAATESTAX,10HJZAAMOVAL,0HLTAA:〔4測試AX的第0位和第4位,兩位中有一個為1時將AL清0。TESTAX,11HJZAAMOVAL,0AA:編寫程序段,完成把AX中的16進制數(shù)轉(zhuǎn)換為ASCII碼,并將對應的ASCII碼依次存入MEM開始的存儲單元中。例如,當AX的內(nèi)容為37B6H時,MEM開始的4個單元的內(nèi)容依次為33H,37H,42H,36H。解:MOVCX,4LEASI,MEM ADDSI,3 ;SI指向MEM+3CC:MOVBX,AX ;保存原始數(shù)據(jù)ANDAX,000FH ;取個位數(shù)CMPAL,9 JAAA ;在A~B之間就加37HADDAL,30H ;在0~9之間就加30HJMPBBAA:ADDAL,37HBB:MOV[SI],AL ;保存ASCII值DECSIPUSHCXMOVAX,BXMOVCL,4SHRAX,CL ;準備取下一個數(shù)POPCXLOOPCC編寫程序段,求從TABLE開始的10個無符號數(shù)的和,結(jié)果放在SUM單元中。解: LEASI,TABLE MOVCX,10 XORAX,AXNEXT: ADDAL,[SI] ADCAH,0 INCSI LOOPNEXT MOVSUM,AX編寫程序段,從鍵盤上輸入字符串‘HELLO’,并在串尾加結(jié)束標志‘$’。解:LEADX,STRING;設置字符串存放緩沖區(qū)首地址MOVAH,0AH;調(diào)用10號功能,輸入字符串INT21HMOVCL,STRING+1;實際鍵入的字符個數(shù)送CL XORCH,CH ADDDX, 2 ADDDX,CX;得到字符串尾地址 MOVBX,DXMOVBYTEPTR[BX],'$'編寫程序段,在屏幕上依次顯示1、2、3、A、B、C。解:LEABX,STR ;STR為6個字符的存放區(qū)域首地址 MOVCX,6 LPP:MOVAH,2 MOVDL,[BX] INCBX INT21H ;利用2號功能調(diào)用依次先生6個字符 LOOPLPP編寫程序段,在屏幕上顯示字符串"HelloWorld"。解:LEADX,STRING;STRING字符的存放區(qū)域首地址 MOVAH,09H INT21H ;利用9號功能調(diào)用顯示字符串編寫程序段,把內(nèi)存中首地址為MEM1的200個字節(jié)送到首地址為MEM2的區(qū)域。解:MOV AX,SEGMEM1MOV DS,AX ;設定源串段地址MOV AX,SEGMEM2MOV ES,AX ;設定目標串段地址MOV SI,0 ;設定源串偏移地址MOV DI,0 ;設定目標串偏移地址MOV CX,200 ;串長度送CXCLD ;〔DF=0,使地址指針按增量方向修改REP MOVSB ;每次傳送一個字節(jié),并自動HLT編寫程序段,以4000H為起始地址的32個單元中存有32個有符號數(shù),統(tǒng)計其中負數(shù)的個數(shù),并將統(tǒng)計結(jié)果保存在BUFFER單元中。解:START:MOVDI,OFFSETBUFFERXORAL,AL MOV[DI],ALMOVSI,4000H MOVCX,32AA: MOVAL,[SI] ORAL,AL JNSX1INC[DI]X1:INCSINEXT:LOOPAA HLT第四章習題及答案什么叫匯編?匯編語言源程序的處理過程是什么?解:任何CPU都只能執(zhí)行機器語言程序。匯編語言不是機器語言,匯編語言程序必須通過具有"翻譯"功能的系統(tǒng)程序的處理,處理的過程稱為匯編。匯編語言源程序經(jīng)過匯編生成機器語言目標程序,簡稱目標程序。目標程序經(jīng)過連接程序連接,就得到可執(zhí)行的機器語言程序文件。匯編語言的語句類型有哪些?各有什么特點?解:匯編語言的語句類型有兩種:指示性語句和指令性語句。指示性語句可以位于任何段中,指令性語句必須位于代碼段內(nèi)。指示性語句又稱為偽操作語句,它不是8088/8086CPU的指令,它與匯編程序〔assembler有關(guān)。指示性語句的功能主要是變量定義、為數(shù)據(jù)分配存儲空間、告訴匯編程序如何對源程序匯編等。源程序匯編后指示性語句不生成目標代碼,所以常被稱為偽指令。指令性語句指令性語句是可執(zhí)行語句,是8088/8086CPU的指令。源程序匯編后指令性語句生成目標代碼。第3章中介紹的所有指令都是指令性語句的主體,其操作數(shù)最多只能有兩個。匯編語言源程序的基本結(jié)構(gòu)是什么?解:匯編語言源程序由若干段組成:數(shù)據(jù)段、附件數(shù)據(jù)段、堆棧段和代碼段等,段與段之間的順序可以隨意排列,每一段由SEGMENT開始,以ENDS結(jié)束,每段的開始和結(jié)束都附有相同的名字。一個程序一般定義三個段:數(shù)據(jù)段、堆棧段和代碼段,必要時增加定義附加數(shù)據(jù)段,能獨立運行的程序至少包含一個代碼段。寫出完成下述要求的變量定義的語句:為緩沖區(qū)BUFF保留200個字節(jié)的內(nèi)存空間將字符串’BYTE’,’WORD’存放于某數(shù)據(jù)區(qū)在數(shù)據(jù)區(qū)中存入下列5個數(shù)據(jù):2040H,0300H,10H,0020H,1048H解:〔1為緩沖區(qū)BUFF保留200個字節(jié)的內(nèi)存空間BUFFDB200DUP<?>〔2將字符串’BYTE’,’WORD’存放于某數(shù)據(jù)區(qū)DB‘BYTE’,’WORD’〔3在數(shù)據(jù)區(qū)中存入下列5個數(shù)據(jù):2040H,0300H,10H,0020H,1048H DW2040H,0300H,10H,0020H,1048H畫出下面數(shù)據(jù)段匯編后的內(nèi)存圖,并標出變量的位置。DATASEGMENTAAEQU78HAA0DB09H,-2,45H,2DUP〔01H,?,’AB’AA1DW-2,34H+AAAA2DD12H;雙字類型DATAENDS解:如圖所示。設程序中的數(shù)據(jù)定義如下:NAMEDB30DUP〔?LIST DB1,8,3,2ADDRDW30DUP〔?取NAME的偏移地址放入SI取LIST的前兩個字節(jié)存入AX取LIST實際長度解:〔1取NAME的偏移地址放入SIMOVSI,OFFSETNAME〔2取LIST的前兩個字節(jié)存入AXMOVAX,WORDPTR[LIST]〔3取LIST實際長度MOVAX,SIZELIST;P85依據(jù)下列指示性語句,求表達式的值。SHOW0EQU200 SHOW1EQU15 SHOW2EQU2=1\*GB2⑴SHOW0X100+55 =2\*GB2⑵SHOW0ANDSHOW1-15=3\*GB2⑶<SHOW0/SHOW2>MODSHOW1=4\*GB2⑷SHOW1ORSHOW0解:〔1SHOW0X100+55=200X100+55=2\*GB2⑵SHOW0ANDSHOW1-15=C8HAND0FH-0FH=0;減法的優(yōu)先級過于AND=3\*GB2⑶〔SHOW0/SHOW2MODSHOW1=100MOD15=10=4\*GB2⑷SHOW1ORSHOW0=0FHORC8H=CF編寫程序,統(tǒng)計寄存器BX中二進制位"1”的個數(shù),結(jié)果存在AL中。DATASEGMENTNUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,0MOVBX,NUM;把數(shù)X傳送給BXMOVCX,16NEXT:SHLAX,1JNCNEXT1INCALNEXT1:LOOPNEXTMOVAH,4CHINT21HCODEENDSENDSTART某數(shù)據(jù)塊存放在BUFFER開始的100個字節(jié)單元中,試編寫程序統(tǒng)計數(shù)據(jù)塊中正數(shù)〔不包括0的個數(shù),并將統(tǒng)計的結(jié)果存放到NUMBER單元中。解DATASEGMENTBUFFERDB100<?>NUMBERDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXXORDX,DXMOVCX,100 MOVSI,OFFSETBUFFERNEXT:MOVAL,[SI] INCSI TESTAL,80H ;是正數(shù)嗎? JNZGOON ;否,轉(zhuǎn)移到GOONCMPAL,0JZGOONINCDXGOON:LOOPNEXTMOVNUMBER,DXMOVAH,4CHINT21HCODEENDSENDSTART閱讀下面程序段,指出它的功能。DATA SEGMENTASCIIDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HHEX DB04HDATAENDS CODE SEGMENTASSUMECS:CODE,DS:DATA START: MOVAX,DATAMOVDS,AXMOVBX,OFFSETASCIIMOVAL,HEXANDAL,0FHMOVAL,[BX+AL]MOVDL,ALMOVAH,2INT21HMOVAH,4CHINT21H CODE ENDS ENDSTART解:這時一個查表程序,查表取出HEX的ASCII。并在屏幕上顯示ASCII碼某數(shù)據(jù)區(qū)中有100個小寫字母,編程把它們轉(zhuǎn)換成大寫字母,并在屏幕上顯示。解:DATASEGMENTBUFFERDB100<?>DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,100 MOVSI,OFFSETBUFFERNEXT:MOVAL,[SI] INCSICMPAL,61H ;是小寫字母嗎? JBGOON ;否,轉(zhuǎn)移到GOON〔小于則轉(zhuǎn)移SUBAL,20HMOVDL,AL MOVAH,2 INT21HGOON:LOOPNEXTMOVAH,4CHINT21HCODEENDSENDSTART子程序的參數(shù)傳遞有哪些方法?解:主程序在調(diào)用子程序時,要為子程序預置數(shù)據(jù),在子程序返回時給出數(shù)據(jù)處理的結(jié)果,這稱為數(shù)據(jù)傳送或變量傳送。方法主要有以下幾種:①寄存器傳送。②地址表傳送,需要傳送的參數(shù)較多時可以利用存儲單元傳送。在調(diào)用子程序前,把所有參數(shù)依次送入地址表,然后將地址表的首地址作為子程序入口參數(shù)傳遞給子程序。③堆棧傳送,這種方式要審慎注意堆棧的變化情況。過程定義的一般格式是什么?子程序開始處為什么常用PUSH指令?返回前用POP指令?解:格式見P90,如果一個子程序被多次調(diào)用,保護與恢復〔主程序現(xiàn)場就非常重要。主程序每次調(diào)用子程序時,主程序的現(xiàn)場不會相同,保護與恢復現(xiàn)場的工作就只能在子程序中進行。原則上,在子程序中,首先把子程序中要用到的寄存器、存儲單元、狀態(tài)標志等壓入堆?;虼嫒胩囟臻g中,然后子程序才可以使用它們,使用完后再將它們彈出堆?;驈奶囟臻g中取出,恢復它們原來的值,即恢復主程序現(xiàn)場。保護和恢復現(xiàn)場常使用PUSH和POP指令。閱讀下面程序段,指出它的功能。DATASEGMENTSTRINGDB‘Exxperience…’LENGDW100KEYDB‘x’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAINPROCFARSTART:MOVAX,DATA MOVDS,AXDI-DI+SI+SP->BPBP-BP+IP-IP+[BP+4]->SICLCH[BP+6]->DIBLBH MOVES,AX LEABX,STRING;字符串地址->BX LEACX,LENG;字符串長->CX PUSHBX PUSHCX MOVAL,KEY CALLDELCHAR MOVAH,4CH INT21HMAINENDPDELCHARPROC PUSHBP MOVBP,SP PUSHSI PUSHDICLD MOVSI,[BP+4] MOVCX,[SI] MOVDI,[BP+6] REPNESCASB JNEDONEMOVSI,[BP+4] DECWORDPTR[SI] MOVSI,DI DECDI REPMOVSBDONE:POPDI POPSI POPBPRETDELCHARENDPCODEENDS ENDSTART解:從字符串中刪去多余的‘X’字符。顯示兩位壓縮BCD碼值〔0~99,要求不顯示前導0。解:DATASEGMENTBUFDB?;內(nèi)存中的兩位壓縮BCD碼DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,BUFMOVBL,ALNEXT: MOVCL,4SHRAL,CLANDAL,0FHCMPAL,0JZGOON ADDAL,30H ;顯示高位BCD碼MOVDL,AL MOVAH,2INT21HGOON:MOVAL,BLANDAL,0FHADDAL,30H ;顯示低位BCD碼MOVDL,ALMOVAH,2 INT21HMOVAH,4CHINT21HCODEENDSENDSTART某數(shù)據(jù)區(qū)中連續(xù)存放著100個整數(shù),要求將其中為0的元素刪除,并將保留的數(shù)據(jù)連續(xù)存放。解:DATASEGMENTSTRINGDB100<?>LENGDW100KEYDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAINPROCFARSTART:MOVAX,DATA MOVDS,AX MOVES,AX LEABX,STRING LEACX,LENG PUSHBX PUSHCX MOVAL,KEY CALLDELCHAR MOVAH,4CH INT21HMAINENDPDELCHARPROC PUSHBP MOVBP,SP PUSHSIPUSHDI CLD MOVSI,[BP+4] MOVCX,[SI] MOVDI,[BP+6] REPNESCASB JNEDONEMOVSI,[BP+4] DECWORDPTR[SI] MOVSI,DI DECDI REPMOVSBDONE:POPDIPOPSI POPBP RETDELCHARENDPCODEENDS ENDSTART編程,把以DATA為首址的兩個連續(xù)單元中的16位無符號數(shù)乘以10。解:DATASEGMENTBUFFERDBA3H,27HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,BUFFERMOVAX,[SI]SHLAX,1MOVBX,AXMOVCL,3MOVAX,[SI]SHLAX,CLADDAX,BX MOVBUFFER,AL MOVBUFFER+1,AHMOVAH,4CHINT21HCODEENDSENDSTART注:2X+23X=2X+8X=10X編程,比較兩個字串是否相同,并找出其中第一個不相等字符的地址,將該地址送BX,不相等的字符送AL。兩個字符串的長度均為200個字節(jié),M1為源串首地址,M2為目標串首地址。解:DATASEGMENTM1DB100DUP<?>DATAENDSEDATASEGMENTM2DB100DUP<?>EDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:EDATASTART:MOVAX,DATAMOVDS,AXMOVAX,EDATAMOVES,AXLEA SI,M1 ;〔SI←源串首地址LEA DI,M2 ;〔DI←目標串首地址MOV CX,200 ;〔CX←串長度CLD ;〔DF=0,使地址指針按增量方向修改REPE CMPSB ;若相等則重復比較ANDCX,0FFFFH;檢查〔CX是否等于零JZ STOP ;〔CX=0則轉(zhuǎn)STOPDEC SI ;〔SI-1,指向不相等單元MOV BX,SI ;〔BX←不相等單元的地址MOV AL,[SI] ;〔AL←不相等單元的內(nèi)容STOP:MOVAH,4CHINT21HCODEENDSENDSTART編程,在內(nèi)存的數(shù)據(jù)段中存放了100個8位帶符號數(shù),其首地址為TABLE,試統(tǒng)計其中正元素、負元素、和零元素的個數(shù),并分別將個數(shù)存入PLUS,MINUS,ZERO等3個單元中;解:DATASEGMENTTABLEDB100DUP<?>DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXXORALMOVPLUS,ALMOVMINUS,ALMOVZERO,ALLEASI,TABLEMOVCX,100CLDCHECK:LODSBORAL,AL JSX1JZX2INCPLUSJMPNEXTX1: INCMINUSJMPNEXTX2: INCZERONEXT: LOOPCHECK: MOVAH,4CHINT21HCODEENDSENDSTART編程,在數(shù)據(jù)段DATA1開始的80個連續(xù)的存儲單元中,存放80位同學某門課程的考試成績<0~100>。編寫程序統(tǒng)計成績≥90分的人數(shù),80~89分的人數(shù),70~79分的人數(shù),60~69分以及<60分的人數(shù)。將結(jié)果存放到DATA2開始的存儲單元中。解:DATASEGMENTDATA1DB80DUP<?>;假定學生成績已放入這80個單元中DATA2DB5DUP<0>;統(tǒng)計結(jié)果的存放單元DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,80;統(tǒng)計80個學生的成績LEASI,DATA1 LEADI,DATA2AGAIN:MOVAL,[SI]CMPAL,90;與90比較JCNEXT1;小于90分,轉(zhuǎn)NEXT1INCBYTEPTR[DI];否則90分以上的人數(shù)加1JMPSTO;轉(zhuǎn)循環(huán)控制處理NEXT1:CMPAL,80;與80比較JCNEXT2 ;小于80分,轉(zhuǎn)NEXT2INCBYTEPTR[DI+1];否則80分以上的人數(shù)加1 JMPSTONEXT2:CMPAL,70;與70比較 JCNEXT3 ;小于70分,轉(zhuǎn)NEXT3INCBYTEPTR[DI+2];否則70分以上的人數(shù)加1JMPSTONEXT3:CMPAL,60;與60比較JCNEXT4;小于60分,轉(zhuǎn)NEXT4INCBYTEPTR[DI+3];否則60分以上的人數(shù)加1JMPSTO;轉(zhuǎn)循環(huán)控制處理NEXT4NEXT4:INCBYTEPTR[DI+4];60分以下的人數(shù)加1STO:INCSI;指向下一個學生成績 LOOPAGAIN;循環(huán),直到所有成績都統(tǒng)計完MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART第五章習題及答案半導體存儲器按照工作方式可分為哪兩大類?它們的主要區(qū)別是什么?答:〔1半導體存儲器按照工作方式可分為ROM和RAM?!?它們之間的主要區(qū)別是:ROM在正常工作時只能讀出,不能寫入。RAM則可讀可寫。斷電后,ROM中的內(nèi)容不會丟失,RAM中的內(nèi)容會丟失。靜態(tài)RAM和動態(tài)RAM的存儲元的工作原理是什么?動態(tài)RAM為什么需要定時刷新?答:〔1靜態(tài)RAM的存儲元的工作原理是利用雙穩(wěn)態(tài)觸發(fā)器的工作原理保存信息;動態(tài)RAM的存儲元的工作原理是把電荷存儲到電容中來實現(xiàn)信息存儲。〔2DRAM的存儲元以電容來存儲信息,由于存在漏電現(xiàn)象,電容中存儲的電荷會逐漸泄漏,從而使信息丟失或出現(xiàn)錯誤。因此需要對這些電容定時進行"刷新"。存儲器的地址譯碼方法有哪兩種方式?答:存儲器的地址譯碼方法有:全地址譯碼和部分地址譯碼兩種。什么是位擴展?什么是字擴展?答:〔1當存儲芯片每個單元的字長小于所需內(nèi)存單元字長時,需要用多個芯片構(gòu)成滿足字長要求的存儲模塊,這就是位擴展。〔2當存儲芯片的容量小于所需內(nèi)存容量時,需要用多個芯片構(gòu)成滿足容量要求的存儲器,這就是字擴展。設計一個4KBROM與4KBRAM組成的存儲器系統(tǒng),芯片分別選用2716〔2K×8和6116〔2K×8,其地址范圍分別為4000H~4FFFH和6000H~6FFFH,CPU地址空間為64K,畫出存儲系統(tǒng)與CPU連接圖。答:分析:2716〔2KX811根地址線A0~~A106116〔2KX811根地址線A0~~A10CPU:64K=26X21016根地址線A0~~A15分別需芯片個數(shù):2716:4KX8/2KX8=26116:4KX8/2KX8=2將地址展開成二進制:①4KB的ROM地址空間4000H~4FFFHA15A14A13A12010000……0010001……1010010……0010011……12716〔2KX8:2片第一片地址范圍:4000~~47FFH第二片地址范圍:4800H~~4FFFH②4KB的RAM地址空間:6000H~6FFFHA15A14A13A011000……0011001……1011010……0011011……16116〔2KX8:2片第一片地址范圍:6000~~67FFH第二片地址范圍:6800H~~6FFFH利用:CPU的剩余地址線A15~A11,使用3:8譯碼器進行全地址譯碼,生成片選信號#Y0、#Y1、#Y4、#Y5,為四個芯片使用。CBA#YA15A01000#Y001001#Y101100#Y401101#Y5存儲系統(tǒng)與CPU連接圖如下圖所示:試利用全地址譯碼將6264芯片接到8088系統(tǒng)總線上,使其所占地址范圍為32000H~33FFFH。答:將地址范圍展開成二進制形式如下圖所示。 00110010000000000000 001100111111111111116264芯片的容量為8K×8,需要13根地址線A0~A12。而剩下的高7位地址應參加該芯片的地址譯碼。電路如圖所示:若采用6264芯片構(gòu)成內(nèi)存地址從20000H~8BFFFH的內(nèi)存空間,需要多少片6264芯片?答:從20000H~8BFFFH的內(nèi)存空間共有8BFFFH-20000H+1=6C000H〔432K個字節(jié),每個6264芯片的容量位8KB,故需432/8=54片。設某微型機的內(nèi)存RAM區(qū)的容量為128KB,若用2164芯片構(gòu)成這樣的存儲器,需多少2164芯片?至少需多少根地址線?其中多少根用于片內(nèi)尋址?多少根用于片選譯碼?答:〔1每個2164芯片的容量為64K×1bit,共需128/64×8=16片?!?128KB容量需要地址線17根?!?16根用于片內(nèi)尋址?!?1根用于片選譯碼。注意,用于片內(nèi)尋址的16根地址線要通過二選一多路器連到2164芯片,因為2164芯片是DRAM,高位地址與低位地址是分時傳送的。高速緩沖存儲器的工作原理是什么?為什么設置高速緩沖存儲器?答:〔1高速緩沖存儲器的工作原理是基于程序和數(shù)據(jù)訪問的局部性原理?!?設置高速緩沖存儲器為了緩解CPU和內(nèi)存之間存取速度的矛盾,將當前正在執(zhí)行的指令及相關(guān)聯(lián)的后繼指令集從內(nèi)存讀到Cache,使CPU執(zhí)行下一條指令時,從Cache中讀取。Cache的存在使CPU既可以以較快的速度讀取指令和數(shù)據(jù),又不至于使微機的價格大幅提高?,F(xiàn)有兩片6116芯片,所占地址范圍為61000H~61FFFH,試將它們連接到8088系統(tǒng)中。并編寫測試程序,向所有單元輸入一個數(shù)據(jù),然后再讀出與之比較,若出錯則顯示"Wrong!",全部正確則顯示"OK!"。答:連接如下圖所示。測試程序段如下:OK DB ‘OK!’,$WRONG DB ‘Wrong!’,$…MOV AX,6100HMOV ES,AXMOV DI,0MOV CX,1000H;4KMOV AL,55HREP STOSBMOV DI,0MOV CX,1000HREPZ SCASBJZ DISP_OKLEA DX,WRONGDISP:MOV AH,9INT 21HHLTDISP_OK:LEA DXJMPDISP第六章習題及答案什么是接口?其作用是什么?參考答案:接口是CPU與外部設備進行信息交換時,必需的一組邏輯電路及控制軟件。主要作用有:〔1信號電平轉(zhuǎn)換〔2數(shù)

溫馨提示

  • 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

提交評論