匯編語言程序設(shè)計知識點_第1頁
匯編語言程序設(shè)計知識點_第2頁
匯編語言程序設(shè)計知識點_第3頁
匯編語言程序設(shè)計知識點_第4頁
匯編語言程序設(shè)計知識點_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言程序設(shè)計知識點第一章基礎(chǔ)知識(1)正負(fù)數(shù)的補碼表示,掌握計算機(jī)中數(shù)和字符的表示;1、 假設(shè)機(jī)器字長為8位,[+3]補=00000011B,[-3]補=FDH。2、 十六進(jìn)制數(shù)0F8H表示的十講制正數(shù)為248,表示的十進(jìn)制負(fù)數(shù)為-83、 8位二進(jìn)制數(shù)被看成是帶符號補碼整數(shù)時,其最小值是二128,最大值是1274、 計算機(jī)處理問題中會碰到大量的字符、符號,對此必須采用統(tǒng)一的二進(jìn)制編碼。目前,微機(jī)中普遍采用的是一ASCII碼,稱為美國信息交換標(biāo)準(zhǔn)碼第二章80x86計算機(jī)組織(1) 中央處理機(jī)CPU的組成和80x86寄存器組,重點:專用寄存器,段寄存器1、 IP寄存器中保存的是?下一條指令的首地址2、 FLAGS標(biāo)志寄存器中共有幾位條件狀態(tài)位?6位3、 有幾位控制狀態(tài)位?3位4、 標(biāo)志寄存器分為哪2類?條件碼,控制5、 哪個標(biāo)志位用來控制可屏蔽中斷請求是否被CPU響應(yīng)?IF6、 鍵盤I/O、顯示I/O和打印I/O分別對應(yīng)16、10和17號中斷。(2) 存儲單元的地址和內(nèi)容,存儲器地址的分段,實模式下邏輯地址、物理地址的表示。1、 如果SS=6000H,說明堆棧段起始物理地址是60000H2、 已知字節(jié)(00018H)=14H,字節(jié)(00017H)=20H,則字(00017H)為1420H3、 如果數(shù)據(jù)段中一個內(nèi)存單元對應(yīng)的物理地址為3F756H,(DS)=3F00H,那么使用DS段寄存器指明該單元的段基值時,需要使用哪一個偏移量才能正確訪問該單元756H。4、 如果(SI)=0088H,(DS)=5570H,對于物理地址為55788H的內(nèi)存字單元,其內(nèi)容為0235H,對于物理地址為5578AH的內(nèi)存字單元,其內(nèi)容為0E60H,那么執(zhí)行指令LDSSI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H第三章80x86的指令系統(tǒng)和尋址方式(1)與數(shù)據(jù)有關(guān)的尋址方式(立即尋址方式,寄存器尋址方式,直接尋址方式,寄存器間接尋址方式,寄存器相對尋址方式,基址變址尋址方式,相對基址變址尋址方式)和與轉(zhuǎn)移地址有關(guān)的尋址方式(段內(nèi)直接尋址,段內(nèi)間接尋址,段間直接尋址,段間間接尋址).數(shù)據(jù)傳送指令(通用數(shù)據(jù)傳送指令、累加器專用傳送指令、輸入輸出指令)、算術(shù)指令(加法指令、減法指令(*加減指令對4個標(biāo)志位的影響[of,cf,sf,zf])乘法指令(*乘法指令的要求:目的操作數(shù)必須是累加器)、除法指令(*被除數(shù)在累加器中,除法指令執(zhí)行完以后,商和余數(shù)在?))、邏輯指令(邏輯運算指令(*XOR,AND,OR,TEST指令及指令執(zhí)行后對標(biāo)志位的影響)、移位指令)、串處理指令(與REP相配合工作的MOVS、STOS、LODS指令,與REPE/REPZ和REPNE/REPNZ

聯(lián)合工作的CMPS、SCAS指令)、控制轉(zhuǎn)移指令(無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令循環(huán)指令、子程序調(diào)用指令、中斷)。1、假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,數(shù)據(jù)段中變量名VAL的偏移地址為0050H,試指出下列源操作數(shù)字段的尋址方式是什么?其物理地址值是多少?(1)MOVAX,0ABH立即尋址操作數(shù)在指令中(2)MOVAX,BX寄存器尋址操作數(shù)為(BX)=0100H(3)MOVAX,[100H]直接尋址20100H(4)MOVAX,VAL直接尋址20050H(5)MOVAX,[BX]寄存器間接尋址20100H(6)MOVAX,ES:[BX]寄存器間接尋址21100H(7)MOVAX,[BP]寄存器間接尋址15010H(BP默認(rèn)段為SS)(8)MOVAX,[SI]寄存器間接尋址200A0H(9)MOVAX,[BX+10]寄存器相對尋址20110H(10)MOVAX,VAL[BX]寄存器相對尋址20150H(11)MOVAX,[BX][SI]基址變址尋址201A0H(12)MOVAX,VAL[BX][SI]相對基址變址尋址201F0H2、假定(DS)=1000H,(SS)=2000H,(SI)=3000H,(BX)=0100H,(BP)=0200H,數(shù)據(jù)段中變量名為OVAR的偏移地址值為0050H,請指出下列源操作數(shù)的尋址方式是什么?其物理地址值是多少?1.MOVDX,[1000H]直接尋址11000H2.MOBDX,[BX]寄存器間接尋址10100H3.MOVDX,OVAR[BP]寄存器相對尋址10250H4.MOVDX,[BX+SI]寄存器相對尋址13100H5.MOVDX,OVAR[BX][SI]相對基址變址尋址13150H(2)數(shù)據(jù)傳送指令(通用數(shù)據(jù)傳送指令、累加器專用傳送指令)算術(shù)指令(加法指令、減法指令(*加減指令對4個標(biāo)志位的影響[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作數(shù)必須是累加器)除法指令(*被除數(shù)在累加器中,除法指令執(zhí)行完以后,商和余數(shù)?)邏輯指令(邏輯運算指令(*XOR,AND,OR,TEST指令及指令執(zhí)行后對標(biāo)志位的影響)、移位指令)串處理指令(與REP相配合工作的MOVS、STOS、LODS指令,與REPE/REPZ和REPNE/REPNZ聯(lián)合工作的CMPS、SCAS指令)控制轉(zhuǎn)移指令(無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、循環(huán)指令、子程序、中斷)1、 將首地址為STRING的字節(jié)數(shù)組的第7個元素(編號從0開始)送到累加器AL中,用SI寄存器相對尋址的指令為:MOVSI6H和MOVALSTRING[SI]2、 下列ASCII碼串(包括空格符)依次存儲在起始地址為CSTRING的字節(jié)單元中:CSTRINGDB‘BASEDADDRESSING’請編寫指令將字符串中的第1個和第7個字符傳送給DX寄存器。MOVDHCSRTINGMOVDLCSRTING+7-13、 如果JMP指令采用段間間接尋址,那么轉(zhuǎn)移地址存放在4個相鄰字節(jié)單元中,其中前兩個字節(jié)存放的是偏移地址,而后兩個字節(jié)存放的是段地址4、 重復(fù)前綴指令REP的重復(fù)次數(shù)甫計數(shù)寄存器CountReg決定。5、 在串操作指令前使用重復(fù)前綴指令REPE,終止串的重復(fù)操作條件是一CountReg=0或ZF=06、 當(dāng)標(biāo)志位旦=1時表示無符號數(shù)運算產(chǎn)生溢出,而當(dāng)標(biāo)志位_OF=1是表示帶符號數(shù)運算產(chǎn)生溢出。7、 AL和VAR字節(jié)單元中分別存放一個帶符號數(shù),執(zhí)行CMPAL,VAR時,如果AL>VAR,那么溢出位和符號位的關(guān)系是。(OF=SF,還有發(fā)生溢出的情況,AL-VAL盡管為負(fù),但OF=1,說明是由于結(jié)果太大(負(fù)的太大)超出了帶符號數(shù)的表示范圍使得符號位為負(fù)的,正確的結(jié)果應(yīng)該為正。)8、 循環(huán)控制指令LoopNZ/LoopNE控制循環(huán)繼續(xù)執(zhí)行的條件是2「=0且CountRegLO9、 設(shè)SP=4AH,執(zhí)行段內(nèi)返回指令RET4后,SP的值是50H10、 條件轉(zhuǎn)移指令的轉(zhuǎn)移范圍?(只能做段內(nèi)的短轉(zhuǎn)移)11、轉(zhuǎn)移指令JMPNEARPTRPROCA的轉(zhuǎn)移范圍是 8000曠7FFFH12、 計算機(jī)系統(tǒng)通過 主機(jī)系統(tǒng) 和外部設(shè)備通信。DOS系統(tǒng)功能調(diào)用方式為:(1)設(shè)置入口參數(shù);(2)中斷程序編號送AH寄存器后執(zhí)行INT21H。(教材Page320,page335)13、 閱讀下面的程序片段,并分析執(zhí)行結(jié)果。MOVAX,723AHMOVBX,0C86BHSUBAL,BLSBBAH,BHXORAL,01HADCAX,0執(zhí)行該程序片段后:(AX)=0A9CEH,CF= 0,OF=0o(XOR使CF/OF為0)第四章匯編語言程序格式(1) 偽操作:數(shù)據(jù)定義及存儲器分配偽操作,表達(dá)式賦值偽操作EQU,段定義偽操作、程序開始和結(jié)束偽操作、對準(zhǔn)偽操作、基數(shù)控制偽操作。(2) 匯編語言程序格式:匯編語言源程序中的每個語句的組成格式:名字項、操作項(包括?)、操作數(shù)項和注釋項1、在某數(shù)據(jù)段內(nèi)定義變量BUFFERDB30DUP(20)表達(dá)式TYPEBUFFER的值為1BUF1DB3DUP(0,2DUP(1,2),3)COUNTEQU$-BUF1變量COUNT的值是18DATASEGMENTDB2EHDUP(0)VAR1DB12H,34HVAR2DB10HDUP(O)ADR1DWVAR1,VAR2DATAENDS為使ADR1+2字存儲單元中內(nèi)容為0030H,橫線上應(yīng)選用的語句是_ORG$+30H_ 。BUFDW4,6,$+2,若匯編時BUF分配的偏移地址是0042H,則匯編后BUF數(shù)組中第三個字的值是0048H。設(shè)某數(shù)據(jù)段:DATASEGMENTORG20HNUM1=8NUM2=NUM1+10HDA1DB‘COMPUTER’DB0AH,0DHCOUNTEQU$-DA1DA2DW‘CO’,’MP’,’UT,’ER’DATAENDS請回答:(1)DA1的偏移地址是:20H⑵COUNT的值是0AH(3)DA2+5字節(jié)單元的內(nèi)容是‘U’的ASCII碼。(DW/DB儲存字符串的方式不同)6、執(zhí)行下列指令序列后,AX寄存器中的內(nèi)容是什么?TABLEDW10,20,30,40,50ENTRYDW3MOV BX, OFFSET TABLEADD BX, ENTRYMOV AX, [BX]1E00H7.下面指令執(zhí)行后,變量DAB中的內(nèi)容是0F5HDAWDW2A05HDABDB0FAHMOVAL,BYTEPRTDAWSUBDAB,AL第五章循環(huán)與分支程序設(shè)計(1)循環(huán)程序結(jié)構(gòu),分支程序結(jié)構(gòu)eg.BEG為起始地址的存儲區(qū)域中存放有100個字節(jié)數(shù)據(jù),現(xiàn)將其首、尾顛倒過來,重新排放這100個字節(jié)數(shù)據(jù)。請在空行處各填上一條指令完善該程序。MOVCX,31HLEASI,BEGMOVDI,SIADDDI,99 DON:MOVAL,[SI]XCHGAL,[DI]MOV[SI],ALINCSIDECDILOOPDON1、閱讀如下程序段:ADRRDBXXH,XXH,……,XXHNUMEQU$-ADRR;NUM為ADRR數(shù)組空間大小RETTDB?…MOVCX,NUM ;CX中存放ADRR數(shù)組空間大小MOVBX,-1DON:INCBX ;BX值增一CMPADRR[BX],0 ;訪問ADRR數(shù)組中偏移地址為BX的值并與0比較LOOPZDON ;若大于0則繼續(xù)DON循環(huán)JNZNEXT ;否則轉(zhuǎn)至NEXTMOVBL,OFFH ;若循環(huán)完未轉(zhuǎn)至NEXT,則BL中為OFFHNEXT:MOVRETT,BL ;將BL中址送RETTHLT請回答(1)該程序完成的功能是什么?在以Adrr為起始地址的數(shù)組中查找第一個非0數(shù)據(jù)(2)程序執(zhí)行后RETT字節(jié)單元中的內(nèi)容是什么?若找到非0數(shù)據(jù),則將第一個非0數(shù)據(jù)在數(shù)組中的偏移量送入皿質(zhì)單元中,若未找到,則將0??曰送入RETT單元中。2、 閱讀程序段:STRINGDB ‘ABCDEFGHIJ‘■■IMOVAH,01INT21HANDAL,0FH;這條語句等價于減去30HDECALXORAH,AH;以上三條語句是將1-9的ASCII碼轉(zhuǎn)換為1-9MOVBX,OFFSETSTRINGADDBX,AX;BX+AX,即將BX中存放待輸出字符的偏移地址MOVBL,[BX] ;將STRING中偏移地址為BX的字符取出MOVAH,02HINT21H■■I請回答:(1)上述程序段的功能是什么?上述程序段的功能是根據(jù)從鍵盤輸入的字符‘1’?‘9’,確定在顯示器上顯示STRING中第幾個字符。(2)從鍵盤輸入字符‘4’,程序段有什么結(jié)果?輸出’D’3、 閱讀程序段:BLOCKDB20H,1FH,08H,81H,OFFH…RESULTDB?START:LEASI,BLOCK ;使5【指向BLOCK單元首地址MOVCX,[SI];將5【地址中操作數(shù)傳送到CX寄存器中INCSI ;SI指向下一個地址MOVAL,[SI];將5【中操作數(shù)傳送到AL寄存器中LOP1:CMPAL,[SI+1];比較BLOCK/BLOCK+1地址中操作數(shù)JNGNEXT ;若BLOCK〉BLOCK+1則轉(zhuǎn)至NEXTMOVAL,[SI+1];否則將BLOCK+1中數(shù)送入AL寄存器NEXT:INCSI ;SI指向下一個地址LOOPLOP1 ;循環(huán)執(zhí)行LOP1MOVRESULT,AL;將AL中數(shù)送入RESULT中問:(1)該程序完成的功能是從32個有符號數(shù)中找出最小的送入RESULT中。(2)該程序循環(huán)的次數(shù)是31次。4、下列程序片段用來分別統(tǒng)計ARRAY數(shù)組中奇數(shù)和偶數(shù)的個數(shù)。請在空白處填寫合適的指令。

DATASEGMENTARRAYDW23ABH,1570H,567,1765H,46,5210HCOUNTEQU($-ARRAY)/2 ;COUNT為數(shù)組中元素個數(shù)DA1DA2DB?DB?DATAENDSLEASI,ARRAY;SI中存放ARRAY首地址MOVCX,COUNT;CX中存放數(shù)組元素個數(shù)LOP1:MOVAX,[SI];將ARRAY中偏移地址為SI的元素送入乂TESTAX,0001H;最低為為1則為奇數(shù),否則為偶數(shù)JZLOP2INCBLJMPLOP3LOP2:INCBHLOP3:ADDSI,2;SI地址值增2DECCXJNZLOP1MOVDA1,BLMOVDA2,BH閱讀如下程序片段,回答所提出的問題,假定X1,X2,???XN為無符號數(shù)。ORG100HBLOKDWX1,X2,…,XNCOUNTEQU($-BLOK)/2RESULTDW?LEABX,BLOK-2MOVCX,COUNTXORAX,AXGOON:ADDBX,2CMPAX,[BX]JAENEXTMOVAX,[BX]NEXT:LOOPGOON

MOVRESULT,AX程序片段執(zhí)行完后,RESULT字單元的內(nèi)容二MAX(X1,X2???Xn)_(BX)=100H+2*(C0UNT-1),程序循環(huán)次數(shù)二 COUNT下列程序片段調(diào)用單個字符顯示的2號功能顯示STRING中的字符串‘COMPUTER’(不顯示字符‘$’)。 (調(diào)用DOS的2號功能實現(xiàn))STRINGDB‘COMPUTER',‘$'■!設(shè)AX,BX中的數(shù)一個為正數(shù),一個為負(fù)數(shù),編寫程序片段完成將正數(shù)送到PLW單元中存放。編程實現(xiàn):TESTAX,8000HJE K1或JZ K1MOVPLW,BWJMPDONEK1:MOVPLW,AXDONE:7、 將AX寄存器中的16位數(shù)分成4組,每組4位,然后把這四組數(shù)分別存放在AL、BL、CL、DL寄存器中。DATAREASEGMENTTEMPDB4DUP(?)DATAREAENDSCODESEGMENTASSUMECS:CODE,DS:DATAREAMOVDS,DATAREASTART:MOVCL,4;將TEMP;將TEMP地址值送BX;將AX寄存器值送DX;將DX寄存器高8位清零;DX寄存器低8位地址送入BX中;BX增1;邏輯作揖;循環(huán)數(shù)減1;若循環(huán)未完成則繼續(xù)循環(huán)LEABX,TEMPROTATE:MOVDX,AXANDDL,0FHMOV[BX],DLINCBXSHRAX,CLDECCHJNZROTATEMOVE:MOVDL,TEMP+1MOVCL,TEMP+2MOVBL,TEMP+3MOVAL,TEMP+4MAINENDPCODEENDSENDSTART8、已定義了兩個整數(shù)變量A、B,試編寫程序完成下列功能:1、若兩個數(shù)中有一個是奇數(shù),則將奇數(shù)存放在A中,偶數(shù)存放在B中。2、若兩個數(shù)均為奇數(shù),則將兩數(shù)均加1后存回原變量。DATAREASEGMENTADW?BDW?DATAREAENDSCSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DATAREASTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAREAMOVDS,AXBEGIN:MOVAX,AMOVBX,BXORAX,BX;AX,BX異或TESTAX,0001H;測試最低位,0則兩數(shù)同奇偶JZCLASS;為0則轉(zhuǎn)至CLASSTESTBX,0001H;若最低位為0則為偶數(shù),否則為奇數(shù)JZEXIT;為0則轉(zhuǎn)至EXITXCHGBX,A;交換BX/A中值,即A中存放奇數(shù)MOVB,BX;將BX中數(shù)送入B中,B中存放偶數(shù)JMPEXITCLASS:TESTBX,0001H;測試BX是否為奇數(shù)JZEXIT;不是則轉(zhuǎn)至EXITINCB;否則B自增1INCA;A自增1EXIT:

RETMAINENDPCSEGENDSENDSTART9、判斷寄存器AH和AL中第3位是否相同,如相同,AH置0,否則AH置全1。;異或判定是否相同,結(jié)果存放在AH;異或判定是否相同,結(jié)果存放在AH中;將除第三位外的所有位置0;若不為0,即不相等,轉(zhuǎn)至ONE;否則AH置0;AH置全1ONE:MOVAH,0FFHNEXT:……10、實現(xiàn)下列算式:W=X+Y+36-Z。設(shè)X、Y、Z、W均為雙字長數(shù)據(jù),各自的低十六位數(shù)和高十六位數(shù)分別存放在X、X+2、Y、Y+2、Z、Z+2的存儲單元中,結(jié)果的低十六位字和高十六位字分別存放在W和W+2兩個單元中。答:DATASEGMENTXDDYDDZDDWDDDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVDS,AXMOVAX,XADDAX,YMOVBX,X+2ADCBX,Y+2ADDAX,36ADCBX,0SUBAX,ZSBBBX,Z+2MOVW,AXMOVW+2,BXCODEENDSENDSTART11、寫出執(zhí)行以下計算的指令序列,其中U、V、W和Z均為存放16位帶符號數(shù)單元的地址。Z—W-(U+6)-(V+9)答:MOVAX,UADDAX,6MOVCX,VADDCX,9MOVBX,WSUBBX,AXSBBBX,CXMOVZ,BX12、 試編寫一程序段求出雙字長數(shù)的絕對值。雙字長數(shù)在A和A+2單元中,結(jié)果存放在B和B+2單元中。答:MOVAX,AMOVDX,A+2CMPDX,0JNSZHENGSHUNEGDX ;求補NEGAX ;求補卜SBBDX,0;減1,即求出對應(yīng)正數(shù)ZHENGSHU:MOVB,AXMOVB+2,DXINT20H從鍵盤輸入一個以$為結(jié)束符的字符串,統(tǒng)計其中的非數(shù)字字符個數(shù)。DSEGSEGMENTBUFFDB50DUP(‘’)MOVCOUNT,0INPUT:MOVAH,01;INT21HMOV[BX],ALINCBXCMPAL,’$’;JNZINPUT;LEABX,BUFF;NEXT:MOVCL,[BX]INCBXCMPCL,’$’;JZDISPCMPCL,30H;JBNEXTCMPCL,39H;JANEXTINCCOUNT;JMPNEXTDISP:|;把0?100之間的30個數(shù)存入以GRADE為首地址的30字?jǐn)?shù)組中,GRADE+i表示學(xué)號為i+1的學(xué)生的成績。另一個數(shù)組RANK為30個學(xué)

溫馨提示

  • 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

提交評論