IBMP匯編語言課后復(fù)習(xí)題答案(第二版)_第1頁
IBMP匯編語言課后復(fù)習(xí)題答案(第二版)_第2頁
IBMP匯編語言課后復(fù)習(xí)題答案(第二版)_第3頁
IBMP匯編語言課后復(fù)習(xí)題答案(第二版)_第4頁
IBMP匯編語言課后復(fù)習(xí)題答案(第二版)_第5頁
已閱讀5頁,還剩205頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一章.習(xí)題1.1用降冪法和除法將下列十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)和十六進(jìn)制數(shù):(1)369(2)10000(3)4095(4)32767(2)10000=10011100010000B=2710H(3)4095=111111111111B=FFFH(4)32767=111111111111111B=7FFFH1.2將下列二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)和十進(jìn)制數(shù):(1)101101(2)10000000(3)1111111111111111(4)11111111(2)10000000B=80H=128(3)1111111111111111B=FFFFH=65535(4)11111111B=FFH=2551.3將下列十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)和十進(jìn)制數(shù):(1)FA(2)5B(3)FFFE(4)1234(2)5BH=1011011B=91(3)FFFEH=1111111111111110B=65534(4)1234H=1001000110100B=46601.4完成下列十六進(jìn)制數(shù)的運(yùn)算,并轉(zhuǎn)換為十進(jìn)制數(shù)進(jìn)行校核:(1)3A+B7(2)1234+AF(3)ABCD-FE(4)7AB×6F(2)1234+AFH=12E3H=4835(3)ABCD-FEH=AACFH=43727(4)7AB×6FH=35325H=2178931.5下列各數(shù)均為十進(jìn)制數(shù),請(qǐng)用8位二進(jìn)制補(bǔ)碼計(jì)算下列各題,并用十六進(jìn)制數(shù)表示其運(yùn)算結(jié)果。(1)(-85)+76(2)85+(-76)(3)85-76(4)85-(-76)(5)(-85)-76(6))(-85)+76=10101011B+01001100B=11110111B=0F7H;CF=0;OF=0(2)85+(-76)=01010101B+10110100B=00001001B=09H;CF=1;OF=0(3)85-76=01010101B-01001100B=01010101B+10110100B=00001001B=09H;CF=0;OF=0OF=01.6下列各數(shù)為十六進(jìn)制表示的8位二進(jìn)制數(shù),請(qǐng)說明當(dāng)它們分別被看作是用補(bǔ)碼表示的帶符號(hào)數(shù)或D8(2)FF1.7下列各數(shù)均為用十六進(jìn)制表示的8位二進(jìn)制數(shù),請(qǐng)說明當(dāng)它們分別被看作是用補(bǔ)碼表示的數(shù)或字(1)4F(2)2B(3)73(4)59Forexample,Thisisanumber3692.答:46H6FH72H20H65H78H61H6DH70H6CH65H2CH0AH0DH54H68H69H73H20H69H73H20H61H20H6EH75H6DH62H65H72H20H33H36H39H32H2EH0AH0DH第二章.習(xí)題存儲(chǔ)器存儲(chǔ)器2AH2AH答:存儲(chǔ)器里的存放情況如右上圖所示。2.2題的信息存放情況存儲(chǔ)器字單元的容為2.2題的信息存放情況存儲(chǔ)器ABH答:3017:000A、3015:002A和3010:007A的存儲(chǔ)單元的物理地址都是3017AH。母,則應(yīng)在其前加一個(gè)0)(IP)=2B40H,試問該程序的第一個(gè)字的物理2.3題的信息存放情況答:該程序的第一個(gè)字的物理地址是2.3題的信息存放情況C>debugAX=0000BX=0000CX=0079DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=10E4ES=10F4SS=21F0CS=31FFIP=0100NVUPDIPLNZNAPONC(1)加法和減法數(shù)據(jù)寄存器等(2)循環(huán)計(jì)數(shù)CX(3)乘法和除法AX、DX,乘數(shù)和除數(shù)用其他寄存器或存儲(chǔ)器(4)保存段地址段寄存器(5)表示運(yùn)算結(jié)果為0ZF=1(6)將要執(zhí)行的指令地址CS:IP(7)將要從堆棧取出數(shù)據(jù)的地址SS:SP答:答案見題目的右邊。堆棧段代碼段2.6題的存儲(chǔ)器分段示意圖請(qǐng)將下列左邊的項(xiàng)和右邊的解釋聯(lián)系起來(把所選字母放在括號(hào)中):(1)CPU(M)A.保存當(dāng)前棧頂?shù)刂返募拇嫫鳌?2)存儲(chǔ)器(C)B.指示下一條要執(zhí)行的指令的地址。(3)堆棧(D)C.存儲(chǔ)程序、數(shù)據(jù)等信息的記憶裝置,微機(jī)有RAM和ROM兩種。(4)IP(B)D.以后進(jìn)先出方式工作的存儲(chǔ)空間。(5)SP(A)E.把匯編語言程序翻譯成機(jī)器語言程序的系統(tǒng)程序。(6)狀態(tài)標(biāo)志(L)F.唯一代表存儲(chǔ)空間中每個(gè)字節(jié)單元的地址。(7)控制標(biāo)志(K)G.能被計(jì)算機(jī)直接識(shí)別的語言。(8)段寄存器(J)H.用指令的助記符、符號(hào)地址、標(biāo)號(hào)等符號(hào)書寫程序的語言。(9)物理地址(F)I.把若干個(gè)模塊連接起來成為可執(zhí)行文件的系統(tǒng)程序。SS、ES。(13)連接程序(I)M.分析、控制并執(zhí)行指令的部件,由算術(shù)邏輯部件ALU和寄存器等(14)指令(O)N.由匯編程序在匯編過程中執(zhí)行的指令。NOCPU執(zhí)行的操作(一般還要指出操作數(shù)地址),在程序運(yùn)行時(shí)答:答案見題目的括號(hào)中。第三章.習(xí)題(7)相對(duì)基址變址尋址EABX7DH;(5)EA=(BX)+D=0D5B4H;(6)EA=(BX)+(SI)=8E18H;(7)EA=(BX)+(SI)+D=1004FH;超過了段的邊界,最高進(jìn)位位丟失,因此EA=004FH。3.2試根據(jù)以下要求寫出相應(yīng)的匯編語言指令(2)ADDAL,[BX][SI](3)ADD[BX+0B2H],CX(4)ADDWORDPTR[0524H],2A59HADDALBH器間接尋址器相對(duì)尋址MOVDX,[BX]MOVBXOFFSETBLOCKMOVBX1)*2MOVDXBLOCKBX(3)MOVBX,OFFSETBLOCKMOVDX,[BX][SI]MOVAX,1200HVAXBXBHH(4)MOVAX,[BX]1B00:2002H00H(5)MOVAX,1100[BX]1B00:2003H80H(7)MOVAX,1100[BX][SI]8000:FF11H?→(AL)AXH?→(AH)(2)(AX)=0100H(3)(AX)=4C2AH3.6題的作圖表示(4)(AX)=3412HHH(275B9H)=098AH,試為以下的轉(zhuǎn)移指令找出轉(zhuǎn)移的偏移地址。JMPWORDPTRBXIPDS10H+(BX))=0600H,PA=02600HJMPDBX;(IP)=((DS)*10H+(BX)+D)=098AH,PA=0298AH3.6設(shè)當(dāng)前數(shù)據(jù)段寄存器的容為1B00H,在數(shù)據(jù)段的偏移地址2000H單元,含有一個(gè)容為0FF10H和8000HAX的指令序列,并畫MOVAX,[2000H+2]MOVBX,2000HMOVES,AXLESBX,[BX]MOVAX,ES:[BXMOVAX,ES:[BX](2)OBJ=0624H+02H+6BH=0691H(3)OBJ=0624H+02H+0C6H=05ECH;C6H對(duì)應(yīng)的負(fù)數(shù)為-3AH(向上轉(zhuǎn)移,負(fù)位移量)H(1)MOVAX,0ABH(2)MOVAX,BX(3)MOVAX,[100H](4)MOVAX,VAL(5)MOVAX,[BX](6)MOVAX,ES:[BX](7)MOVAX,[BP](8)MOVAX,[SI](9)MOVAX,[BX+10](10)MOVAX,VAL[BX](11)MOVAX,[BX][SI](12)MOVAX,VAL[BX][SI]BX)=0100HARRAY著是名為ZERO的字單元,表示如下:ARRAYDW23,36,2,100,32000,54,0ZERODW?MOV[BX+(7)*2],AX(2)MOVAX,ARRAY[BX]MOVARRAY[BX+2],AXMOVAX,TABLE00HLEAAX,TABLE14HAX00HENTRYDW300HMOVBX,OFFSETTABLE00HADDBXENTRY3.11題的TABLEMOVAX,[BX]存儲(chǔ)方式CSTRINGDB‘BASEDADDRESSING’MOVDL,CSTRING+7-1出存儲(chǔ)單元的物理地址)。DSBH(ES)=2B00H,有關(guān)存儲(chǔ)單元的容如上右圖所示。請(qǐng)寫出兩條指令把字變量X裝入MOVAX,ES:[BX]OF(1)1234H(2)4321H(3)CFA0H(4)9D60H制數(shù)與十六進(jìn)制數(shù)4AE0H的差值,并根據(jù)結(jié)果設(shè)置標(biāo)志位SF、ZF、CF和OF的(1)1234H(2)5D90H(3)9090H(4)EA04H3.17寫出執(zhí)行以下計(jì)算的指令序列,其中X、Y、Z、R、W均為存放16位帶符號(hào)數(shù)單元的地址。SUBAX,XADDAX,WMOVZ,AXADDBX,6MOVCX,RADDCR,9MOVAX,WSUBAX,BXSUBAX,CXMOVZ,AXYMOVAX,WIMULXMOVMOVBCWDMOVYZ,AXR,DXAX,WAX,XBX,5BXYSHLAX((DX),(AX))*2RCLDX,1HCFOFINT20H?OFAXADDAXFFFH(AX)=7FFEH,CF=1,SF=0,ZF=0,OF=0ADDAX;(AX)=8000H,CF=0,SF=1,ZF=0,OF=1FHSUBAXFFFFHAXHCF=1,SF=1,ZF=0,OF=1SUBAXAXFFFFHCF=1,SF=1,ZF=0,OF=0ANDAXDH;(AX)=58D1H,CF=0,SF=0,ZF=0,OF=0SALAXAXBAH,CF=0,SF=1,ZF=0,OF=1SARAXAXDDH,CF=0,SF=1,ZF=0,OF=0NEGAX;(AX)=272FH,CF=1,SF=0,ZF=0,OF=0DATAXDW0148HDW2316HDATAYDW0237HDW4052H出指令序列:CMOVBX,DATAXADCBX,DATAYADDDATAY,AXMOVAX,DATAX+2ADDDATAY+2,AXMOVAX,DATAXADDDATAY,AXMOVAX,DATAX+2ADCDATAY+2,AXMOVDATAY+4,0;用于存放進(jìn)位位ADCDATAY+4,0(4)RESULT1DW0DW0RESULT2DW0DW0┇MOVAX,DATAXMULDATAYMOVRESULT1,AXMOVRESULT1+2,DXMOVAX,DATAX+2MULDATAY+2MOVRESULT2,AXMOVRESULT2+2,DXBBDW0CCDW0DDDW0┇MOVAX,DATAXMULDATAYMOVAA,AXMOVBB,DXMOVAX,DATAXMULDATAY+2ADDBB,AXADCCC,DXMOVAX,DATAX+2MULDATAYADDBB,AXADCCC,DXADCDD,0MOVAX,DATAX+2MULDATAY+2ADDCC,AXADCDD,DXMOVAX,DATAXMOVBL,23DIVBL(7)MOVDX,DATAX+2MOVAX,DATAXDIVDATAYNEGAXNOTAXSBBDX,0ADDAX,1ADCDX,0MOVAX,AMOVDX,A+2CMPDX,0NEGDXNEGAXSBBZHENSHU;不是負(fù)數(shù)則轉(zhuǎn)走DX,0ZHENSHU:MOVB,AXMOVB+2,DXINT20H執(zhí)行下列指令序列后BX寄存器的容。執(zhí)行前(BX)=6D16H。SHRBX,CL.25試用移位指令把十進(jìn)制數(shù)+53和-49分別乘以2。它們應(yīng)該用什么指令?得到的結(jié)果是什么?如果SALALAL3*2)=6AHMOVAL,-49SALALAL*2)=9EHMOVAL,53SARAL(AL)=(53/2)=1AHMOVAL,-49SARALAL(-49/2)=0E7HSHLDX,CLSHLAX,CLSHRBL,CLORDL,BLXROLBX,1設(shè)數(shù)據(jù)段定義如下:CONAMEDB‘SPACEEXPLORERSINC.’用串指令編寫程序段分別完成以下功能:XCLDMOVSI,SEGCONAMEMOVDS,SIMOVES,SILEASI,CONAMELEADI,PRLINEREPMOVSB(2)MOVCX,20DMOVSI,SEGCONAMEMOVDS,SIMOVES,SILEASI,CONAMEADDSI,20-1LEADI,PRLINEADDDI,20-1REPMOVSB(3)MOVAX,WORDPTRCONAME+3-1(4)MOVWORDPTRPRLINE+5,AXCLDMOVDI,SEGCONAMEMOVES,DILEADI,CONAMEREPNESCASBJNENEXTDECDIMOVBX,DINEXT:┇STRINGDB‘ThedateisFEB&03’MOVCX,18MOVAL,‘&’CLDMOVDI,SEGSTRINGMOVES,DILEAREPNEDI,STRINGSCASBNEXTDECDINEXT:┇3.31假設(shè)數(shù)據(jù)段中數(shù)據(jù)定義如下:STUDENT_NAMEDB30DUP(?)STUDENT_ADDRDB9DUP(?)PRINT_LINEDB132DUP(?)MOVDI,DSMOVES,DICX,132MOVAL.,‘’CLDLEADI,PRINT_LINEREPSTOSBCX,9MOVCLDLEADI,STUDENT_ADDRREPNESCASBJNENO_DASHDECDINO_DASH:┇(3)MOVCX,9DLEADI,STUDENT_ADDRADDDI,9-1REPNESCASBJNENO_DASHINCDINO_DASH:┇(4)MOVCX,30CLDLEAREPEDI,STUDENT_NAMESCASBNEXTMOVCX,30LEADI,STUDENT_NAMEREPSTOSBNEXT:┇CLDCX,30LEASI,STUDENT_NAMELEADI,PRINT_LINEREPMOVSBMOVCX,9DLEASI,STUDENT_ADDR+9-1LEADI,PRINT_LINE+132-1REPMOVSBMOVCX,5CLDMOVDI,SEGOLDSMOVDS,DIMOVES,DILEALEAREPESI,OLDSDI,NEWSCMPSBJNENEW_LESS┇NEW_LESS:┇OWJAEXCEEDJGEXCEEDJOOVERFLOWJLEEQ_SMAJBEEQ_SMA段:ADDAX,BXSUBAX,BXJNCL3JMPSHORTL5AXBXDCHHCHHDH(4)D023H9FD0H(5)94B7HB568H3.35指令CMPAX,BX后面跟著一條格式為J…L1的條件轉(zhuǎn)移指令,其中…可以是B、NB、BE、NBE、AXBX(1)1F52H1F52H(2)88C9H88C9H(3)FF82H007EH(4)58BAH020EH(5)FFC5HFF8BH(6)09A0H1E97H(7)8AEAHFC29H(8)D367H32A6H引起轉(zhuǎn)移到L1?2)JNB、JBE、JNL、JLE3)JNB、JNBE、JL、JLE(4)JNB、JNBE、JNL、JNLE5)JNB、JNBE、JL、JLEJBJBEJLJLE)JB、JBE、JNL、JNLE8)JNB、JNBE、JL、JLEMOVDX,X+2MOVAX,XADDAX,XADCDX,X+2CMPDX,Y+2JLL2JGL1CMPAX,YJBEL2L1:MOVAX,1JMPSHORTEXITL2:MOVAX,2EXIT:INT20HYEY程序開始程序開始MOVAL,STATUSBEN轉(zhuǎn)去執(zhí)行轉(zhuǎn)去執(zhí)行ROUTINE_1:┇YNYYROUTINE_2:┇JMPEXITROUTINE_4:┇轉(zhuǎn)去執(zhí)行N轉(zhuǎn)去執(zhí)行EXIT:INT20HROUTINE_2僅一位為1執(zhí)行ROUTINE_13.38在下列程序的括號(hào)中分別填入如下指令:(3)LOOPNEL20執(zhí)行EXIT程序結(jié)束試說明在三種情況下,當(dāng)程序執(zhí)行完后,AX、BX、CX、DX四個(gè)寄存器的容分別是什么?3.44題的程序流程圖TITLECODESGEXLOOP.COMSEGMENTASSUMECS:CODESG,DS:CODSEG,SS:CODSEGORG100HMOVBX,02MOVDX,03MOVCX,04L20:INCAXADDBX,AXSHRDX,1RETCODESGENDSENDBEGIN慮以下的調(diào)用序列:答:每次調(diào)用及返回時(shí)的堆棧狀態(tài)圖如下所示:(1)MAIN調(diào)0A0A0A0A0A0A0A)MOV[EAX+2*EBX],CL(3)MOVDH,[EBX+4*EAX+1000H]答:(1)PA=(DS)*10H+EA=00100H+00001000H+00002000H=00003100H(2)PA=(DS)*10H+EA=00100H+00001000H+2*00002000H=00005100H(3)PA=(DS)*10H+EA=00100H+00002000H+4*00001000H+1000H=00007100HDSIEAXXECX3.42說明下列指令的操作(1)PUSHAX;將(AX)壓入堆棧POPESI;將堆棧中的雙字彈出到ESI寄存器中(3)PUSH[BX];將((BX))對(duì)應(yīng)存儲(chǔ)單元中的字壓入堆棧)PUSHAD;32位通用寄存器依次進(jìn)棧3.43請(qǐng)給出下列各指令序列執(zhí)行完后目的寄存器的容。1)MOVEAX,299FF94H2)MOVEBX,40000000(3)MOVEAX,39393834HMOVEDX,9FE35DHH3.44請(qǐng)給出下列各指令序列執(zhí)行完后目的寄存器的容。MOVBX,-12MOVSXEBX,BX;(EBX)=0FFFFFFF4HMOVCL8MOVSXEDX,CL;(EDX)=0FFFFFFF8HMOVAH,7MOVZXECX,AH;(ECX)=00000007HXHMOVZXEBX,AX;(EBX)=00000099HMOVECX,307F455HMOVBX,98H3.47請(qǐng)編寫一程序段,要求把ECX、EDX和ESI的容相加,其和存入EDI寄存器中(不考慮溢出)。ADDEDI,ECXADDEDI,EDXADDEDI,EDXADDEDI,ESIADDEDI,ESIMOVAH,0;假定為無符號(hào)數(shù),否則用CBW指令即可DIVCLMOVAH,0SHLAX,1MOVDX,AX址的存單元容為偏移地址的單元去執(zhí)行指令。UPDB0DOWNDB0存儲(chǔ)器TABLEDB100HDUP(?);數(shù)組BEGIN:MOVCX,100HMOVBX,-1MOVSI,0MOVDI,0L1:INCBXCMPTABLE[BX],42HL2:INCL3:INCL4:LOOPLLLLDILMOVUP,SIMOVDOWN,DI第四章.習(xí)題4.1指出下列指令的錯(cuò)誤:(1)MOVAH,BX;寄存器類型不匹配(2)MOV[BX],[SI];不能都是存儲(chǔ)器操作數(shù)IDI(4)MOVMYDAT[BX][SI],ES:AX;AX寄存器不能使用段超越(5)MOVBYTEPTR[BX],1000;1000超過了一個(gè)字節(jié)的圍(6)MOVBX,OFFSETMYDAT[SI];MYDAT[SI]已經(jīng)是偏移地址,不能再使用OFFSET(7)MOVCS,AX;CS不能用作目的寄存器(8)MOVECX,AX;兩個(gè)操作數(shù)的數(shù)據(jù)類型不同(1)CMP15,BX;錯(cuò),立即數(shù)不能作為目的操作數(shù)CMPOP1,25(3)CMPOP1,OP2;錯(cuò),不能都是存儲(chǔ)器操作數(shù)(4)CMPAX,OP1;錯(cuò),類型不匹配,應(yīng)為CMPax,wordptrop14.3假設(shè)下列指令中的所有標(biāo)識(shí)符均為類型屬性為字的變量,請(qǐng)指出下列哪些指令是非法的?它們的(1)MOVBP,AL;錯(cuò),寄存器類型不匹配(2)MOVWORD_OP[BX+4*3][DI],SP(3)MOVWORD_OP1,WORD_OP2;錯(cuò),不能都是存儲(chǔ)器操作數(shù)(5)MOVSAVE_WORD,DS(6)MOVSP,SS:DATA_WORD[BX][SI]MOVBXSI;錯(cuò),[BX][SI]未指出數(shù)據(jù)類型(8)MOVAX,WORD_OP1+WORD_OP2(9)MOVAX,WORD_OP1-WORD_OP2+100(10)MOVWORD_OP1,WORD_OP1-WORD_OP2(1)ADDVAR1,VAR2;不能都是存儲(chǔ)器操作數(shù)(2)SUBAL,VAR1;數(shù)據(jù)類型不匹配(3)JMPLAB[SI];LAB是標(biāo)號(hào)而不是變量名,后面不能加(4)JNZVAR1;VAR1是變量而不是標(biāo)號(hào)(5)JMPNEARLAB;應(yīng)使用NEARPTR4.5畫圖說明下列語句所分配的存儲(chǔ)空間及初始化的數(shù)據(jù)值。(1)BYTE_VARDB‘BYTE’,12,-12H,3DUP(0,?,2DUP(1,2),?)(2)WORD_VARDW5DUP(0,1,2),?,-5,‘BY’,‘TE’,256H答:答案如下圖所示。BYTEVARHWORD_VAR00HDB50H,51H59H00H54H01H45H00HDB‘PQ’0DH02HEEH00HDW‘QP’00H將上面┇-內(nèi)容再┇ORG5150H01H重復(fù)4次┇DW$02H-4.7請(qǐng)?jiān)O(shè)置一個(gè)數(shù)據(jù)段DATASG,其中定義以下字符變量或數(shù)據(jù)變量。02H(6)(6)FLD6B為10個(gè)零的字節(jié)變量;02H54H(7)FLD7B為零件名(ASCII碼)及其數(shù)量(十進(jìn)制數(shù))的表格:-56HPART12PART2504.5題答案PART314FLDW為本段中字?jǐn)?shù)據(jù)變量和字節(jié)數(shù)據(jù)變量之間的地址差。FLD1BFLD2BFLD3BFLD4BFLD5BFLD6BFLD7BDB‘personalcomputer’DB32DB20HDB01011001BDB‘32654’DB10DUP(0)FLD1WFLD2WFLD3WFLD4WFLD5WFLD6WDATASGENDSDW0FFF0HDW01011001BDWFLD7BDW5,6,7,8,9DW5DUP(0)DWFLD1W-FLD1B4.8假設(shè)程序中的數(shù)據(jù)定義如下:PARTNODW?PNAMEDB16DUP(?)COUNTDD?PLENTHEQU$-PARTNO4.9有符號(hào)定義語句如下:BUFFDB1,2,3,‘123’EBUFFDB0LEQUEBUFF-BUFF4.10假設(shè)程序中的數(shù)據(jù)定義如下:LNAMEDB30DUP(?)ADDRESSDB30DUP(?)CITYDB15DUP(?)CODE_LISTDB1,7,8,3,2(2)MOVSI,WORDPTRCODE_LISTODELENGTHEQUCODELISTCODELISTNUMDATA_LISTMAXMINSEGMENTDB5DW-1,0,2,5,4,5DUP(?)DW?DW?DATA_SEGENDS;CODE_SEGSEGMENTMAINSTART:;PROCASSUMEPUSHSUBPUSHMOVAX,MOVDS,MOVCX,FARCS:CODE_SEG,DS:DATA_SEGDS;設(shè)置返回DOSAX,AXAXDATA_SEGAX4LEABX,DATA_LISTMOVAX,[BX]MOVMAX,AXMOVMIN,AXROUT1:ROUT2:ROUT3:ADDBX,2MOVAX,[BX]CMPAX,MAXJNGEROUT2MOVMAX,AXCMPAX,MINJNLEROUT3MOVMIN,AXLOOPROUT1RETMAINENDPCODE_SEGENDS;ENDSTART給出等值語句如下:ALPHAEQU100GAMMAEQU2(1)ALPHA*100+BETA;=2729H(2)ALPHAMODGAMMA+BETA;=19H(3)(ALPHA+2)*BETA–2;=9F4H(4)(BETA/3)MOD5;=3H(5)(ALPHA+3)*(BETAMODGAMMA);=67H(6)ALPHAGEGAMMA;=0FFFFH(7)BETAAND7;=01H(8)GAMMAOR3;=03HTABLEADW10DUP(?)TABLEBDB10DUP(?)TABLECDB‘1234’┇MOVAX,LENGTHTABLEA;匯編成MOVAX,000AHMOVBL,LENGTHTABLEB;匯編成MOVBL,000AHMOVCL,LENGTHTABLEC;匯編成MOVCL,0001HTABLEADW20DUP(?)TABLEBDB‘ABCD’4.15指出下列偽操作表達(dá)方式的錯(cuò)誤,并改正之。(1)DATA_SEGSEG;DATA_SEGSEGMENT(偽操作錯(cuò))(2)SEGMENT‘CODE’;SEGNAMESEGMENT‘CODE’(缺少段名(3)MYDATASEGMENT/DATA;MYDATASEGMENT┇ENDS;MYDATAENDS(缺少段名字)(4)MAIN_PROCPROCFAR;刪除ENDMAIN_PROC也可以┇ENDMAIN_PROC;MAIN_PROCENDP;上下兩句交換位置MAIN_PROCENDP;ENDMAIN_PROC4.16按下面的要求寫出程序的框架HKDATA_SEGSEGMENTAT0E000HARRAY_BLABELBYTEARRAY_WDW50DUP(?)DATA_SEGENDS;以上定義數(shù)據(jù)段;STACK_SEGSEGMENTPARASTACK‘STACK’DW100HDUP(?)TOSLABELWORDSTACK_SEGENDS;以上定義堆棧段;CODE_SEGSEGMENTMAINPROCFARASSUMECS:CODE_SEG,DS:DATA_SEG,SS:STACK_SEGORG1000HSTART:MOVAX,STACK_SEGMOVSS,START:MOVSP,OFFSETTOSPUSHDSSUBAX,AXPUSHAXMOVAX,DATA_SEGMOVDS,AXMAIN┇MAINRETENDPCODE_SEGENDS;ENDSTARTD_SEGSEGMENTAUGWLABELWORDAUGENDDD99251SUMDD?D_SEGENDS;以上定義數(shù)據(jù)段;E_SEGSEGMENTADDWLABELWORDADDENDDD-15962E_SEGENDS;以上定義附加段;C_SEGSEGMENTMAINPROCASSUMEFARCS:C_SEG,DS:D_SEG,ES:E_SEGSTART:PUSHBPUSHDS;設(shè)置返回DOSAX,AXAXMOVAX,D_SEGMOVDS,AXMOVAX,E_SEGMOVES,AX;MOVAX,AUGWMOVBX,AUGW+2ADDAX,ES:ADDWADCBX,ES:ADDW+2MAINC_SEGMOVWORDMOVWORDRETENDPENDSPTRSUM,AXPTR[SUM+2],BX;ENDSTART4.18請(qǐng)說明表示程序結(jié)束的微操作和結(jié)束程序執(zhí)行的語句之間的差別。它們?cè)谠闯绦蛑袘?yīng)如何表示?答:表示程序結(jié)束的微操作是指示匯編程序MASM結(jié)束匯編的標(biāo)志,在源程序中用END表示;結(jié)束程序執(zhí)行的語句是結(jié)束程序運(yùn)行而返回操作系統(tǒng)的指令,在源程序中有多種表示方法,比如TDBDDBDWWVALAL,BVALCL,WVALAL,BVAL+1BYTEPTR[BX],2CL,BYTEPTRWVAL第五章.習(xí)題5.1試編寫一個(gè)匯編語言程序,要求對(duì)鍵盤輸入的小寫字母用大寫字母顯示出來。BEGIN:MOVAH,1;從鍵盤輸入一個(gè)字符的DOS調(diào)用SEGMENTSEGMENTDBENDSMOVMOVLEAMOVANDMOVINCSHRDECJNZMOVMOVMOVMOVRETSTOP:CMPCMPBMOVMOVRETSTOPSTOPAL,20HDL,ALAH,2BEGIN5.2編寫程序,從鍵盤接收一個(gè)小寫字母,然后找出它的前導(dǎo)字符和后續(xù)字符,再按順序顯示這三個(gè)BEGIN:DISPLAY:STOP:MOVAH,CMPAL,BCMPAL,DECMOVDL,MOVCX,MOVAH,LOOPRET1‘a(chǎn)’STOP‘z’STOPALAL32DLDISPLAYDSEGSTOREDSEGBEGIN:A10:B10:STOP:4DUP(?)CL,4CH,4BX,STOREDX,AXDX,0FHBXAX,CLHA10DL,STORECL,STORE+1BL,STORE+2AL,STORE+35.4試編寫一程序,要求比較兩個(gè)字符串STRING1和STRING2所含字符是否完全相同,若相同則顯示DSEGSEGMENTSTRING1DBSTRING2DBYESDBNODBDSEGENDS‘Iamastudent.’‘Iamastudent!’;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEG,ES:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEG;BEGIN:LEASI,STRING1;設(shè)置串比較指令的初值LEADI,STRING2CLDMOVCX,STRING2-STRING1REPECMPSB;串比較JNEDISPNOLEADX,YES;顯示MATCHJMPDISPLAYDISPNO:LEADX,NO;顯示NOMATCHDISPLAY:MOVAH,9;顯示一個(gè)字符串的DOS調(diào)用INT21HRETMAINENDPCSEGENDS;ENDSTART5.5試編寫一程序,要求能從鍵盤接收一個(gè)個(gè)位數(shù)N,然后響鈴N次(響鈴的ASCII碼為07)。BEGIN:BELL:STOP:MOVAH,1INT21HSUBAL,‘0’JBSTOPCMPAL,9JASTOPCBWMOVCX,AXJCXZSTOPMOVDL,07HMOVAH,2CALLLOOPRETDELAY100msBELL這兩個(gè)數(shù)組中數(shù)據(jù)的個(gè)數(shù)顯示出來。DSEGSEGMENTCOUNTARRAYCOUNT1ARRAY1COUNT2ARRAY2ZHENFUCRLFDSEGEQU20DW20DUP(?);存放數(shù)組DB0;存放正數(shù)的個(gè)數(shù)DW20DUP(?);存放正數(shù)DB0;存放負(fù)數(shù)的個(gè)數(shù)DW20DUP(?);存放負(fù)數(shù)DB0DH,0AH,‘$’ENDS;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGBEGIN:MOVCX,COUNTLEABX,ARRAYLEASI,ARRAY1LEADI,ARRAY2BEGIN1:MOVAX,[BX]JSFUSHUMOV[SI],AX;是正數(shù),存入正數(shù)數(shù)組INCCOUNT1;正數(shù)個(gè)數(shù)+1ADDSI,2JMPSHORTNEXTFUSHU:MOV[DI],AX;是負(fù)數(shù),存入負(fù)數(shù)數(shù)組NEXT:MAININCCOUNT2ADDDI,2ADDBX,2LOOPBEGIN1LEADX,ZHENMOVAL,COUNT1CALLDISPLAYLEADX,FUMOVAL,COUNT2CALLDISPLAYRETENDP;DISPLAYPROCNEAR;顯示子程序OSINT21HAAM;將(AL)中的二進(jìn)制數(shù)轉(zhuǎn)換為二個(gè)非壓縮BCD碼MOVDL,AHMOVAH,2INT21HADDAL,‘0’MOVDL,ALMOVAH,2INT21HLEADX,CRLFMOVAH,9INT21HRETDISPLAYENDPCSEGENDS;ENDSTARTBEGIN:MOVBX,MOVCX,0COMPARE:MOVAX,ADDBX,DATA[BX]2;取數(shù)組的第一個(gè)偶數(shù)TESTLOOPNZJNZJCXZAX,01HCOMPARESTOPSTOP;不是,比較下一個(gè)數(shù);最后一個(gè)數(shù)是偶數(shù),即為最小偶數(shù),退出COMPARE1:MOVDX,ADDBX,DATA[BX]2;取數(shù)組的下一個(gè)偶數(shù)TESTJNZCMPAX,JLEDX,01HNEXTDXNEXT;不是,比較下一個(gè)數(shù)MOVAX,DXNEXT:LOOPCOMPARE1STOP:RETBEGIN:MOVDL,MOVCX,08COMPARE:TESTAX,03HNOEQUALDLNOEQUAL:RORAX,RORAX,LOOP11COMPARE備判斷下一個(gè)數(shù)ADDDL,MOVAH,INT‘0’2STOP:RETBEGIN:AF:BINARY:DISPN:DISP:STOP:MOVBX,0MOVCH,4MOVCL,4SHLBX,CLMOVAH,1INT21HCMPAL,30HCMPAL,39HJAAFANDAL,0FHJMPBINARYANDAL,11011111BCMPAL,41HCMPAL,46HANDAL,0FHADDAL,9ORBL,ALDELCHMOVCX,16MOVDL,0ROLBX,1RCLDL,1ORDL,30HMOVAH,2INT21HLOOPDISPRET;不是‘0~F’的數(shù)重新輸入;是‘0~9’嗎?;不是,轉(zhuǎn)‘A~F’的處理;轉(zhuǎn)換為:0000B~1001B;不是‘A~F’的數(shù)重新輸入;不是‘A~F’的數(shù)重新輸入;轉(zhuǎn)換為:1010B~1111B;將鍵盤輸入的數(shù)進(jìn)行組合.10設(shè)有一段英文,其字符變量名為ENG,并以$字符結(jié)束。試編寫一程序,查對(duì)單詞SUN在該文中的出現(xiàn)次數(shù),并以格式“SUN:xxxx”顯示出次數(shù)。DSEGSEGMENTENGDBDISPDBDATDBKEYWORDDBDSEGENDS‘Hereissun,sun,…,$’DH0AH,‘$’‘sun’;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEG,ES:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGBEGIN:MOVAX,0MOVDX,DISP-ENG-2;計(jì)算ENG的長(zhǎng)度(每次比較sun,因此比較次數(shù)-2)LEABX,ENGCOMP:MOVDI,BXLEASI,KEYWORDMOVCX,3REPECMPSBJNZNOMATCHINCAXADDBX,2NOMATCH:INCBXDECDXJNZCOMPDONE:MOVCH,4MOVCL,4LEABX,DATDONE1:ROLAX,CLMOVDX,AXANDDL,0FHADDDL,30HCMPDL,39HJLESTOREADDDL,07HSTORE:MOV[BX],DLINCBXDECCHJNZDONE1DISPLAY:LEADX,DISPMOVAH,09HINT21HRETMAINENDPCSEGENDS;是“A~F”所以要加7;ENDSTART5.11從鍵盤輸入一系列以$為結(jié)束符的字符串,然后對(duì)其中的非數(shù)字字符計(jì)數(shù),并顯示出計(jì)數(shù)結(jié)果。DSEGBUFFCOUNTDSEGBEGIN:NEXT:SEGMENTDBDW50SEGMENTDBDW0ENDS┇LEAMOVLEAMOVMOVINTMOVINCCMPJNZLEAMOVINCCMPCOUNT,0AH,01BXBX,BUFFCL,[BX]BXDISP;從鍵盤輸入一個(gè)字符的功能調(diào)用;對(duì)非數(shù)字字符進(jìn)行計(jì)數(shù);是$結(jié)束符,則轉(zhuǎn)去顯示CMPCL,30HJBNEXTCMPCL,39HNEXTCOUNEXTCOUNTNEXT┇DISP:DSEGSEGMENTMEMDW100DUP(?)DSEGENDS;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGBEGIN:MOVSI,(100-1)*2MOVBX,-BEGIN:MOVCX,100COMP:ADDBX,COMP:CMPMEM[BX],0JZCONSLOOPCOMPCONS:CONS1:JMPFINISHMOVCONS:CONS1:CMPDI,SIJAENOMOVMOVAX,MEM[DI+2]MOVMEM[DI],AXADDDI,2JMPCONS1NOMOV:MOVWORDPTR[SI],0;后面的元素向前移位FINISH:MAINLOOPCOMPRETENDPCSEGENDS;ENDSTARTDSEGSEGMENTSTRINGDB100DUP(?)DSEGENDS;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGBEGIN:MOVSI,0;(SI)作為地址指針的變化值MOVCX,100REPEAT:MOVAL,STRING[SI]CMPAL,30HJBGO_ONCMPAL,39HJAGO_ONJMPEXITGO_ON:INCSILOOPREPEATEXIT:RETMAINENDPCSEGENDS;以上定義代碼段;ENDSTART最多的數(shù)及其出現(xiàn)次數(shù)分別存放于AX和CX中。DSEGSEGMENTTABLEDW100HDUP(?);數(shù)組中的數(shù)據(jù)是按增序排列的DATADW?COUNTDW0DSEGENDS;CSEGSEGMENTMAINSTART:BEGIN:NEXT:COMP:PROCFARASSUMECS:CSEG,DS:DSEGPUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGMOVCX,100H;循環(huán)計(jì)數(shù)器MOVSI,0MOVDX,0MOVAX,TABLE[SI]CMPTABLE[SI],AX;計(jì)算一個(gè)數(shù)的出現(xiàn)次數(shù)JNEADDRINCDXADDSI,2LOOPCOMPADDR:DONE:MAINCSEGCMPDX,COUNTJLEDONEMOVCOUNT,DXMOVDATA,AXLOOPNEXTMOVCX,COUNTMOVAX,DATARETENDPENDS;目前此數(shù)出現(xiàn)的次數(shù)最多,記下次數(shù);出現(xiàn)最多的次數(shù)存入(CX);出現(xiàn)最多的數(shù)存入(AX);ENDSTART數(shù)據(jù)段的M+2n單元中,并將該數(shù)的偏移地址存放在M+2(n+1)單元中。DSEGSEGMENTnMDATAADDRDSEGEQU100HDWnDUP(?)DW?DW?ENDSM(n+1)單元;CSEGSEGMENTMAINPROCASSUMEFARCS:CSEG,DS:DSEGSTART:PUSHSUBPUSHMOVAX,MOVDS,DS;設(shè)置返回DOSAX,AXAXDSEGBEGIN:ZHEN:COMP:MOVCX,nLEADI,MMOVAX,[DI]MOVADDR,DICMPAX,0JNSZHENNEGAXMOVBX,[DI]CMPBX,0JNSCOMPNEGBXCMPAX,BXJAEADDRESSMOVAX,BXMOVADDR,DI;記下絕對(duì)值最大的數(shù)的地址;是正數(shù),即為絕對(duì)值,轉(zhuǎn)去判斷下一個(gè)數(shù);不是正數(shù),變?yōu)槠浣^對(duì)值;是正數(shù),即為絕對(duì)值,轉(zhuǎn)去比較絕對(duì)值大??;不是正數(shù),變?yōu)槠浣^對(duì)值;記下絕對(duì)值最大的數(shù)的地址ADDRESS:ADDDI,2LOOPZHENMAINCSEGMOVDATA,AXRETENDPENDS;ENDSTARTAX寄存器中;并求出數(shù)組中有多少個(gè)數(shù)小于此平均值,將結(jié)果放在BX寄存器中。DSEGSEGMENTDATADW100HDUP(?)DSEGENDS;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGBEGIN:MOVCX,100H;循環(huán)計(jì)數(shù)器MOVSI,0MOVBX,0;和((DI),(BX))的初始值MOVDI,0NEXT:MOVAX,DATA[SI]CWDADDBX,AX;求和ADCDI,DX;加上進(jìn)位位ADDSI,2LOOPNEXTMOVDX,DI;將((DI),(BX))中的累加和放入((DX),(AX))中MOVAX,BXMOVCX,100HIDIVCX;帶符號(hào)數(shù)求平均值,放入(AX)中MOVBX,0MOVSI,0COMP:CMPAX,DATA[SI];尋找小于平均值的數(shù)JLENOINCBX;小于平均值數(shù)的個(gè)數(shù)+1NO:ADDSI,2LOOPCOMPRETMAINENDPCSEGENDS;以上定義代碼段;ENDSTARTDSEGSEGMENTMEMDB4DUP(?)NDW2A49HDSEGENDS;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGBEGIN:ROTATE:NEXT:MOVCH,4MOVCL,4MOVAX,NLEABX,MEMMOVDL,ALANDDL,0FHADDDL,30HCMPDL,3AHJLNEXTADDDL,07HMOV[BX],DLINCBXRORAX,CLDECCHJNZROTATERETMAINENDPCSEGENDS;以上定義代碼段;ENDSTART1。)DSEGSEGMENTGRADEDW30DUP(?);假設(shè)已預(yù)先存好30名學(xué)生的成績(jī)RANKDW30DUP(?)DSEGENDS;CSEGSEGMENTMAINSTART:BEGIN:LOOP1:PROCASSUMEPUSHSUBPUSHMOVAX,MOVDS,MOVDI,MOVCX,PUSHMOVCX,MOVSI,FARCS:CSEG,DS:DSEGDS;設(shè)置返回DOSAX,AXAXDSEG00;外循環(huán)計(jì)數(shù)器X;循環(huán)計(jì)數(shù)器0MOVAX,GRADE[DI]MOVDX,1LOOP2:CMPGRADE[SI],AXJBEGO_ONINCDXGO_ON:ADDSI,2LOOP2LOOP2XPOPMOVRNAK[DI],DXADDDI,2LOOPLOOP1RETMAINENDPCSEGENDS;以上定義代碼段;ENDSTARTDSEGSEGMENTADW15DUP(?)BDW20DUP(?)CDW15DUP(‘’)DSEGENDS;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGBEGIN:LOOP1:LOOP2:NO:MAINCSEGMOVSI,0MOVBX,0MOVCX,15PUSHCXMOVCX,20MOVDI,0MOVAX,A[SI]CMPB[DI],AXJNENOMOVC[BX],AXADDBX,2ADDDI,2LOOPLOOP2ADDSI,2POPLPOPLOOPRETENDPLOOP1ENDS;ENDSTARTDSEGABCDDSEGSEGMENTDWDWDWDWENDS???0;CSEGSEGMENTMAINPROCASSUMEFARCS:CSEG,DS:DSEGSTART:PUSHSUBPUSHMOVAX,MOVDS,DS;設(shè)置返回DOSAX,AXAXDSEGBEGIN:CMPA,0JENEXTCMPB,0JENEXTCMPC,0JENEXTMOVAX,AADDAX,BADDAX,CMOVD,AXJMPSHORTEXITNEXT:MOVA,0MOVB,0MOVC,0EXIT:RETMAINENDPCSEGENDS;ENDSTARTDSEGSEGMENTARRAYDW3DUP(?)DSEGENDS;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEGSTART:PUSHSUBPUSHMOVAX,MOVDS,DS;設(shè)置返回DOSAX,AXAXDSEGBEGIN:LEASI,ARRAYMOVDX,0MOVAX,[SI]MOVBX,[SI+2]CMPAX,BXJNENEXT1INCDXNEXT1:CMP[SI+4],AXJNENEXT2INCDXNEXT2:CMP[SI+4],BXJNENUMINCDXNUM:CMP

溫馨提示

  • 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)論