匯編第六章答案_第1頁
匯編第六章答案_第2頁
匯編第六章答案_第3頁
匯編第六章答案_第4頁
匯編第六章答案_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——匯編第六章答案第六章答案

=======================================1.下面的程序段有錯嗎?若有,請指出錯誤.CRAYPROCPUSHAXADDAX,BXRET

ENDPCRAY

[解]:當然有錯誤,ENDPCRAY寫反了,應當將其改成CRAYENDP.

2.已知堆棧寄放器SS的內(nèi)容是0F0A0H,堆棧指示器SP的內(nèi)容是00B0H,先執(zhí)行兩條把8057H和0F79BH分別入棧的PUSH指令.然后再執(zhí)行一POP指令.試畫出示意圖說明堆棧及SP內(nèi)容的變化過程.

3.分析下面\的程序\畫出堆棧最滿時各單元的地址及內(nèi)容.;6.3題的程序

;===========================================S_SEGSEGMENTAT1000H;DEFINESTACKSEGMENTDW200DUP(?)TOSLABELWORD

S_SEGENDS

C_SEGSEGMENT;DEFINECODESEGMENTASSUMECS:C_SEG,SS:S_SEGMOVAX,S_SEGMOVSS,AX

MOVSP,OFFSETTOSPUSHDSMOVAX,0PUSHAX...

PUSHT_ADDRPUSHAXPUSHF...POPFPOPAX

POPT_ADDRRET

C_SEGENDS;ENDOFCODESEGMENTENDC_SEG;ENDOFASSEMBLY

4.分析下面\題的程序\的功能,寫出堆棧最滿時各單元的地址及內(nèi)容.;6.4題的程序

;====================================STACKSEGMENTAT500HDW128DUP(?)TOSLABELWORDSTACKENDS

CODESEGMENT;DEFINECODESEGMENTMAINPROCFAR;MAINPARTOFPROGRAM

ASSUMECS:CODE,SS:STACK

START:;STARTINGEXECUTIONADDRESSMOVAX,STACKMOVSS,AX

MOVSP,OFFSETTOSPUSHDSSUBAX,AXPUSHAX

;MAINPARTOFPROGRAMGOESHEREMOVAX,4321HCALLHTOA

RET;RETURNTODOS

MAINENDP;ENDOFMAINPARTOFPROGRAMHTOAPROCNEAR;DEFINESUBPROCEDUREHTOACMPAX,15JLEB1PUSHAXPUSHBPMOVBP,SP

MOVBX,[BP+2]ANDBX,000FHMOV[BP+2],BXPOPBPMOVCL,4SHRAX,CLCALLHTOAPOPAXB1:

ADDAL,30HCMPAL,3AHJLPRINTITADDAL,07HPRINTIT:MOVDL,ALMOVAH,2INT21HRET

HTOAENDP;ENDOFSUBPROCEDURECODEENDS;ENDOFCODESEGMENTENDSTART;ENDOFASSEMBLY

5.下面是6.5題的程序清單,請在清單中填入此程序執(zhí)行過程中的堆棧變化.0000STACKSGSEGMENT000020[.DW32DUP(?)????

0040]

STACKSGENDS

0000CODESGSEGMENTPARA'CODE'0000BEGINPROCFAR

ASSUMECS:CODESG,SS:STACKSG00001EPUSHDS00012BC0SUBAX,AX000350PUSHAX

0004E80008RCALLP100007CBRET0008BEGINENDP0008B10PROC0008E8000CRCALLC10000BC3RET000CB10ENDP000CC10PROC000CC3RET000DC10ENDP000DCODESGENDSENDBEGIN

6.寫一段子程序SKIPLINES,完成輸出空行的功能.空行的行數(shù)在AX寄放器中.[解]:

SKIPLINESPROCNEARPUSHCXPUSHDXMOVCX,AX

NEXT:MOVAH,2MOVDL,0AHINT21HMOVAH,2MOVDL,0DHINT21HLOOPNEXTPOPDXPOPCX

RET

SKIPLINESENDP

7.設(shè)有10個學生的成績分別是76,69,81,90,73,88,99,63,100和80分.試編制一個子程序統(tǒng)計60-69,70-79,80-89,90-99和100分的人數(shù)并分別存放到S6,S7,S8,S9和S10單元中.DSEGSEGMENT

NUMDW76,69,84,90,73,88,99,63,100,80NDW10S6DW0S7DW0S8DW0S9DW0S10DW0DSEGENDSCODESEGMENTMAINPROCFAR

ASSUMECS:CODE,DS:DSEGSTART:PUSHDSSUBAX,AXPUSHAX

MOVAX,DSEGMOVDS,AXCALLSUB1RET

