匯編語言試題_第1頁
匯編語言試題_第2頁
匯編語言試題_第3頁
匯編語言試題_第4頁
匯編語言試題_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言模擬試題及答案一,單項選擇題.指令JMPFARPTRDONE屬于CA.段內轉移直接尋址B.段內轉移間接尋址C.段間轉移直接尋址D.段間轉移間接尋址.下列敘述正確的是CA.對兩個無符號數進行比較采用CMP指令,對兩個有符號數比較用CMPS指令B.對兩個無符號數進行比較采用CMPS指令,對兩個有符號數比較用CMP指令C.對無符號數條件轉移采用JAE/JNB指令,對有符號數條件轉移用JGE/JNL指令D.對無符號數條件轉移采用JGE/JNL指令,對有符號數條件轉移用JAE/JNB指令解析對于無符號數和有符號數的比較都采用CMP指令;CMPS指令是串比較指令;對兩個無符號數的條件轉移指令應是:

2、JAE、JNB、JBE、JNA;對兩個有符號數的條件轉移指令應是:JGE、JNL、JLE、JNG。.一個有128個字的數據區,它的起始地址為12ABH:00ABH,請給出這個數據區最末一個字單元的物理地址是工A12CSBHB12B6BHC12C59HD12BFEH解析末字與首字相隔(1281=)127個字,且每個字占用2個字節,因此末字單元的物理地址應為:首字單元的物理地址+(1281)X2即12ABHX10H+00ABH十(1281)X2=12C59H。.在下列指令的表示中,不正確的是AMOVAL,BX+SIBJMPSHORTDONICDECBXDMULCL解析當只有一個存儲器操作數時,這個

3、操作數的類型不明確,例如選項C中的BX,沒有明確的說明訪問該存儲單元的類型,此時存儲器操作數就必須需用類型說明,如DECBYTEPTRBX或DECWORDPTRBX但是在題目的選項C中,沒有指出存儲器操作數類型,所以該指令是不正確的;而其它選項中的指令均是正確的。.在進行二重循環程序設計時,下列描述正確的是AA.外循環初值應置外循環之外;內循環初值應置內循環之外,外循環之內B.外循環初值應置外循環之內;內循環初值應置內循環之內C.內、外循環初值都應置外循環之外D.內、外循環初值都應置內循環之外,外循環之內解析循環參數置初值,應在進入循環以前給出。6.條件轉移指令JNE的測試條件為AAZF=0B

4、CF=0CZF=1DCF=1解析略。8086CPU在基址加變址的尋址方式中,變址寄存器可以為DA.BX或CXB.CX或SIC.DX或SID.SI或DI.已知BX=2000H,SI=1234H,則指令MOVAX,BX+SI+2的源操作在()中。AA.數據段中偏移量為3236H的字節B.附加段中偏移量為3234H的字節C.數據段中偏移量為3234H的字節D.附加段中偏移量為3236H的字節解析指令中的源操作數的尋址方式是相對基址變址尋址,且由于其中的基址寄存器采用的是BX,所以源操作數是在數據段中,其偏移量為:BX+SI+2=2000H+1234H+2=3236H.執行如下程序:MOVAX,0MO

5、VBX,1MOVCX,100A:ADDAX,BXINCBXLOOPAHLT執行后(BX)=CA99B100C101D102解析1)在進入循環之前,有三條指令分別初始化寄存器:AX為0、BX為1、CX為100;2)由于循環的控制部分采用的是LOOP指令,該指令有使CX減1,并判斷其是否為0的功能,所以可知該循環的執行次數為100次;3)循環體的主要功能是每次循環使AX中的內容累加BX的內容,并使BX的內容加1。4)直到最后一次(即第100次)循環時,加到AX中的BX的內容為100,且使BX加1,即變為101后退出循環體。所以當執行完該段程序后,BX的內容為101。5)該段程序的功能是(AX)=1

