《匯編語言程序設(shè)計(jì)》練習(xí)題一_第1頁
《匯編語言程序設(shè)計(jì)》練習(xí)題一_第2頁
《匯編語言程序設(shè)計(jì)》練習(xí)題一_第3頁
《匯編語言程序設(shè)計(jì)》練習(xí)題一_第4頁
《匯編語言程序設(shè)計(jì)》練習(xí)題一_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《匯編語言程序設(shè)計(jì)》練習(xí)題一?一、簡(jiǎn)答題(40分)1、有兩個(gè)16位字1EE5H和2A3CH分別存放在8086微機(jī)的存儲(chǔ)器的000B0H和000B3H單元中,請(qǐng)用圖表示出它們?cè)诖鎯?chǔ)器里的存放情況。答:OOOBO

OOOBl

000B2

000B3000B42、8086微機(jī)的存儲(chǔ)器中存放信息如下圖所示。試讀出30022H和30024H字節(jié)單元的內(nèi)容,以及30021H和30022H字單元的內(nèi)容。答:字節(jié)單元:(30022H)=ABH,(30024H)=EFH字單元:(30021H)=AB34H,(30022H)=CDABH。3、寫出把首地址為BLOCK的字?jǐn)?shù)組的第6個(gè)字送到DX寄存器的指令。要求使用以下幾種尋址方式:(1)寄存器間接尋址(2)寄存器相對(duì)尋址(3)基址變址尋址答:MOVBX,OFFSETBLOCK+0AHMOVDX,[BX]MOVBX,0AHMOVDX,BLOCK[BX]MOVBX,OFFSETBLOCKMOVSI,0AHMOVDX,[BX][SI]4、說明下列語句所分配的存儲(chǔ)空間及初始化的數(shù)據(jù)值。(1)BYTE_VARDB'BYTE',12,-12H,3DUP(0,?,2DUP(1,2),?)(2)WORD_VARDW5DUP(0,1,2),?,-5,'BY','TE',256H答:BYTE_VAR42 59 54 45 0C EE00??- 01 02 01 02 ?? 00 ?? 01020102?? 00 ?? 01 02 -0102??WORD_VAR00 00 01 00 02 000000- 01 00 02 00 00 00 01 0002000000 01 00 02 00 -000001 00 02 00 ?? ??FBFF5942 45 54 56 02 -5、下面的宏指令CNT和INC1完成相繼字存儲(chǔ):CNTMACROA,BA&BDW?ENDMINC1MACROA,BCNTA,%BB=B+1ENDM請(qǐng)展開下列宏調(diào)用:C=0INC1DATA,CINC1DATA,C答:宏展開:2DATA0DW?2DATA1DW?6、那些寄存器可以用來指示存儲(chǔ)器地址?答:可以用來指示存儲(chǔ)器地址的寄存器有BX、SP、BP、DI、SI、IP、CS、DS、7、如果在一個(gè)程序開始執(zhí)行以前(CS)=0A7F0H(如十六進(jìn)制數(shù)的最高位為字母,則應(yīng)在其前加一個(gè)0),(IP)=2B40H,試問該程序的第一個(gè)字的物理地址是多少?答:該程序的第一個(gè)字的物理地址是0AAA40H。8、在0624單元內(nèi)有一條二字節(jié)JMPSHORTOBJ指令,如其中位移量為(1)27H,(2)6BH,(3)0C6H,試問轉(zhuǎn)向地址OBJ的值是多少?答:064DH0691H05ECH9、在ARRAY數(shù)組中依次存儲(chǔ)了七個(gè)字?jǐn)?shù)據(jù),緊接著是名為ZERO的字單元,表示如下:ARRAYDW23,36,2,100,32000,54,0ZERODW?(1)如果BX包含數(shù)組ARRAY的初始地址,請(qǐng)編寫指令將數(shù)據(jù)0傳送給ZERO單元。(2)如果BX包含數(shù)據(jù)0在數(shù)組中的位移量,請(qǐng)編寫指令將數(shù)據(jù)0傳送給ZERO單元。答:(1)(2)值;MOVAX,[BX+0CH]MOVZERO,AXMOVAX,ARRAY[BX]MOVZERO,AX按下面的要求寫出程序的框架。(1)數(shù)據(jù)段的位置從0E000H開始,數(shù)據(jù)段中定義一個(gè)100字節(jié)的數(shù)組,其

