1632位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)(第二版)第三章課后習(xí)題_第1頁(yè)
1632位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)(第二版)第三章課后習(xí)題_第2頁(yè)
1632位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)(第二版)第三章課后習(xí)題_第3頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

16o32位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)(第二版)第三章課后習(xí)題答案。3.1:匯編語(yǔ)言有什么特點(diǎn)解:匯編語(yǔ)言是一種以處理器指令系統(tǒng)為基礎(chǔ)的低級(jí)程序設(shè)計(jì)語(yǔ)言,它采用助記符表達(dá)指令操作碼,采用標(biāo)識(shí)符號(hào)表示指令操作數(shù),可以直接、有效地控制計(jì)算機(jī)硬件,因而容易創(chuàng)建代碼序列短小、運(yùn)行快速的可執(zhí)行程序3.2編寫(xiě)匯編語(yǔ)言源程序時(shí),一般的組成原則是什么?解:(1) 完整的匯編語(yǔ)言源程序由段組成(2) 一個(gè)匯編語(yǔ)言源程序可以包含若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列(3) 需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示程序執(zhí)行的起始點(diǎn),一個(gè)程序只有一個(gè)起始點(diǎn)(4) 所有的可執(zhí)行性語(yǔ)句必須位于某一個(gè)代碼段內(nèi),說(shuō)明性語(yǔ)句可根據(jù)需要位于任一段內(nèi)(5) 通常,程序還需要一個(gè)堆棧段3.3MODEL偽指令是簡(jiǎn)化段定義源程序格式中必