6、+2+100=5050.上題的程序執行后(AX)=_B_A5000B5050C5100D5150解析請參看上題中的分析。正確答案:B。11對于下列程序段:AGAIN:MOVAL,SIMOVES:DI,ALINCSIINCDILOOPAGAIN也可用指令完成同樣的功能。AAREPMOVSBBREPLODSBCREPSTOSBDREPESCASB解析該段程序的功能是將SI所指向的數據段中的數據順序傳送給DI所指向的附加段的一段數據區中,并且每次傳送一個字節,即實現了字節串傳送的功能,所以也可以使用REPMOVSB指令來完成同樣的功能。12下面指令序列執行后完成的運算,正確的算術表達式應是MOVAL

7、,BYTEPTRXSHLAL,1DECALMOVBYTEPTRY,ALDAy=x2+1Bx=y2+1Cx=y2-1Dy=x2-1解析該段程序的第一條指令的功能是將X傳送給AL;第二條指令的功能是將AL的內容左移1位,即使得AL的內容擴大2倍;第三條指令的功能是使AL的內容減1;第四條指令的功能是將AL傳送給Y;綜上所述該程序完成的運算是Y=2X-1。13.在一段匯編程序中多次調用另一段程序,用宏指令比用子程序實現起來。_BA.占內存空間小,但速度慢B.占內存空間大,但速度快C.占內存空間相同,速度快D.占內存空間相同,速度慢解析1)宏指令簡化程序的書寫,不節省程序存儲空間,但執行時間比子程序短

8、。2)子程序簡化程序的書寫,也節省程序的存儲空間,但執行時間比宏指令長。14.在程序執行過程中,IP寄存器中始終保存的是BA.上一條指令的首地址B.下一條指令的首地址C.正在執行指令的首地址D.需計算有效地址后才能確定地址解析在程序運行過程中,它始終指向下一條指令的首地址,它與CS代碼段寄存器聯合確定下一條指令的物理地址。15.PSW寄存器中共有位條件狀態位,有位控制狀態位。AA6、3B3、6C8、4D4、8解析PSW有6位條件狀態位:AF、CF、ZF、PF、SF、OF;PSW有3位控制狀態位:IF、TF、DF.下列指令執行時出錯的是_A_A.ADDBUF1,BUF2B.JMPDWORDPTR

9、DATBXC.MOVAX,BX+DINUMD.TESTAL,08H解析ADD指令的兩個操作數不能同時是存儲器操作數,所以選項A中的指令是錯誤的。.已知6*)=1234H,執行下述三條指令后,(AX)=DMOVBX,AXNEGBXADDAX,BXA.1234HB.0EDCCHC.6DCCHD.0000H解析第一條指令的功能是將AX-BX,即BX中的內容為1234H;第二條指令的功能是對BX求補,即BX中的內容變為一1234H;第三條指令的功能是AX+BX-AX,即1234H+(-1234H)=0-AX;所以執行三條指令后,AX的內容為0。.在下列指令中,指令的執行會影響條件碼中的CF位。DAJM

10、PNEXTBJCNEXTCINCBXDSHLAX,1解析JMP、JC指令不任何影響狀態標志位;INC指令執行結果除不影響CF外,其余狀態標志位(AF、OF、PF、SF、ZF)都受影響。SHL指令使CF=O,OF=O,影響ZF、SF、PF標志位,AF無定義。.串指令中的目的操作數地址是由提供。ASS:BPBDS:SICES:DIDCS:IP.將DX的內容除以2,正確的指令是CADIV2BDIVDX,2CSARDX,1DSHLDX,1解析選項A中的的指令執行的操作是:AX/2;選項B中的的指令書寫格式不正確;選項C中的的指令執行的操作是:將DX的內容右移一位,將使DX的內容縮小為原先的1/2,即將

11、DX的內容除以2;選項D中的的指令執行的操作是:將DX的內容左移一位,將使DX的內容擴大為原先的2倍,即將DX的內容乘以2。解析(1)指令:SHRDX,1使DX的內容向右移動了一位,因此DX的內容變為000000000101110即005CH。(2)指令:RCRDL,1使DL的內容向右循環帶進位移動了一位,DH的內容不變,因此DX的內容變為0000000011011100即00DCH。(3)指令:RCLDX,CL使DX的內容向左循環帶進位移動了3位,因此DX的內容變為0000010111001100即05CCH。2.寫出完成下述功能的程序段:(1)傳送25H到AL寄存器(2)將AL的內容乘以2