MAINENDP

SUB1PROCNEARPUSHAXPUSHBXPUSHCXPUSHSIMOVSI,0MOVCX,NNEXT:

MOVAX,NUM[SI]MOVBX,10DIVBLMOVBL,ALCBW

SUBBX,6SALBX,1INCS6[BX]ADDSI,2

LOOPNEXTPOPSIPOPCXPOPBXPOPAXRET

SUB1ENDPCODEENDSENDSTART(解法二)

datasgsegment

gradedb76,69,84,90,73,88,99,63,100,80s6db0s7db0s8db0s9db0s10db0

mess6db'60~69:$'mess7db'70~79:$'mess8db'80~89:$'mess9db'90~99:$'mess10db'100:$'datasgendscodesgsegmentmainprocfar

assumecs:codesg,ds:datasgstart:

pushdssubax,axpushax

movax,datasgmovds,axcallsub1

leadx,mess6calldispstrmovdl,s6

calldispscorecallcrlf

leadx,mess7calldispstrmovdl,s7

calldispscore

callcrlf

leadx,mess8calldispstrmovdl,s8

calldispscorecallcrlf

leadx,mess9calldispstrmovdl,s9

calldispscorecallcrlf

leadx,mess10calldispstrmovdl,s10

calldispscorecallcrlfretmainendp

sub1procnearmovcx,10movsi,0

loop1:moval,grade[si]cmpal,60jlnext5cmpal,70jgenext1incs6

jmpshortnext5next1:cmpal,80jgenext2incs7

jmpshortnext5next2:cmpal,90jgenext3incs8

jmpshortnext5next3:cmpal,100jgnext5jenext4incs9

jmpshortnext5next4:incs10next5:incsi

looploop1retsub1endpdispstrprocnearmovah,9int21hdispstrendpdispscoreprocnearadddl,30hmovah,2int21hdispscoreendpcrlfprocnearmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21hretcrlfendpcodesgendsendstart