類型屬性既是字又是字節(jié);堆棧段從小段開始,段組名為STACK;代碼段中指定段寄存器,指定主程序從1000H開始,給有關(guān)段寄存器賦程序結(jié)束。DATASGSEGMENTAT0E000HWORD_ARRAYLABELWORDBYTE_ARRAYDB100DUP(?)DATASGENDSSTACKSGSEGMENTPARASTACK'STACK'DW32DUP(?)TOSLABELWORDSTACKSGENDSCODESGSEGMENTORG1000HMAINPROCFARASSUMECS:CODESG,DS:DATASG,ES:DATASG,SS:STACKSGSTART:MOVAX,STACKSGMOVSS,AXMOVSP,OFFSETTOSPUSHDSSUBAX,AXPUSHAXMOVAX,DATASGMOVDS,AXMOVES,AXRETMAINENDPCODESGENDSENDSTART編寫一條宏指令CLRB,完成用空格符將一字符區(qū)中的字符取代的工作。字符區(qū)首地址及其長(zhǎng)度為變?cè)4穑篊LRBMACRON,ARRAYCLDMOVCX,NMOVAL,20HLEADI,ARRAYREPSTOSBENDM下列操作可使用哪些寄存器?加法和減法循環(huán)計(jì)數(shù)乘法和除法保存及使用段地址表示運(yùn)算結(jié)果為0將要執(zhí)行的指令地址答:⑴AX、BX、CX、DX、AH、AL、BH、BL、CH、CL、DH、DL、SP、BP、DI、SI(注意:學(xué)生盡量不要用SP參與加減運(yùn)算)(2)CX(3)DX、AX、AH、AL(4)CS、DS、ES、SS(5)FLAGS(6)IP(7)SS、SP、BP下面幾種說法中唯一正確的是哪一種?A、單獨(dú)用16位地址線提供的地址可以訪問1M字節(jié)存儲(chǔ)器空間。B、數(shù)據(jù)段段首址可以是00000~FFFFF中任意一個(gè)地址。C、用WS、EDrT等編輯軟件可以編寫匯編程序。D、堆棧段段首地址可以是FFFE0H。答:唯一正確的是D。設(shè)當(dāng)前數(shù)據(jù)段寄存器的內(nèi)容為1B00H,在數(shù)據(jù)段的偏移地址2000H單元內(nèi),含有一個(gè)內(nèi)容為0FF10H和8000H的指針,它們是一個(gè)16位變量的偏移地址和段地址,試寫出把該變量裝入AX的指令序列,并畫圖表示出來。答:MOVBX,2000HLESDI,[BX]MOVAX,ES:[DI]15、給出賦值語句如下:ALPHAEQU100BETAEQU25GAMMAEQU2下列表達(dá)式的值是多少?ALPHA*100+BETAALPHAMODGAMMA+BETA(ALPHA+2)*BETA-2(BETA/3)MOD5(ALPHA+3)*(BETAMODGAMMA)答:(1)10025252548310316、試編制宏定義,要求把存儲(chǔ)器中的一個(gè)用EOT字符結(jié)尾的字符串傳送到另一個(gè)存儲(chǔ)區(qū)中去。答:SENDMACROSCHARS,DCHARSLOCALNEXT,EXITPUSHAXPUSHSIMOVSI,0NEXT:MOVAL,SCHARS[SI]MOVDCHARS[SI],ALCMPAL,24HJZEXITINCSIJMPNEXTEXIT:POPSIPOPAXENDM二、寫程序段題(20分)1、試編寫一程序,要求能從鍵盤接收一個(gè)個(gè)位數(shù)N,然后響鈴N次(響鈴的ASCII碼為07)。答:codesegmentassumecs:codemainprocfarstart:pushdsmovax,0pushaxmovah,1int21hsubal,30hcmpal,0jzexitmovcl,almovch,0again:movah,2movdl,7int21hloopagainexit:retcodeendsendstart2、設(shè)有10個(gè)學(xué)生的成績(jī)分別是76,69,64,90,73,88,99,63,100和80分。試編制一個(gè)子程序統(tǒng)計(jì)60~69分,70~79分,80~89分,90~99分和100分的人數(shù)并分別存放到S6,S7,S8,S9和S10單元中。答:dsegsegmentnumdw76,69,84,90,73,88,99,63,100,80ndw10dw0dw0dw0dw0s10dw0dsegendscodesegmentmainprocfarassumecs:code,ds:dsegstart:pushdssubax,axpushaxmovax,dsegmovds,axcallsub1retsub1procnearpushaxpushbxpushcxpushsimovsi,0movcx,nnext:movax,num[si]movbx,10divblmovbl,alcbwsubbx,6salbx,1incs6[bx]addsi,2loopnextpopsipopcxpopbxpopaxretsub1endpendstart3、在STRING到STRING+99單元中存放著一個(gè)字符串,試編制一程序測(cè)試該字符串中是否存在數(shù)字。如有,則把CL的第5位置1,否則將該位置0。答:movdx,100movsi,0repeat:moval,string[si]cmpal,30hjbgooncmpal,39hjagoonorcl,20h;(cl)51jmpexitgoon:incsidecdxjnzrepeatandcl,0dfh;(cl)50exit:4、設(shè)有10個(gè)學(xué)生的成績(jī)分別是76,69,64,90,73,88,99,63,100和80分。試編制一個(gè)子程序統(tǒng)計(jì)60~69分,70~79分,80~89分,90~99分和100分的人數(shù)并分別存放到S6,S7,S8,S9和S10單元中。答:dsegsegmentnumdw76,69,84,90,73,88,99,63,100,80ndw10dw0dw0dw0dw0s10dw0dsegendscodesegmentmainprocfarassumecs:code,ds:dsegstart:pushdssubax,axpushaxmovax,dsegmovds,axcallsub1retmainendpsub1procnearpushaxpushbxpushcxpushsimovsi,0movcx,nnext:movax,num[si]movbx,10divblmovbl,alcbwsubbx,6salbx,1incs6[bx]addsi,2loopnextpopsipopcxpopbxpopaxretsub1endpcodeendsendstart5.有一個(gè)首地址為MEM的100D字?jǐn)?shù)組,試編制程序刪除數(shù)組中所有為零的項(xiàng),并將后續(xù)項(xiàng)向前壓縮,最后將數(shù)組的剩余部分補(bǔ)上零。答:movcx,100leadi,memmovax,0cldcomp:repnescaswjcxzexitpushcxmovsi,disubdi,2movbx,direpmovswmovwordptr[di],0movdi,bxpopcxjmpcompexit:6.設(shè)有10個(gè)學(xué)生的成績(jī)分別是76,69,64,90,73,88,99,63,100和80分。試編制一個(gè)子程序統(tǒng)計(jì)60~69分,70~79分,80~89分,90~99分和100分的人數(shù)并分別存放到S6,S7,S8,S9和S10單元中。答:dsegsegmentnumdw76,69,84,90,73,88,99,63,100,80ndw10dw0dw0dw0dw0s10dw0dsegendscodesegmentmainprocfarassumecs:code,ds:dsegstart:pushdssubax,axpushaxmovax,dsegmovds,axcallsub1retmainendpsub1procnearpushaxpushbxpushcxpushsimovsi,0movcx,nnext:movax,num[si]movbx,10divblmovbl,alcbwsubbx,6salbx,1incs6[bx]addsi,2loopnextpopsipopcxpopbxpopaxretsub1endpcodeendsendstart三、讀程序題(20分)1、分析下面的程序,畫出堆棧最滿時(shí)各單元的地址及內(nèi)容。;********************************************************s_segsegmentat1000h;definestacksegmentdw200dup(?)toslabelwords_segend;********************************************************;c_segsegment;definecodesegmentassumecs:c_seg,ss:s_segmovax,s_segmovss,axmovsp,offsettos;pushdsmovax,0pushax...pusht_addrpushaxpushfPopfpopaxpopt_addrretc_segends;endofcodesegment;*************************************************;endc_seg;endofassembly答:iooɑ:θis6