12、(3)傳送15H到BL寄存器(4)AL的內容乘以BL的內容并請寫出最后(AX)=?答:(1)MOVAL,25H(2)SHLAL,1(3)MOVBL,15H(4)MULBL最后,(AX)=612H=1554解析1)將AL的內容左移1位,將使它的內容擴大2倍,即使AL的內容乘以2。2)最后,AX的內容應為25H*2*15H=612H=15543.寫一程序段,求雙字長數DX:bX的相反數。答:NEGDXNEGAXSBBDX,0解析求雙字長數DX:AX相反數,即對其求補,所以應實現的操作是:(DX:AX)-0-(DX:AX)即0:0-)DX:AX將上面的算式分解后,即為對DX求補,對AX求補,并從DX

13、中減去將AX求補時產生的借位。所以相應的指令就是:NEGDXNEGAXSBBDX,0三,程序分析題(每小題6分,共36分)1現有如下程序段:DATASEGMENTDA3EQU1234HORG0020HDA4EQU-DA2DA1DW12H,23HDA5DB31H,32HDA2DB11H,21HDATAENDS注意:程序是從左到右看,先把左邊的程序段看完了再看右邊的程序段。下面的程序段以相同的方法進行讀解。請回答:(1)該程序段已占有的存儲字節數是多少?(2)符號名DA4的值是多少?符號名DA5的值是多少?答:(1)該程序段已占有的存儲字節數是8個字節。符號名DA4的值為2,符號名DA5的值是00

14、26H。解析1)偽指令ORG0020H,設置存儲單元起始偏移地址為0020H;2)符號名DA1的值(即所對應存儲單元的偏移地址)是0020H,該數據區的類型為字,有2個字數據,所以共占用4個字節;3)符號名DA2的值(即所對應存儲單元的偏移地址)是0024H,該數據區的類型為字節,有2個字節數據,所以共占用2個字節;4)經EQU定義的符號名DA3、DA4不占用存儲空間“$”用來表示當前地址計數器的值(0026H),可它們的值分別為DA3=1234H,DA4=2。5)符號名DA5的值(即所對應存儲單元的偏移地址)是0026H,該數據區的類型為字節,有2個字節數據,所以共占用2個字節;6)綜上所述

15、,該程序段共占有的存儲字節數8個字節。2執行下列程序段后,回答問題。ORG1221HMOVBX,OFFSETNUMNUMDW12HMOVCL,BYTEPTRNUM+1MOVCH,TYPENUMMOVAX,NUMHLT請問:(AX)=,(BX)=,(CX)=。答:(AX)=0012H(BX)=1221H(CX)=0200H解析1)指令MOVAX,NUM的功能是將NUM單元的字內容12H傳送給AX,使得(AX)=0012H;2)指令MOVBX,OFFSETNUM的功能是將NUM單元的偏移地址1221H傳送給BX,使得(BX)=1221H;3)指令MOVCL,BYTEPTRNUM+1的功能是將NUM

16、+1(1222H)單元的字節內容(即NUM字單元的高字節)00H傳送給CL,使得(CL)=00H;4)指令MOVCL,TYTENUM的功能是將NUM字單元的類型字節數2傳送給CH,使得(CH)=02H;5)綜合第4和第5點,可知CX寄存器的內容為0200H。3閱讀如下程序:ADRRDBXXH,XXH,XXHCMPADRRBX,0NUMEQU-ADRRLOOPZDONRETTDB?JNZNEXTMOVBL,OFFHMOVCX,NUMNEXT:MOVRETT,BLMOVBX,-1HLTDON:INCBX請問:(1)該程序完成的功能是什么?(2)程序執行后指出RETT字節單元中的內容是什么?答:(1

17、)在以ADRR為起始地址的數組中,查找第一個非0數據。若找到則將第一個非0數據在數組中的偏移量送入RETT單元中;若無非0數據,則將OFFH送入RETT單元中。解析1)程序的前3條指令,用于定義數據:以ADRR為起始地址的數組;NUM的值為ADRR數組的數據個數;RETT是一個空的字節單元2)該程序的主體是一個循環,該循環的主要功能是在數組ADRR中第一個非0數據。如果是由于找到,則將第一個非0數據在數組中的偏移量送入RETT單元中;若沒找到非0數據,則將OFFH送入RETT單元中。4現有一子程序:SUB1PROCPLUS:TESTBL,80HTESTAL,80H(檢測AL中的數值最高位)JE