8.編寫一個有主程序和子程序結(jié)構(gòu)的程序模塊.子程序的參數(shù)是一個N字節(jié)數(shù)組的首地址TABLE,數(shù)N及字符CHAR.要求在N字節(jié)數(shù)組中查找字符CHAR,并記錄該字符的出現(xiàn)次數(shù).;主程序則要求從鍵盤接收一串字符以建立字節(jié)數(shù)組TABLE,并逐個顯示從鍵盤輸入的每個字符CHAR以及它在TABLE數(shù)組中出現(xiàn)的次數(shù).(為簡化起見,假設(shè)出現(xiàn)次數(shù)COUNTENDP

DISPLAYPROCNEAR;DISPLAY子程序CALLCRLF;顯示回車和換行MOVDL,CHARMOVAH,2INT21H

MOVDL,20HMOVAH,2INT21HMOVAL,BLANDAL,0FHADDAL,30HCMPAL,3AHJLPRINTADDAL,7PRINT:MOVDL,ALINT21HCALLCRLFRET

DISPLAYENDP

CRLFPROCNEAR;CRLF子程序MOVDL,0DHMOVAH,2INT21H

MOVDL,0AHMOVAH,2INT21HRET

CRLFENDPCODEENDSENDSTART

9.編寫一個子程序嵌套結(jié)構(gòu)的程序模塊,分別從鍵盤輸入姓名及8個字符的電話號碼,并以一定的格式顯示出來.主程序TELIST:

(1)顯示提醒符INPUTNAME:;

(2)調(diào)用子程序INPUT_NAME輸入姓名:

(3)顯示提醒符INPUTATELEPHONENUMBER:;(4)調(diào)用子程序INPHONE輸入電話號碼;

(5)調(diào)用子程序PRINTLINE顯示姓名及電話號碼;子程序INPUT_NAME:

(1)調(diào)用鍵盤輸入子程序GETCHAR,把輸入的姓名存放在INBUF緩沖區(qū)中;(2)把INBUF中的姓名移入輸出行OUTNAME;

子程序INPHONE:

(1)調(diào)用鍵盤輸入子程序GETCHAR,把輸入的8位電話號碼存放在INBUF緩沖區(qū)中;(2)把INBUF中的號碼移入輸出行OUTPHONE.子程序PRINTLINE:

顯示姓名及電話號碼,格式為:NAMETEL

************

==========================================

;編寫一個子程序嵌套結(jié)構(gòu)的程序模塊,分別從鍵盤輸入姓名及8個字符的電話號碼,并以一定的格式顯示出來(解法一)

datasegment

No_of_namedb20No_of_phonedb8inbufdb20dup(?)

outnamedb20dup(?),'$'outphonedb8dup(?),'$'

message1db'pleaseinputname:','$'

message2db'pleaseinputatelephonenumber:','$'message3db'NAME',16dup(20h),'TEL.',13,10,'$'

errormessage1db'youshouldinput8numbers!',13,10,'$'errormessage2db'youinputawrongnumber!',13,10,'$'flagdb?dataendsprogsegmentmainprocfar

assumecs:prog,ds:datastart:

pushdssubax,axpushax

movax,datamovds,axmovflag,0leadx,message1movah,09int21hcallinput_namecallcrlf

leadx,message2movah,09int21hcallinphonecallcrlfcmpflag,1jeexitcallprintlineexit:

retmainendp

input_nameprocnearpushaxpushdxpushcx

movcx,0

movcl,No_of_namecallgetchar

movax,0

moval,No_of_namesubax,cx

movcx,axmovsi,0next1:

moval,inbuf[si]movoutname[si],alincsi

loopnext1popcxpopdxpopaxret

input_nameendp

inphoneprocnearpushaxpushdx

movcx,0

movcl,No_of_phonecallgetcharcmpcx,0jnzerror1

movcl,No_of_phonemovsi,0

next2:

moval,inbuf[si]

cmpal,30hjlerror2cmpal,39hjaerror2

movoutphone[si],alincsi

loopnext2jmpexit2error1:

callcrlf

leadx,errormessage1movah,09int21h

movflag,1jmpexit2error2:

callcrlf

leadx,errormessage2movah,09int21hmovflag,1jmpexit2exit2:

popdxpopaxretinphoneendpgetcharprocnearpushaxpushdxmovdi,0rotate:

movah,01int21hcmpal,0dhjeexit1movinbuf[di],alincdilooprotateexit1:

popdxpopaxretgetcharendpcrlfprocnearpushaxpushdxmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21h

popdxpopaxret

crlfendp

printlineprocnearpushaxpushdxleadx,message3movah,09int21h

leadx,outnamemovah,09int21h

leadx,outphonemovah,09int21h

popdxpopaxretprintlineendpprogendsendmain

==========================================

;從鍵盤輸入姓名及8個字符的電話號碼,并以一定的格式顯示出來datareasegment

inbuflabelbyte;nameparameterlist:maxnlendb9;max.length

namelendb?;no.charenterednameflddb9dup(?)crlfdb13,10,'$'

messg1db'INPUTNAME:',13,10,'$'

messg2db'INPUTATELEPHONENUMBER:',13,10,'$'messg3db'NAMETEL',13,10,'$'OUTNAMEdb21dup(?),'$'OUTPHONEdb8dup(?),'$'datareaendsprognamsegment

assumecs:prognam,ds:datareastart:pushdssubax,axpushax

movax,datarea

movds,axmoves,axTELISTprocfarmovah,09leadx,messg1int21h

callINPUT_NAMEmovah,09leadx,messg2int21hcallINPHONEcallPRINTLINEretTELISTendp

INPUT_NAMEprocnearcallGETCHARmovbh,0

movbl,namelenmovcx,21subcx,bx

b20:movnamefld[bx],20hincbxloopb20

leasi,namefldleadi,OUTNAMEmovcx,9cld

repmovsbretINPUT_NAMEendp

INPHONEprocnearcallGETCHARmovbh,0

movbl,namelenmovcx,9subcx,bx

b30:movnamefld[bx],20hincbxloopb30

leasi,namefldleadi,OUTPHONEmovcx,8cld

repmovsb

retINPHONEendp

PRINTLINEprocnearmovah,09hleadx,messg3int21hmovah,09

leadx,OUTNAMEint21hmovah,09

leadx,OUTPHONEint21hretPRINTLINEendp

GETCHARprocnearmovah,0ahleadx,inbufint21hmovah,09leadx,crlfint21hretGETCHARendpprognamendsendstart

==========================================

10.編寫子程序嵌套結(jié)構(gòu)的程序,把整數(shù)分別用二進制和八進制形式顯示出來.主程序BANDO:把整數(shù)字變量VAL1存入堆棧,并調(diào)用子程序PAIRS;子程序PAIRS:從堆棧中取出VAL1;調(diào)用二進制顯示程序OUTBIN顯示出與其等效的二進制數(shù);輸出8個空格;調(diào)用八進制顯示程序OUTOCT顯示出與其等效的八進制數(shù);調(diào)用輸出回車及換行符的子程序..modelsmall.stack100h.data

val1dw0ffffh.code

mainprocfarstart:pushdssubax,axpushax

movax,@datamovds,axpushval1

callpairsret

mainendp

pairsprocnearpushbpmovbp,s

溫馨提示

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

評論

0/150

提交評論