不可少的語(yǔ)句,它設(shè)計(jì)了哪7種存儲(chǔ)模式?各用于創(chuàng)建什么性質(zhì)的程序?解:存儲(chǔ)特點(diǎn)模式TINYSMALLCOMPACT不可少的語(yǔ)句,它設(shè)計(jì)了哪7種存儲(chǔ)模式?各用于創(chuàng)建什么性質(zhì)的程序?解:存儲(chǔ)特點(diǎn)模式TINYSMALLCOMPACTCOM類(lèi)型程序,只有一個(gè)小于64KB的邏輯段(MAS1小應(yīng)用程序,只有一個(gè)代碼段和一個(gè)數(shù)據(jù)段(含堆于64KB代碼少、數(shù)據(jù)多的程序,只有一個(gè)代碼段,但有多MEDIUM代碼多、數(shù)據(jù)少的程序,可有多個(gè)代碼段,只有一LARGE大應(yīng)用程序,可有多個(gè)代碼段和多個(gè)數(shù)據(jù)段(靜態(tài)HUGEFLAT更大應(yīng)用程序,可有多個(gè)代碼段和多個(gè)數(shù)據(jù)段(對(duì) 32位應(yīng)用程序,運(yùn)行在32位80x86CPU和WindowsHUGEFLAT3.4如何規(guī)定一個(gè)程序執(zhí)行的開(kāi)始位置,主程序執(zhí)行結(jié)束應(yīng)該如何返回DOS,源程序在何處停止匯編過(guò)程?解:開(kāi)始位置:用標(biāo)號(hào)指明開(kāi)始位置:用標(biāo)號(hào)指明返回DOS:利用DOS功能調(diào)用的4CH子功能來(lái)實(shí)現(xiàn)匯編停止:執(zhí)行到一條END匯編停止:執(zhí)行到一條END偽指令時(shí),停止匯編3.匯編3.5邏輯段具有哪些屬性?解:段定位、段定位、3.6給出采用一個(gè)源程序格式書(shū)寫(xiě)的例題3.13.6給出采用一個(gè)源程序格式書(shū)寫(xiě)的例題3.1源程序例題3.1:程序……stackdbstack創(chuàng)建一個(gè)在屏幕上顯示一段信息的W:segmentstack1024(0)endsdatasegmentstringdb'Hello,Assembly!’,OdH,OaH,r$,dataendscodesegment’codeassumecs:code,ds:data,ss:stackstart:movdx,offsetstringmovah,9int21hcodeendsendstart3.7D0S支持哪兩種可執(zhí)行程序結(jié)構(gòu),編寫(xiě)這兩種程序時(shí)需要注意什么?解:.EXE程序程序可以有多個(gè)代碼段和多個(gè)數(shù)據(jù)段,程序長(zhǎng)度可以超過(guò)64KB通常生成EXE結(jié)構(gòu)的可執(zhí)行程序.COM程序只有一個(gè)邏輯段,程序長(zhǎng)度不超過(guò)64KB需要滿(mǎn)足一定條件才能生成COM結(jié)構(gòu)的可執(zhí)行程序(MASM6.x需要采用TINY模式)3.8舉例說(shuō)明等價(jià)“EUQ”偽指令和等號(hào)偽指令的用途解:符號(hào)定義偽指令有“等價(jià)EQU”和“等號(hào)=”:符號(hào)名EQU數(shù)值表達(dá)式符號(hào)名EQU〈字符串〉符號(hào)名=數(shù)值表達(dá)式EQU用于數(shù)值等價(jià)時(shí)不能重復(fù)定義符號(hào)名,但“=”允許有重復(fù)賦值。例如:X=7 ;等效于:Xequ7X=X+5;“XEQUX+5”是錯(cuò)誤的3.9給出下列語(yǔ)句中,指令立即數(shù)(數(shù)值表達(dá)式)的值moval,23hAND45hOR67hmovax,1234h/16+10h3:movax,23hSHL44:moval,'a’and(NOT('a’-'A’))5:movax,(76543LT32768)XOR7654h解:(1)al67h(2)ax133h,dx=4h(3)ax0230h(4)al41h(4)ax7654h3.10畫(huà)圖說(shuō)明下列語(yǔ)句分配的存儲(chǔ)空間及初始化的數(shù)據(jù)值byte—vardbrabc’,10,lOh,'EF’,3dup(-1,?,3,dup(4))(2:)word_vardwlOh,-5,3,dup(?)解:一(1)444144一?444一2444一?444123C056111hhhhhh(2)1000OfOf??????hhbhfh3.11請(qǐng)?jiān)O(shè)置一個(gè)數(shù)據(jù)段,按照如下要求定義變量:mylb為字符串常量,表示字符串“personalComputer”my2b為用十進(jìn)制數(shù)表示的字節(jié)變量,這個(gè)數(shù)的大小為20my3b為用十六進(jìn)制數(shù)表示的字節(jié)變量,這個(gè)數(shù)的大小為20my4b為用二進(jìn)制數(shù)表示的字節(jié)變量,這個(gè)數(shù)的大小為20⑸my5w為20個(gè)未賦值的字變量⑹my6c為100的符號(hào)常量(7)my7c為字符串常量,代替字符串“personalComputer”解:?datamylbdb’PersonalComputer"my2bdb20my3bdb14hmy4bdb00010100bmy5wdw20dup(?)my6c—100my7c—<,PersonalComputer">3.12希望控制變量或程序代碼在段中的偏移地址,應(yīng)該使用哪個(gè)偽指令?解:利用定位偽指令控制,如org,even,align3.13名字和符號(hào)有什么屬性?解:包括邏輯地址和類(lèi)型兩種屬性O(shè)3.14設(shè)在某個(gè)程序中有如下片段,請(qǐng)寫(xiě)出每條傳送指令執(zhí)行后寄存器AX的內(nèi)容:VarwVarbVardBuffVarwVarbVardBuffMessMovax,offsetmessMovax,typebuff+typemess+typevardMovax,sizeofvarw+sizeofbuff+sizeofmessMovax,lengthofvarw+lengthofvard解:;數(shù)據(jù)段org100hvarwdwl234h,5678hvarbdb3,4vardddl2345678hbuffddlOdup(?)messdb'Hello,代碼段movax,offsetvarb+offsetmessmovax,typebuff+typemess+typevardmovax,sizeofvarw+sizeofbuff+sizeofmessmovax,lengthofvarw+lengthofvard3.15假設(shè)myword是一個(gè)字變量,mybytel和mybyte2是兩個(gè)字節(jié)變量,指出下列語(yǔ)句中的具體錯(cuò)誤原因。movbyteptr{bx},1000movbx,offsetmyword{si}cmpmybytel,mybyte2movmybytel,al+1subal,mywordjnzmyword解:(1)1000超過(guò)一個(gè)字節(jié)所能表達(dá)的最大整數(shù)(2)SI應(yīng)為偶數(shù)兩個(gè)內(nèi)存單元不能直接運(yùn)算應(yīng)改為[al+1]條件轉(zhuǎn)移指令后面應(yīng)接標(biāo)號(hào),而不是變3.16編寫(xiě)一個(gè)程序,把從鍵盤(pán)輸入的一個(gè)小寫(xiě)字母用大寫(xiě)字母顯示出來(lái)解:movah,1;只允許輸入小寫(xiě)字母int21hsubal,20h轉(zhuǎn)換為大寫(xiě)字母movdl,almovah,2int21h;顯示3.17已知用于LED數(shù)碼管的顯示代碼表為:LEDtable dbOcOh,0f9h,0a4h,ObOh,99h,92h,82h,0f8hdb80h,90h,88h,83h,0c6h,Oclh,86h,8eh它依次表示0~9,A~F這16個(gè)數(shù)碼的顯示代碼?,F(xiàn)編寫(xiě)一個(gè)程序?qū)崿F(xiàn)將lednum中的一個(gè)

數(shù)字(0數(shù)字(0?9,a~f)轉(zhuǎn)換成對(duì)應(yīng)的LED顯示代碼解:movbx,offsetLEDtablemoval,lednumxlat3.18編制一個(gè)程序,把變量bufX和bufY中較大者存入bufZ;若兩者相等,則把其中之一存入bufZ中。假設(shè)變量存放的是8位有符號(hào)數(shù)。解:movax,bufXcmpax,bufYjaedonemovax,bufYdone:movbufZ,ax3.19為有符號(hào)16位數(shù),請(qǐng)將它們的符號(hào)狀態(tài)保存在signX,即:如果變量值大于等于0,保存0;如果X小于0,保存-1。編寫(xiě)該程序。設(shè)變量bufX解:.modelsmall.stack.data

bufXsignXdw-7db?.code.startupcmpbufX,0 ;testbufX,80hjlnext;jnznextmovsignX,0jmpdonenext:done:movsignX,-1.exit0end3.20bufX、bufY和bufZ是3個(gè)有符號(hào)16進(jìn)制數(shù),編寫(xiě)一個(gè)比較相等關(guān)系的程序如果這3個(gè)數(shù)都不相等,則顯示0如果這三個(gè)數(shù)中有兩個(gè)數(shù)相等,則顯示1如果這三個(gè)數(shù)都相等,則顯示2解:movdl,’movax,bufXcmpax,bufYjenextldecdlnextl:cmpax,bufZjenext2decdlnext2:movah,2int21h3.21例3.7中,如果要實(shí)現(xiàn)所有為1的位都順序執(zhí)行相應(yīng)的處理程序段(而不是例題中僅執(zhí)行最低為1位的處理程序段),請(qǐng)寫(xiě)出修改后的代碼段?解::代碼段moval,numbermovbx,0;BX_記錄為1的位數(shù)restart: cmpal,0;AL=0結(jié)束jzdoneagain:shral,1;最低位右移進(jìn)入CFjcnext;為1,轉(zhuǎn)移incbx;不為1,繼續(xù)jmpagainnext:pushaxpushbxShlbx,1;位數(shù)乘以2(偏移地址要用2個(gè)字節(jié)單元)jmpaddrs[bx]:間接轉(zhuǎn)移:IP[table+BX];以下是各個(gè)處理程序段

funO:movdl,’0’jmpdispfunl:movdl,’rjmpdispfun2:movdl,’2’jmpdispfun3:movdl,'3’jmpdispfun4:movdl,’4’jmpdispfun5:movdl,15’jmpdispfun6:movdl,16’jmpdispfun7:movdl,’7’jmpdisp?disp:movah,2;顯示一個(gè)字符int21hpopbxpopaxjmprestartdone:3.22編制程序完成12H、45H、0F3H、6AH、20H、OFEH、90H、0C8H、57H和34H等10個(gè)字節(jié)

數(shù)據(jù)之和,并將結(jié)果存入字節(jié)變量SUM中(不考慮溢出和進(jìn)位)。;wjxt322.asm.modelsmall.stack.datab_datadb12h,45h,Of3h,6ah,20h,Ofeh,90h,0c8h,57h,34hnumsum;原始數(shù)據(jù)equ10;數(shù)據(jù)個(gè)數(shù)db?;預(yù)留結(jié)果單元.code.startup;原始數(shù)據(jù)equ10;數(shù)據(jù)個(gè)數(shù)db?;預(yù)留結(jié)果單元.code.startupxorsi,xoral,movex,again:addal,incsisialnum;指向下一個(gè)數(shù);如未完,繼續(xù)累加;完了,存結(jié)果;指向下一個(gè)數(shù);如未完,繼續(xù)累加;完了,存結(jié)果movsum,al.exit0end3.23求主存0040h:0開(kāi)始的一個(gè)64KB物理段中共有多少個(gè)空格?

;wjxt323.asm.codestart.codestart:movmovmovmovxoragain:empax,0040h;送段地址ds,axsi,0;偏移地址ex,si;計(jì)數(shù)(循環(huán)次數(shù))ax,ax;空格計(jì)數(shù)器清零byteptr[si],20h;與空格的ASCII碼比較:是空格,空格數(shù)加1;修改地址指針;cx=cx:是空格,空格數(shù)加1;修改地址指針;cx=cx—1,如cx=0退next:incsiloopagain出循環(huán).exit0endstart3.24編寫(xiě)計(jì)算100個(gè)16位正整數(shù)之和的程序。如果和不超過(guò)16位字的范圍(65535),則保存其和到wordsum,如超過(guò)則顯示^overflow,。答:countequ100parraydwcountdup(?)wordsumdw0;假設(shè)有100個(gè)數(shù)據(jù)msgagain:next:db£overflow’,’;代碼段ex,countax,0bx,offsetparrayax,[bx]nextdx,offsetmsgah,921h;顯示溢出信息done;然后,跳出循環(huán)體bx,2loopagainmovwordsum,axmovmovmovaddjncmovmovintjmpadddone:3.25成為用8421BCD碼表示的5位十進(jìn)制數(shù)。轉(zhuǎn)換算法可以是:用二進(jìn)制數(shù)除以10000,商為“萬(wàn)位”,再用余數(shù)除以1000,得到“千位”;依次用余數(shù)除以100、10和1,得到“百位”、“十位”和“個(gè)位”。編程把一個(gè)16位無(wú)符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換;wjxt325.asm.model.stack.datadw?db5dup(?);五位bed結(jié)果,髙對(duì)髙small256arraydbcd低對(duì)低=1again:.code.startupmovmovmovmovmovmovdivmovdx,array;取源數(shù)據(jù)(余數(shù))bx,10000;除數(shù)ox,10;除數(shù)系數(shù)si,4;目的數(shù)據(jù)髙位位移量ax,dx;dx.ax中存放被除數(shù)dx,0bx;除于bx,商ax,余數(shù)dxdbcd[si],al;商<10,存結(jié)果pushdx;暫存余數(shù)movax,bx;除數(shù)除于10movdx,0divex數(shù)。存在dxmovpopdecjnz;dx.ax除于ex,商ax、余bxdxsiax;bx是除數(shù);目的數(shù)據(jù)位移量減1againmovdbcd,dl;存?zhèn)€位數(shù)(〈10).exit0end3.26過(guò)程定義的一般格式是怎樣的?子程序開(kāi)始為什么常有PUSH指令?返回錢(qián)為什么常有POP指令?下面完成16位無(wú)符號(hào)數(shù)累加的子程序有什么不妥嗎?若有,請(qǐng)改正。CarzyPROCPushaxXorax,axXorax,dxAgainaddax,[bx]Adcdx,0IncbxIncbxLoopagainRetENDPcrazy解:匯編語(yǔ)言中,子程序要用一對(duì)過(guò)程偽指令PROC和ENDP聲明,格式如下:過(guò)程名PROC[NEAR|FAR]……;過(guò)程體

過(guò)程名ENDP(2)保護(hù)用到的寄存器內(nèi)容,以便子程序返回時(shí)進(jìn)行相應(yīng)的恢復(fù)。(3)改錯(cuò):crazyprocpishbxpushexxorax,axxordx,dxagain:adda,[bx]adcdx,0incbxincbxloopagainpopexpopbx3.27編寫(xiě)一個(gè)源程序,在鍵盤(pán)上按一個(gè)鍵,將從AL返回的ASCII碼值顯示出來(lái),如果按下ESC鍵則程序退出。解(不需調(diào)用HTOASC子程序):ESC的ASCII碼是lbhESC的ASCII碼是lbhmovdl,almovah,2int21h;是大寫(xiě)字母則轉(zhuǎn)換為小寫(xiě)movdl,almovah,2int21h;是大寫(xiě)字母則轉(zhuǎn)換為小寫(xiě)字母jmpagaindone:“?3.28請(qǐng)按如下說(shuō)明編寫(xiě)子程序:;子程序功能:把用Ascn碼表示的兩位十進(jìn)制數(shù)轉(zhuǎn)換為對(duì)應(yīng)二進(jìn)制數(shù);入口參數(shù):DH=+位數(shù)的ASCII碼,DL=f位數(shù)的ASCH碼;出口參數(shù):此=對(duì)應(yīng)的二進(jìn)制數(shù)解答:asctobprocpushexanddh,Ofh;先轉(zhuǎn)換十位數(shù)shldh,l;十位數(shù)乘以10(采用移位movch,dhshldh,1shldh,1adddh,chanddl,Ofh;轉(zhuǎn)換個(gè)位數(shù)adddh,dl;十位數(shù)加個(gè)位數(shù)指令)

moval,dh;設(shè)置出口參數(shù)popexretasetobendp3.29調(diào)用HTOASC子程序,顯示個(gè)字節(jié)的3.29調(diào)用HTOASC子程序,顯示個(gè)字節(jié)的16進(jìn)制數(shù),的子程序。解:DIPASCproc;入口參數(shù):一個(gè)16解:DIPASCproc;入口參數(shù):一個(gè)16進(jìn)制數(shù)處=要顯示的pushexpushdxpushaxmovcl,4;轉(zhuǎn)換髙位shral,clcallHTOASCmovdl,al;顯示movah,2int21h轉(zhuǎn)換低位轉(zhuǎn)換低位callHTOASCmovdl,al:顯示movah,2int21hmovdl,H';顯示一個(gè)字母“H”

movah,2int21hpopdxpopexretDIPASCendpHTOASCproc;將AL低4位表達(dá)的一位16進(jìn)制數(shù)轉(zhuǎn)換為ASCIIandempjbeandempjbeaddal,9htoasclal,37h;是0仙?OFH,加37H轉(zhuǎn)換為ASCII碼ret :子程序返回htoascl: addal,30h ;是0?9,加30H轉(zhuǎn)換為ASCII碼ret ;子程序返回HTOASCendp3.30寫(xiě)一個(gè)子程序,根據(jù)入口參數(shù)AL=0、1、2,依次實(shí)現(xiàn)對(duì)大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)、小寫(xiě)轉(zhuǎn)換成大寫(xiě)或大小字母互換。欲轉(zhuǎn)換的字符串在string中,用0表示結(jié)束解:proclucaseprocpushbxmovbx,offsetstringcmpal,0jecaseOcmpal,1jzeaselcmpal,2jzcase2jmpdonecaseO: cmpbyteptr[bx],0jedonecmpbyteptr[bx],A’jbnextOcmpbyteptr[bx],’VjanextOaddbyteptr[bx],20hnextO: incbxjmpcaseOeasel: cmpbyteptr[bx],0jedonecmpbyteptr[bx],a’jbnextlcmpbyteptr[bx],’z’janextlsubbyteptr[bx],20hnextl: incbxjmpeaselcase2: empbyteptr[bx],0jedoneempbyteptr[bx],’A’jbnext2empbyteptr[bx],’Vjanext20addbyteptr[bx],20hjmpnext2next20: empbyteptr[bx],’a’jbnext2empbyteptr[bx],’z’janext2subbyteptr[bx],20hnext2: incbxjmpcase2done:popbxretlucase endp3.31子程序的參數(shù)傳遞有哪些方法?請(qǐng)簡(jiǎn)單比較解:用寄存器傳遞參數(shù):

:簡(jiǎn)單和常用的參數(shù)傳遞方法是通過(guò)寄存器只要把參數(shù)存于約定的寄存器中就可以了由于通用寄存器個(gè)數(shù)有限,這種方法對(duì)少量數(shù)據(jù)可以直接傳遞數(shù)值,而對(duì)大量數(shù)據(jù)只能傳遞地址采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護(hù)和恢復(fù),帶有入口參數(shù)的寄存器可以保護(hù)、也可以不保護(hù),但最好能夠保持一致(2)用共享變量傳遞參數(shù)子程序和主程序使用同一個(gè)變量名存取數(shù)據(jù)就是利用共享變量(全局變量)進(jìn)行參數(shù)傳遞如果變量定義和使用不在同一個(gè)源程序中,需要利用PUBLIC、EXTREN聲明如果主程序還要利用原來(lái)的變量值,則需要保護(hù)和恢復(fù)利用共享變量傳遞參數(shù),子程序的通用性較差,但特別適合在多個(gè)程序段間、尤其在不同的程序模塊間傳遞數(shù)據(jù)(3)用堆棧傳遞參數(shù)參數(shù)傳遞還可以通過(guò)堆棧這個(gè)臨時(shí)存儲(chǔ)區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們1=.I=i采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語(yǔ)言與髙級(jí)語(yǔ)言混合編程時(shí)的常規(guī)方法1=.I=i3.32采用堆棧傳遞參數(shù)的一般方法是什么?為什么應(yīng)該特別注意堆棧平衡問(wèn)題。解:方法:主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們注意:壓棧與彈棧必須要一一對(duì)應(yīng)。3.33編寫(xiě)一個(gè)求32位數(shù)據(jù)補(bǔ)碼的子程序,通過(guò)寄存器傳遞入口參數(shù)解:方法1:neg32proc;入口參數(shù):DX.AX=32位有符號(hào)數(shù)negax;實(shí)現(xiàn)0—DX.AX功能negdxsbbdx,0;這條指令也可以用decdx代替retneg32endp符號(hào)數(shù)的補(bǔ)碼方法2:neg32proc出口參數(shù):neg32endp符號(hào)數(shù)的補(bǔ)碼方法2:neg32proc出口參數(shù):DX.AX=32位有入口參數(shù):DX-AX=32位有符號(hào)數(shù)實(shí)現(xiàn)DX.AX求反加實(shí)現(xiàn)DX.AX求反加1出口參數(shù):DX.AX=32位有neg32endp;符號(hào)數(shù)的補(bǔ)碼3.34編寫(xiě)一個(gè)計(jì)算字節(jié)校驗(yàn)的子程序。所謂“校驗(yàn)和”是指不計(jì)進(jìn)位的累加,常用語(yǔ)建廠(chǎng)信息的正確性。主程序提供入口參數(shù),有數(shù)據(jù)個(gè)數(shù)和數(shù)據(jù)緩沖區(qū)的首地址。子程序回送求和結(jié)果這個(gè)出口參數(shù)。傳遞參數(shù)方法自定。解:;數(shù)據(jù)段arraydb;數(shù)組 ;數(shù)組 equ$-array;數(shù)組元素個(gè)數(shù)db? :校驗(yàn)和:代碼段movbx,offsetarray;BX^-數(shù)組的偏countresult移地址

movex,count;CX—數(shù)組的元素個(gè)數(shù)callchecksum;調(diào)用求和過(guò)程movresult,al;處理出口參數(shù)movax,4c00hint21h:計(jì)算字節(jié)校驗(yàn)和的通用過(guò)程:入口參數(shù):DS:BX=數(shù)組的段地址:偏移地址,0*=元素個(gè)數(shù);出口參數(shù):AL=校驗(yàn)和;說(shuō)明:除AX/BX/CX外,不影響其他寄存器checksumprocchecksumprocxoral,al;累加器清0sum:addal,[bx];求和incbx ;指向下一個(gè)字節(jié)sum:loopsumchecksumendendpchecksumendendp3.35編寫(xiě)3個(gè)子程序,把一個(gè)16位二進(jìn)制數(shù)用4為16進(jìn)制數(shù)在屏幕上顯示出來(lái),分別運(yùn)用如下3中參數(shù)傳遞方法,并配合3個(gè)主程序驗(yàn)證它。采用AX寄存器傳遞這個(gè)16位二進(jìn)制數(shù)。采用temp變量傳遞這個(gè)16位二進(jìn)制數(shù)。

采用堆棧方法傳遞這個(gè)16位二進(jìn)制數(shù)。解:(1)wdatadispa.modelsmall.stack.datadw34abh.code.startupmovax,wdatacalldispa.exit0■procpushexpushdxmovcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,Ofhcalldldispmovdl,alshrdl,clwdatadispacalldldispmovdl,alanddl,Ofhcalldldisppopdxpopexretdispaendpdldispprocpushaxordl,30hempdl,39hjbedldispladddl,7dldispl: movah,2int21hpopaxretdldispendpend⑵.modelsmall.stack.datawdatadw34abhwordtemp dw?.code.startupmovax,wdatamovwordtemp,axcalldispa.exit0dispaprocpushexpushdxmovcl,4movdl,byteptrwordtemp+1shrdl,clcalldldispmovdl,byteptrwordtemp+1anddl,Ofhcalldldispmovdl,byteptrwordtempshrdl,clcalldldispmovdl,byteptrwordtempanddl,Ofhcalldldisppopdxpopexretdispaendpdldispprocpushaxordl,30hcmpdl,39hjbedldispladddl,7dldispl: movah,2int21hpopaxretdldispendpend⑶.modelsmall.stack.datawdatadw34abh.code.startuppushwdatacalldispapopax;addsp,2.exit0

dispaprocpushbpmovbp,sppushaxpushexpushdxdispamovax,[bp+4]movcl,4movdl,ahshrdl,clcall.dldispmovdl,ahanddl,Ofhcall.dldispmovdl,alshrdl,clcall.dldispmovdl,alanddl,Ofhcall.dldispPOPdxpopexpopaxpopbpret

dispaendpdldispprocpushaxordl,30hcmpdl,39hjbedldispladddl,7dldispl: movah,2int21hpopaxretdldispendpend3.36什么情況需要使用PUBLIC和EXTERN偽指令?請(qǐng)將題3.20的子程序全部用于寄存器傳遞參數(shù),寫(xiě)成子程序模塊。解:如果利用共享變量傳遞函數(shù),且變:定義如果利用共享變量傳遞函數(shù),且變:定義和使用不在同一個(gè)源程序中,需要利用PUBLIC.EJCTERN聲明。3.37宏是如何定義、調(diào)用和展幵的?解:(1)宏定義由一對(duì)宏匯編偽指令MACRO和

ENDM來(lái)完成,格式如下:宏名MACRO[形參表]……;宏定義體ENDM宏定義之后就可以使用它,即宏調(diào)用:宏名[實(shí)參表]Wi(2)宏調(diào)用的格式同一般指令一樣:在使用宏指令的位置寫(xiě)下宏名,后跟實(shí)體參數(shù);如果有多個(gè)參數(shù),應(yīng)按形參順序填入實(shí)參,也用逗號(hào)分隔Wi(3)宏展開(kāi):在匯編時(shí),宏指令被匯編程序用對(duì)應(yīng)的代碼序列替代,這就是宏展開(kāi)宏展開(kāi)的具體過(guò)程是:當(dāng)匯編程序掃描源程序遇到

溫馨提示

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

評(píng)論

0/150

提交評(píng)論