18、EXITOJEPLUSXCHANGE:XCHGAL,BLTESTBL,80HEXITO:RETJNEEXITOSUB1ENDPJMPXCHANGE試回答:(1)子程序的功能是什么?(2)若調用子程序前AL=9AH,BL=77H,則返回主程序時,AL=,BL=。答:(1)子程序的功能是判別AL和BL中的數是否為異號數,當為異號時交換,否則不變。AL=77H,BL=9AH解析1)數據是以二進制的形式存儲在計算機中的。數據對應的二進制數的最高位是數據的符號位:若為0表示該數為正數,若為1表示該數為負數;2)TESTAL,80H和TESTBL,80H指令是在測試AL和BL的最高位(即符號位)的狀態是1

19、還是0。3)若兩個數的最高位(即符號位)的狀態不同的時候(即兩數為異號),則執行XCHANGE標號所對應語句,即交換AL和BL中的內容。4)否則若兩個數的最高位(即符號位)的狀態相同的時候(即兩數為同號),則執行EXIT0標號所對應語句,程序結束,即AL和BL中的內容不被。5)所以第二問中,AL=9AH,BL=77H:AL中的數據的最高位為1,BL中的數據的最高位為0,即兩個數為異號,所以要交換AL和BL中的內容,即AL=77H,BL=9AH。5閱讀程序段:BLOCKDB20H,1FH,08H,81H,OFFHLOP1:CMPAL,SI+1RESULTDB?JNGNEXTMOVAL,SI+1S

20、TART:LEASI,BLOCKNEXT:INCSIMOVCX,SILOOPLOP1INCSIMOVRESULT,ALMOVAL,SIHLT請問:(1)該程序完成的功能是什么?(2)該程序循環的次數是多少?答:(1)該程序完成的功能是從20H(32)個有符號數中找出最小的數送入RESULT單元中。該程序的循環次數是1FH(31)。解析1)指令LEASI,BLOCK的功能是使SI指向了BLOCK數組的首單元;2)指令MOVCX,SI的功能是將SI指向單元的內容20H傳送給CX,即(CX)=20H;其后又有指令DECCX,使得CX的內容變為1FH;再看循環體的控制部分采用的指令是LOOP,可知,該

21、循環的執行次數為1FH次;3)循環體的主要功能是將AL中的內容與SI所指向數組的每一個數據進行比較,從數組中選出最小數保存在AL中。4)由于比較后采用的轉移指令是JNG,所以該程序處理的顯然是一組有符號的數據。6.閱讀如下程序段,回答所提出的問題,假定X1,X2,XN為無符號數。ORG100HBLOKDWX1,X2,XNCOUNTEQU(-BLOLOK)/2RESULTDWCOUNT,?LEABX,BLOK-2MOVCX,RESULTXORAX,AXGOON:ADDBX,2CMPAX,BXJAENEXTMOVAX,BXNEXT:LOOPGOONMOVRESULT+2,AX程序段執行完,回答下述

