


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第六章答案1. 下面的程序段有錯(cuò)嗎?若有,請(qǐng)指出錯(cuò)誤CRAY PROCPUSH AXADD AX,BXRETENDP CRAY解:當(dāng)然有錯(cuò)誤,ENDP CRAYI反了 ,應(yīng)該將其改成CRAY ENDP.2. 已知堆棧寄存器SS的內(nèi)容是0F0A0H堆棧指示器SP的內(nèi)容是00B0H,先執(zhí)行兩 條把8057H和0F79BH分別入棧的PUSH旨令然后再執(zhí)行一 POPW令.試畫(huà)出示意 圖說(shuō)明堆棧及SP內(nèi)容的變化過(guò)程.MOV AX.8057HMOV BK0F7PBH(SP)POP(SP)3. 分析下面"6,3的程序",畫(huà)出堆棧最滿時(shí)各單元的地址及內(nèi)容 ;6.3題的程序S_SEG SEG
2、MENT AT 1000H ;DEFINE STACK SEGMENTDW 200 DUP(?)TOS LABEL WORDS_SEG ENDSC_SEG SEGMENT ;DEFINE CODE SEGMENTASSUME CS:C_SEG,SS:S_SEGMOV AX,S_SEGMOV SS,AXMOV SP,OFFSET TOSPUSH DSMOV AX,0PUSH AXPUSH T_ADDRPUSH AXPUSHFPOPFPOP AXPOP T_ADDRRETC_SEG ENDS ;END OF CODE SEGMENTEND C_SEG ;END OF ASSEMBLY第六章第3題答
3、案4. 分析下面"6.4題的程序"的功能,寫出堆棧最滿時(shí)各單元的地址及內(nèi)容 ;6.4題的程序STACK SEGMENT AT 500HDW 128 DUP(?)TOS LABEL WORDSTACK ENDSCODE SEGMENT ;DEFINE CODE SEGMENT MAIN PROC FAR ;MAIN PART OF PROGRAMASSUME CS:CODE,SS:STACKSTART: ;STARTING EXECUTION ADDRESSMOV AX,STACKMOV SS,AXMOV SP,OFFSET TOSPUSH DSSUB AX,AXPUSH A
4、X;MAIN PART OF PROGRAM GOES HEREMOV AX,4321HCALL HTOARET;RETURN TO DOSMAIN ENDP ;END OF MAIN PART OF PROGRAMHTOA PROC NEAR ;DEFINE SUBPROCEDURE HTOA CMP AX,15JLE B1PUSH AXPUSH BPMOV BP,SPMOV BX,BP+2AND BX,000FHMOV BP+2,BXPOP BPMOV CL,4SHR AX,CLCALL HTOAPOP AXB1:ADD AL,30HCMP AL,3AHJL PRINTITADD AL,0
5、7HPRINTIT:MOV DL,ALMOV AH,2INT 21HRETHTOA ENDP ;END OF SUBPROCEDURECODE ENDS ;END OF CODE SEGMENTEND START ;END OF ASSEMBLY第六章第4題答案5. 下面是6.5題的程序清單,請(qǐng)?jiān)谇鍐沃刑钊氪顺绦驁?zhí)行過(guò)程中的堆棧變化0000STACKSG SEGMENT0000 20 . DW 32 DUP?0040STACKSG ENDS0000CODESG SEGMENT PARA 'CODE'0000BEGIN PROC FARASSUME CS:CODESG,SS:ST
6、ACKSG0000 1EPUSH DS0001 2B C0 SUB AX,AX0003 50PUSH AX0004 E8 0008 R CALL P100007 CBRET0008BEGIN ENDP0008B10 PROC0008 E8 000C R CALL C10000B C3RET000CB10 ENDP000CC10 PROC000C C3RET000DC10 ENDP000DCODESG ENDSEND BEGINo nu o o D o o o o Q fl oTVspsp83oo(0034)(0036)(0033)(0Q3A)(OQ3C)(003E)SP:OOOB00070DS
7、003C第六章第5題答案6. 寫一段子程序SKIPLINES,完成輸出空行的功能.空行的行數(shù)在AX寄存器中. 解:SKIPLINES PROC NEARPUSH CXPUSH DXMOV C,AXNEXT MOV AH 2MOV DL OAHINT 21HMOV AH 2MOV DL 0DHINT 21HLOOP NEXTPOP DXPOP CXRETSKIPLINES ENDP7. 設(shè)有 10個(gè)學(xué)生的成績(jī)分別是 76,69,81,90,73,88,99,63,100和80分.試編制一個(gè)子程序統(tǒng)計(jì) 60-69,70-79,80-89,90-99 和 100 分的人數(shù)并分別存放到S6,S7,S8
8、,S9 和 S10單元中.DSEG SEGMENTNUM DW 76,69,84,90,73,88,99,63,100,80N DW 1056 DW 057 DW 058 DW 059 DW 0S10 DW 0DSEG ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE, DS:DSEGSTART:PUSH DSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AXCALL SUB1RETMAIN ENDPSUB1 PROC NEARPUSH AXPUSH BXPUSH CXPUSH SIMOV SI, 0MOV CX, NNEXT:
9、MOV AX, NUMSIMOV BX, 10DIV BLMOV BL, ALCBWSUB BX, 6SAL BX, 1INC S6BXADD SI,2LOOP NEXTPOP SIPOP CXPOP BXPOP AXRETSUB1 ENDPCODE ENDSEND START( 解法二 ) datasg segment grade db 76,69,84,90,73,88,99,63,100,80s6s7s8s9db 0db 0db 0db 0s10 db 0 mess6 db '6069:$' mess7 db '7079:$' mess8 db '
10、8089:$' mess9 db '9099:$' mess10 db '100:$' datasg ends codesg segment main proc farstart:assume cs:codesg,ds:datasgpush dssub ax,ax push ax mov ax,datasg mov ds,ax call sub1lea dx,mess6 call dispstr mov dl,s6 call dispscore call crlflea dx,mess7 call dispstr mov dl,s7 call disps
11、corecall crlf lea dx,mess8 call dispstr mov dl,s8 call dispscore call crlflea dx,mess9 call dispstr mov dl,s9 call dispscore call crlflea dx,mess10 call dispstr mov dl,s10 call dispscore call crlfretmainendpsub1proc nearmov cx,10mov si,0loop1: mov al,gradesicmp al,60jl next5cmp al,70jge next1inc s6j
12、mp short next5 next1: cmp al,80jge next2inc s7jmp short next5 next2: cmp al,90jge next3inc s8jmp short next5 next3: cmp al,100jg next5je next4inc s9jmp short next5next4: inc s10next5: inc siloop loop1retsub1 endpdispstr proc nearmov ah,9int 21hdispstr endpdispscore proc nearadd dl,30hmov ah,2int 21h
13、dispscore endpcrlf proc nearmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hretcrlf endpcodesg endsend start8. 編寫一個(gè)有主程序和子程序結(jié)構(gòu)的程序模塊子程序的參數(shù)是一個(gè)N字節(jié)數(shù)組 的首地址TABLE數(shù)N及字符CHAR要求在N字節(jié)數(shù)組中查找字符 CHAR并記錄該 字符的出現(xiàn)次數(shù).;主程序則要求從鍵盤接收一串字符以建立字節(jié)數(shù)組 TABLE并 逐個(gè)顯示從鍵盤輸入的每個(gè)字符 CHAR以及它在TABLE數(shù)組中出現(xiàn)的次數(shù).(為簡(jiǎn) 化起見(jiàn),假設(shè)出現(xiàn)次數(shù)=15,可以用十六進(jìn)制形式顯示出來(lái))解:DA
14、TA SEGMENTMAXLEN DB 40N DB ?TABLE DB 40 DUP (?)CHAR DB 'A' 查找字符'A'EVEN_ADDR DW 3 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATAMAIN PROC FARSTART:PUSH DSMOV AX, 0PUSH AXMOV AX, DATAMOV DS, AXLEA DX, MAXLENMOV AH, 0AHINT 21H ; 從鍵盤接收字符串MOV _ADDR, OFFSET TABLEMOV _ADDR+2, OFFSET NMO
15、V _ADDR+4, OFFSET CHARMOV BX, OFFSET _ADDR ;通過(guò)地址表傳送變量地址CALL COUNT ;計(jì)算CHAR勺出現(xiàn)次數(shù)CALL DISPLAY ; 顯示RETMAIN ENDPCOUNT PROC NEAR ; COL子程序PUSH SIPUSH DIPUSH AXPUSH CXMOV DI, BXMOV SI, BX+2MOV CL, BYTE PTRSIMOV CH, 0MOV SI, BX+4MOV AL, BYTE PTRSIMOV BX, 0AGAIN:CMP AL, BYTE PTRDIJNE L1INC BXL1: INC DILOOP AG
16、AINPOP CXPOP AXPOP DIPOP SIRETCOUNT ENDPDISPLAY PROC NEAR ; DISPLA子程序CALL CRLF ; 顯示回車和換行MOV DL, CHARMOV AH, 2INT 21HMOV DL, 20HMOV AH, 2INT 21HMOV AL, BLAND AL, 0FHADD AL, 30HCMP AL, 3AHJL PRINTADD AL, 7PRINT:MOV DL, ALINT 21HCALL CRLFRETDISPLAY ENDPCRLF PROC NEAR ; CRL子 程序MOV DL, 0DHMOV AH, 2INT 21
17、HMOV DL, 0AHMOV AH, 2INT 21HRETCRLF ENDPCODE ENDSEND START9. 編寫一個(gè)子程序嵌套結(jié)構(gòu)的程序模塊 ,分別從鍵盤輸入姓名及 8 個(gè)字符的電話 號(hào)碼, 并以一定的格式顯示出來(lái) .主程序 TELIST:(1) 顯示提示符 INPUT NAME:; 調(diào)用子程序INPUT_NAM輸入姓名:(3)顯示提示符 INPUT A TELEPHONE NUMBER:;調(diào)用子程序INPH ON輸入電話號(hào)碼;(5)調(diào)用子程序PRINTLINES示姓名及電話號(hào)碼;子程序 INPUT_NAME:(1)調(diào)用鍵盤輸入子程序GETCHAR,輸入的姓名存放在INBUF緩沖
18、區(qū)中;把INBUF中的姓名移入輸出行 OUTNAME;子程序 INPHONE:(1)調(diào)用鍵盤輸入子程序GETCHA把輸入的8位電話號(hào)碼存放在INBUF緩沖區(qū)中;把INBUF中的號(hào)碼移入輸出行 OUTPHONE.子程序 PRINTLINE:顯示姓名及電話號(hào)碼 ,格式為 :NAMETEL*; 編寫一個(gè)子程序嵌套結(jié)構(gòu)的程序模塊,分別從鍵盤輸入姓名及 8個(gè)字符的電話 號(hào)碼,并以一定的格式顯示出來(lái)( 解法一 ) data segmentNo_of_name db 20 No_of_phone db 8 inbuf db 20 dup(?) outname db 20 dup(?),'$'
19、 outphone db 8 dup(?),'$' message1 db 'please input name:','$' message2 db 'please input a telephone number:','$' message3 db 'NAME',16 dup(20h),'TEL.',13,10,'$' errormessage1 db 'you should input 8 numbers!',13,10,'$' e
20、rrormessage2 db 'you input a wrong number!',13,10,'$' flag db ?data ends prog segment main proc farassume cs:prog,ds:data start:push ds sub ax,ax push axmov ax,data mov ds,ax mov flag,0lea dx,message1 mov ah,09 int 21hcall input_name call crlflea dx,message2 mov ah,09 int 21hcall inp
21、hone call crlfcmp flag,1je exitcall printline exit:retmain endpinput_name proc nearpush axpush dxpush cxmov cx,0mov cl,No_of_name call getcharmov ax,0mov al,No_of_name sub ax,cxmov cx,axmov si,0next1:mov al,inbufsimov outnamesi,al inc siloop next1pop cx pop dx pop axretinput_name endpinphone proc ne
22、arpush axpush dxmov cx,0mov cl,No_of_phone call getcharcmp cx,0jnz error1mov cl,No_of_phonemov si,0next2:mov al,inbufsicmp al,30hjlerror2cmp al,39hjaerror2mov outphonesi,al inc siloop next2jmp exit2error1:call crlflea dx,errormessage1mov ah,09int 21hmov flag,1jmp exit2error2:call crlflea dx,errormes
23、sage2mov ah,09int 21hmov flag,1jmp exit2exit2:pop dxpop axretinphone endpgetchar proc nearpush axpush dxmov di,0 rotate:mov ah,01int 21hcmp al,0dhje exit1mov inbufdi,alinc diloop rotateexit1:pop dxpop axretgetchar endpcrlf proc nearpush ax push dxmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hpop
24、 dxpop axretcrlf endpprintline proc nearpush axpush dxlea dx,message3 mov ah,09 int 21hlea dx,outnamemov ah,09int 21hlea dx,outphonemov ah,09int 21hpop dxpop axretprintline endpprog endsend maininbuf;namlabel byte e parameter list:maxnlendb;max.length9namelendb;no. char entered?nameflddb9 dup(?)crlf
25、db13,10,'$'messg1db'INPUT NAME:',13,10,'$'messg2db'INPUT A TELEPHONE NUMBER:',13,10,'$'messg3',13,10,'$'db'NAMEOUTNAMEdb21 dup(?),'$'OUTPHONEdb8 dup(?),'$'datarea endsprognam segmentassume cs:prognam,ds:datarea; 從鍵盤輸入姓名及 8 個(gè)字符的電
26、話號(hào)碼,并以一定的格式顯示出來(lái) datarea segmentTELstart: push ds sub push mov mov movTELIST proc far mov lea int call mov lea int call call retTELIST endpINPUT_NAME proc near call mov mov mov subax,axax ax,datarea ds,ax es,axah,09 dx,messg1 21h INPUT_NAMEah,09 dx,messg2 21h INPHONE PRINTLINEGETCHAR bh,0 bl,namelen
27、cx,21 cx,bxb20: mov namefldbx,20hincbxloop b20leasi,namefldleadi,OUTNAMEmovcx,9cldrepmovsbretINPUT_NAME endpINPHONEprocnearcallGETCHARmovbh,0movbl,namelenmovcx,9subcx,bxb30:movnamefld bx,20hincbxloop b30 leasi,namefldleadi,OUTPHONEmovcx,8cldrepmovsbretINPHONEendpPRINTLINE procnearmovah,09hleadx,mess
28、g3int21hmovah,09leadx,OUTNAMEint21hmovah,09leadx,OUTPHONEint21hretPRINTLINE endpGETCHARprocnearmovah,0ahleadx,inbufint21hmovah,09leadx,crlfint21hretGETCHAR endp prognamendsend start10. 編寫子程序嵌套結(jié)構(gòu)的程序 , 把整數(shù)分別用二進(jìn)制和八進(jìn)制形式顯示出來(lái) .主 程序BANDOE整數(shù)字變量VAL1存入堆棧,并調(diào)用子程序PAIRS;子程序PAIRS:從 堆棧中取出VAL1;調(diào)用二進(jìn)制顯示程序OUTBIN顯示出與其等效
29、的二進(jìn)制數(shù);輸出 8個(gè)空格;調(diào)用八進(jìn)制顯示程序OUTOC顯示出與其等效的八進(jìn)制數(shù);調(diào)用輸出回 車及換行符的子程序 .model small.stack 100h.dataval1 dw 0ffffh.codemain proc farstart:push dssub ax,axpush axmov ax,data mov ds,ax push val1 call pairs ret main endp pairs proc near push bp mov bp,sp mov bx,bp+4 call outbinmovcx,8loop1:movdl,20hmovah,2int21hloop
30、loop1call outoctcall crlfpopbpret2pairs endpoutbin proc nearmovcx,16loop2:movdl,0rolbx,1rcldl,1ordl,30hmovah,2int21hloop loop2retoutbin endpoutoct proc nearmovdl,0rolbx,1rcldl,1adddl,30hmovah,2int21hmovch,5movcl,3loop3:rolbx,clmoval,blandal,07haddal,30hmovdl,almovah,2int21hdecchjnzloop3retoutoct end
31、pcrlf proc nearmovdl,13movah,2int21hmovdl,10movah,2int21hretcrlf endpend start11. 假定一個(gè)名為MAINPR的程序要調(diào)用子程序SUBPR(試問(wèn):MAINPRO中的什么指令告訴匯編程序 SUBPR是在外部定義的? (2)SUBPRO怎么知道MAINPR要調(diào)用它? 解 :(1) EXTRN SUBPRO: FAR(2) PUBLIC SUBPRO12. 假定程序MAINPRO口 SUBPR不在同一模塊中,MAINPRO中定義字節(jié)變量 QTY 和字變量VALUES PRICE.SUBPR程序要把VALUED以QTY并把商
32、存在PRICE中, 試問(wèn) :(1) MAINPRC怎么告訴匯編程序外部子程序要調(diào)用這三個(gè)變量 ?(2) SUBPRC怎么告訴匯編程序這三個(gè)變量是在另一個(gè)匯編語(yǔ)言程序中定義的? 解 :(1) PUCLIC QTY,VALUE,PRICE(2) EXTRN QTY: BYTE, VALUE: WORD, PRICE: WORD13. 假設(shè) :(1)在模塊1中定義了雙字變量VAR1首地址為VAR的字節(jié)數(shù)組和NEARS號(hào)LAB1, 它們將由模塊 2 和模塊 3所使用;在模塊2中定義了字變量VAR3和FAR標(biāo)號(hào)LAB2,而模塊1中要用到VAR3模 塊 3 中要用到 LAB2;在模塊3中定義了 FAR標(biāo)號(hào)
33、LAB3,而模塊2中要用到它. 試對(duì)每個(gè)源模塊給出必要的 EXTRN和PUBLIC說(shuō)明.; 模塊 1extrn var3:wordpublic var1,var2,lab1data1 var1 var2data1segmentdd ?db 10 dup(?)endscode1 segment assume cs:code1, ds:data1mainproc farmov ax,data1 mov ds,axlab1:mov ax,4c00hint 21hmain endpcode1 ends end start ; 模塊 2 extrn var1:dword,var2:byte,lab1:n
34、ear,lab3:far public var3,lab2data2segmentvar3dw ?data2endscode2segmentassume cs:code2, ds:data2lab2:code2endsend; 模塊 3extrn var1:dword,var2:byte,lab1:near,lab2:farpublic lab3code3 segmentassume cs:code3 lab3: code3 endsend14. 主程序CALLMU定義堆棧段,數(shù)據(jù)段和代碼段,并把段寄存器初始化;數(shù)據(jù)段 中定義變量QTY和PRICE;代碼段中將PRICE裝入AX,QTY裝入BX
35、,然后調(diào)用子程 序SUBMU程序SUBMU沒(méi)有定義任何數(shù)據(jù),它只簡(jiǎn)單地把AX中的內(nèi)容(PRICE)乘 以BX中的內(nèi)容(QTY),乘積放在DX,AX中.請(qǐng)編制這兩個(gè)要連接起來(lái)的程序 datasgsegme ntqtydw 2pricedw 4datasgendsstacksg segmentdw 100 dup(?)toslabel wordstacksg endscodesgsegmentmainproc farassume cs:codesg,ds:datasg,ss:stacksgstart:mov ax,datasgmov ds,axmov ax,stacksgmov ss,axmov sp,offset tosmov ax,price mov bx,qty call submul mov ax,4c00hint 21h mainendpsubmul proc near mov dx,0 mul bxret submul endp codesg ends end start15. 試編寫一個(gè)執(zhí)行以下計(jì)算的子程序 COMPUTE:R<-X+Y-3其中X,Y及R均為字?jǐn)?shù)組.假設(shè)COMPUTE其調(diào)用程序都在同一代碼段中,數(shù)據(jù)段 D_SE防包含X和Y數(shù)組,數(shù)據(jù)段E_SEG中包含R數(shù)組,同時(shí)寫出主程序調(diào)用 COMPUT過(guò)程的部分.如果主程序和COMPUTt同一程
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 垃圾焚燒發(fā)電行業(yè)報(bào)告
- 三農(nóng)村水資源管理方案手冊(cè)
- 三農(nóng)市場(chǎng)推廣策略與技巧指南
- 生態(tài)旅游度假區(qū)開(kāi)發(fā)項(xiàng)目可行性研究報(bào)告
- 框架、技術(shù)與最佳實(shí)踐指南
- 餐飲連鎖店運(yùn)營(yíng)管理及拓展策略
- 施工安全管理考核細(xì)則
- 發(fā)改委立項(xiàng)可行性分析報(bào)告
- 農(nóng)業(yè)技術(shù)推廣創(chuàng)新模式指南
- 低空經(jīng)濟(jì)合作
- 不動(dòng)產(chǎn)登記中心服務(wù)行為規(guī)范辦法(試行)
- 《ISO 55013-2024 資產(chǎn)管理-數(shù)據(jù)資產(chǎn)管理指南》專業(yè)解讀和應(yīng)用指導(dǎo)材料(雷澤佳編制-2024C0)【第1部分:1-130】
- 軟件資格考試嵌入式系統(tǒng)設(shè)計(jì)師(基礎(chǔ)知識(shí)、應(yīng)用技術(shù))合卷(中級(jí))試卷與參考答案(2024年)
- 2024年下半年杭州黃湖鎮(zhèn)招考編外工作人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 浙江省第五屆初中生科學(xué)競(jìng)賽初賽試題卷
- 雷鋒精神在2024:新時(shí)代下的學(xué)習(xí)
- 竣工驗(yàn)收流程培訓(xùn)課件
- 2024年上海中考化學(xué)終極押題密卷三含答案
- DB14∕T 1334-2017 波形鋼腹板預(yù)應(yīng)力混凝土組合結(jié)構(gòu)橋梁懸臂施工與驗(yàn)收規(guī)范
- ECharts數(shù)據(jù)可視化課件 第4章 雷達(dá)圖、旭日?qǐng)D和關(guān)系圖
- 幸福女人課件教學(xué)課件
評(píng)論
0/150
提交評(píng)論