ioo?:θissiooa:oisA1OOO;O18Cιc∣mc∣儂

1000:01902、試分析下面的程序段完成什么功能?MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL答:把(DX)(AX)中的雙字左移四位(乘以16)。3.分析下面的程序,畫出堆棧最滿時(shí)各單元的地址及內(nèi)容。;********************************************************s_segsegmentat1000h;definestacksegmentdw200dup(?)toslabelwords_segend;********************************************************;c_segsegment;definecodesegmentassumecs:c_seg,ss:s_segmovax,s_segmovss,axmovsp,offsettos;pushdsmovax,0pushax...pusht_addrpushaxpushf...Popfpopaxpopt_addrretc_segends;endofcodesegment;*************************************************;endc_seg;endofassembly答:lθθ?:θise (FLAGS)lθθ?:θiss詞iooa:oisAlθθ?:θise 0 iooa:oisE CDΞi iooa:oi9o4.試分析下面的程序段完成什么功能?MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL答:把(DX)(AX)中的雙字左移四位(乘以16)。5.分析下面的程序,畫出堆棧最滿時(shí)各單元的地址及內(nèi)容。;********************************************************;s_segsegmentat1000h;definestacksegmentdw200dup(?)toslabelwords_segend;********************************************************;c_segsegment;definecodesegmentassumecs:c_seg,ss:s_segmovax,s_segmovss,axmovsp,offsettospushdsmovax,0pushax...pusht_addrpushaxpushfPopfpopaxpopt_addrretc_segends;endofcodesegment;*************************************************;endc_seg;endofassembly答:1000:01s?1000:01≡s1000:01SA1000:01SC1000:01SE1000:01906.試分析下面的程序段完成什么功能?MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL答:把(DX)(AX)中的雙字左移四位(乘以16)。四、寫完整程序題(20分)一,已知數(shù)組A包含15個(gè)互不相等的整數(shù),數(shù)組B包含20個(gè)互不相等的整數(shù)。試編制一程序,把既在A中又在B中出現(xiàn)的整數(shù)存放于數(shù)組C中。答:adw15dup(?)bdw20dup(?)cdw15dup(?)movsi,0;Si為數(shù)組A的指針movbx,0;bx為數(shù)組C的指針movcx,15loop1:movdi,0;di為數(shù)組B的指針pushcxmovcx,20movax,a[si]loop2:cmpb[di],axjnenomovc[bx],axaddbx,2jmpnextno:adddi,2looploop2ext:addsi,2popcxlooploop1二.編寫一個(gè)有主程序和子程序結(jié)構(gòu)的程序模塊。子程序的參數(shù)是一個(gè)N字節(jié)數(shù)組的首地址TABLE,數(shù)N及字符CHAR。要求在N字節(jié)數(shù)組中查找字符CHAR,并記錄該字符的出現(xiàn)次數(shù)。主程序要求從鍵盤接收一串字符以建立字節(jié)數(shù)組TABLE,并顯示字符CHAR以及它在TABLE數(shù)組中出現(xiàn)的次數(shù)(為簡(jiǎn)化起見,假設(shè)出現(xiàn)次數(shù)<=15,可以用十六進(jìn)制形式把它顯示出來)。答:datasegmentmaxlendb40ndb?tabledb40dup(?)Chardb'a';查找字符‘a(chǎn)evenaddrdw3dup(?)dataendscodesegmentassumecs:code,ds:datamainprocfarstart:pushdsmovax,0pushaxmovax,datamovds,axleadx,maxlenmovah,0ahint21h;從鍵盤接收字符串movaddr,offsettabl

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論