22、問題RESULT+2字存儲單元的內容=BX=程序循環次數=答:RESULT+2字存儲單元的內容是MAX(X1,X2,XN)BX=100H+2X(COUNT-1)程序循環次數=COUNT解析1)該程序段的開始4條指令定義了以下數據:以BLOK為起始地址的字數組,該數組首單元的偏移地址(即BLOK)為100H;COUNT的值為BLOK字數組的數據個數;RESULT存儲區的第一個字的內容為COUNT,即BLOK字數組的數據個數;第二個字的內容為空。2)循環體的主要功能是從BLOK字數組中找出最大數送入RESULT的第二個字單元中;3)循環次數為數組中數據的個數,即COUNT個。4)當循環結束后,BX

23、中將存放最后一個字數據的偏移地址:首字偏移地址+末字與首字的相隔的字節數,即100H+2X(COUNT-1)。四,程序填空題1.在表TABLE處存放著N個無符號字節數,求表中前10個字節數的總和并保存在AX寄存器中。如果總和值超過AX寄存器的容量,則置AX寄存器內容不變。請在程序中的空格處填入適當指令使其完整。LEABX,TABLE(2)MOVCX,10JCEND0MOVSUM,AXDON:INCBXMEXT:(1)(3)ADCAH,0ENDO:HLTJNCDON答:(1)ADDAL,BX(2)MOVAX,SUM(3)LOOPNEXT解析1)程序的前三條指令的功能分別是:將表TABLE的首址傳

24、送給BX;將循環次數傳送給計數器CX;將AX的原值保存在SUM單元中;以上指令實現了設置循環初始參數的功能。2)標號NEXT所對應的第一個空白處就是循環體的第一條指令。根據題目的要求一求表中前10個字節數的總和,可知循環每次應實現將表TABLE中的數據按字節加法的方式進行累加到AL中,并且將字節加法產生的進位加到AH中。所以第一個空白處應填入指令:ADDAL,BX3)程序的第五條指令實現的是判斷求得的和是否超過AX寄存器的容量。4)如果有進位(即已超過AX寄存器的容量),則執行第二個空白處的指令,根據題目當出現此種情況時,使AX內容不變,即恢復其原值,因此第二個空白處應填入指令:MOVAX,S

25、UM。5)如果沒有進位(即未超過AX寄存器的容量),則轉DON。程序將使BX的內容加1,即使其指向下一個表中的字節數據。接下來就應該將計數器CX減1,并判斷是否繼續下一次循環。因此,第三個空白處應填入指令:LOOPNEXT。2.BEG為起始地址的存儲區域中存放有100個字節數據,現將其首、尾顛倒過來,重新排放這100個字節數據。請在程序中的空格處填入適當的指令使其完整。MOVCX,32HLEASI,BEGMOVDI,SI(1)DON:MOVAL,SI(2)MOVSI,AL(3)DECDILOOPDONHLT答:(1)ADDDI,99(2)XCHGAL,DI(3)INCSI解析1)題目要求:將以

26、BEG為起始地址的區域中的100個字節數據首尾顛倒存放。例如,如果原先為X1,X2,X3,X98,X99,X100,則首尾顛倒后將變為X100,X99,X98,X3,X2,X1。2)顛倒的方法是:將X1與X100對調、X2與X99對調、X3與X98對調、,即將前一半的數據與后一半相應位置的數據對調。這個過程每次處理兩個數據,所以共有(100/2=)50對數據對調。3)根據以上分析可知,這個循環將進行50(32H)次,每次將相應的兩個數據對調,這兩個數據可分別由兩個寄存器來指向。4)閱讀程序可知,SI寄存器指向前一半中的某個數據,DI寄存器指向后一半中對應的數據。在循環的初始化部分,使應計數器CX的值為50(或32H),SI指向第一個數,DI指向最后一個數,所以第一個空白處應填入指令:ADDDI,99。5)在循環體中,應首先交換SI和DI所指向單元的內容,然后使指針SI加1、DI減1,所以第二、三個空白處應填入指令:XCHGAL,DIINCSI五,編制程序題(第1小題6分,第2小題14分,共20分)1.試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來。答:1.BEGIN:MOVAH,1INT21HCMPAL,aJBSTOPCMPAL,zJASTOPSUBAL,20HMOVDL,ALMOVAH,2

溫馨提示

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

評論

0/150

提交評論