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

下載本文檔

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

文檔簡介

1、CH03 匯編語言程序設(shè)計習(xí)題與思考題1下列語句在存儲器中分別為變量分配多少字節(jié)空間?并畫出存儲空間的分配圖。VAR1 DB10,2VAR2DW5 DUP(?),0VAR3DBHOW ARE YOU?,$,3 DUP(1,2)VAR4DD-1,1,0解答:字節(jié)空間-VAR1:2;VAR2:12;VAR3:19;VAR4:12。存儲空間的分配圖:DS:0000 0A 02 00 00 00 00 00 0000 00 00 00 00 00 48 4F0010 57 20 41 52 45 20 59 4F55 3F 24 01 02 01 02 010020 02 FF FF FF FF 01

2、 00 0000 00 00 00 002假定VAR1和VAR2為字變量,LAB為標(biāo)號,試指出下列指令的錯誤之處。(1)ADDVAR1,VAR2(2)SUBAL,VAR1(3)JMPLABCX(4)JNZVAR1 (5) MOV 1000H,100 (6)SHL AL, 4 解答:(1)兩個操作數(shù)中至少有一個為寄存器;(2)AL為字節(jié),VAR1為字變量,不匹配;(3)中不能用CX;(4)轉(zhuǎn)向地址應(yīng)為標(biāo)號;(5)目的操作數(shù)的類型不確定;(6)SHL指令中,當(dāng)所移位數(shù)超過1時,必須用CL或CX來取代所移位數(shù)。3對于下面的符號定義,指出下列指令的錯誤。A1DB?A2DB10K1EQU1024(1)M

3、OVK1,AX(2)MOVA1,AX(3)CMPA1,A2(4)K1EQU2048解答:(1)K1為常量,不能用MOV指令賦值;(2)A1為字節(jié),AX為字變量,不匹配;(3)A1未定義,無法做比較指令;(4)K1重新賦值前,必須用PURGE釋放。4數(shù)據(jù)定義語句如下所示: FIRST DB 90H,5FH,6EH,69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?)自FIRST單元開始存放的是一個四字節(jié)的十六進(jìn)制數(shù)(低位字節(jié)在前),要求:編一段程序?qū)⑦@個數(shù)左移兩位后存放到自SECOND開始的單元,右移兩位后存放到自THIRD開始的單元。(注意保留移出部分)解答:DAT

4、A SEGMENTFIRST DB 90H,5FH,6EH,69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?) DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXLEA SI,F(xiàn)IRSTLEA DI,SECONDMOV CX,2CLC;左移2位MOV AX,SIINC SIINC SIMOV DX,SIPUSH DX PUSH AXROL DX,CL AND DL,03H MOV DI+4,DL ROL AX,CL AND AL,03H MOV BL ,AL POP AX

5、POP DX SHL DX,CLSHL AX,CLOR DL,BLMOV DI,AXMOV DI+2,DX;右移2位,類同左移的方法,略MOV AH,4CHINT 21H CODE ENDS END START5(原14)在當(dāng)前數(shù)據(jù)區(qū)從400H開始的256個單元中存放著一組數(shù)據(jù),試編程序?qū)⑺鼈冺樞虬嵋频綇腁000H開始的順序256個單元中。解答:DATA SEGMENT ORG 400HDAT1 DB .;256 DUP (?) ORG 0A000HDAT2 DB .;256 DUP (?)DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME D

6、S:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AX;CH3-14 LEA SI,DAT1 LEA DI,DAT2 MOV CX,128AGAIN: MOV AL,SI MOV DI,AL INC SI INC DI LOOP AGAIN;CH3-15,將兩個數(shù)據(jù)塊逐個單元進(jìn)行比較,若有錯BL=00H,否則BL=FFH LEA SI,DAT1 LEA DI,DAT2 MOV CX,128NEXT: MOV AL,SI MOV BL,DI CMP AL,BL JNZ ERROR INC SI INC DI LOOP NEXT MO

7、V BL,0FFH JMP EXITERROR: MOV BL,00HEXIT: MOV AX,4C00H INT 21HCODE ENDSEND START6試編程序?qū)?dāng)前數(shù)據(jù)區(qū)從BUFF開始的4K個單元中均寫入55H,并逐個單元讀出比較,看寫入的與讀出的是否一致。若全對,則將ERR單元置0H;如果有錯,則將ERR單元置FFH。解答:DATA SEGMENTBUFF DB 1000H DUP(?)ERR DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;將55H依次放入BUFF開始的4K個單元

8、LEA SI,BUFFMOV CX,1000HMOV AL,55HNTXT:MOV SI,ALINC SILOOP NEXT;取出與55H比較,全對則ERR=0,否則ERR=FFHLEA DI,BUFFLEA SI,ERRMOV CX,1000HNEXT1:MOV AL,DIINC DICMP AL,55HJNZ ERROR;若有一個不同,即置ERR=FFHLOOP NEXT1MOV AL,00HMOV SI,AL;全比較完無錯,則置ERR=0JMP EXITERROR:MOV AL,0FFHMOV SI,AL;返回DOSEXIT:MOV AH,4CHINT 21HCODE ENDSEND S

9、TARTEND7在上題中,如果發(fā)現(xiàn)有錯時,要求在ERR單元中存放出錯的數(shù)據(jù)個數(shù),則程序該如何修改?解答:DATA SEGMENTBUFF DB 1000H DUP(?)ERR DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;將55H依次放入BUFF開始的4K個單元LEA SI,BUFFMOV CX,1000HMOV AL,55HNTXT:MOV SI,ALINC SILOOP NEXT;取出與55H比較LEA DI,BUFFLEA SI,ERRMOV DX,0000HMOV CX,1000HN

10、EXT1:MOV AL,DIINC DICMP AL,55HJZ NEXT2;若相同,則比較下一個INC DX;否則將放出錯個數(shù)的DX加1NEXT2:LOOP NEXT1MOV SI,DXEXIT:MOV AH,4CHINT 21HCODE ENDSEND STARTEND8試編寫程序段,完成將數(shù)據(jù)區(qū)從0100H開始的一串字節(jié)數(shù)據(jù)逐個從F0H端口輸出,已知數(shù)據(jù)串以0AH為結(jié)束符。(略)9(原24)內(nèi)存中以FIRST和SECOND開始的單元中分別存放著兩個4位用壓縮BCD碼表示的十進(jìn)制數(shù), 低位在前。編程序求這兩個數(shù)的和,仍用壓縮BCD碼表示, 并存到以THIRD開始的單元。解答:DATA SE

11、GMENTFIRST DW 3412HSECOND DW 7856HTHIRD DB ?,?,?DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,FIRST LEA DI,SECOND LEA BX,THIRD MOV CX,2 CLCAGAIN: MOV AL,BYTE PTRSI MOV DL,BYTE PTRDI ADC AL,DL DAA MOV BYTE PTRBX,AL INC SI INC DI

12、 INC BX LOOP AGAIN JC AA MOV BYTE PTRBX,0 JMP EXITAA: MOV BYTE PTRBX,1EXIT: MOV AX,4C00H INT 21HCODE ENDSEND START10(原27)設(shè)字變量單元A、B、C存放有三個數(shù),若三個數(shù)都不為零,則求三個數(shù)的和,存放在D中;若有一個為零,則將其余兩個也清零,試編寫程序。解答:DATA SEGMENTA DB ?B DB ?C DB ?D DW ?DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,

13、ES:DATASTART: MOV AX,DATA MOV DS,AXLEA SI,ALEA DI,DMOV AL,SICMP AL,00JZ ZEROADC DX,ALLEA SI,BMOV AL,SICMP AL,00JZ ZEROADC DX,ALLEA SI,CMOV AL,SICMP AL,00JZ ZEROADC DX,ALMOV DI,DXJMP EXITZERO:MOV AL,0MOV A,ALMOV B,ALMOV C,ALEXIT: MOV AX,4C00H INT 21HCODE ENDSEND START11(16)試編程序,統(tǒng)計由TABLE開始的128個單元中所存放的

14、字符“A”的個數(shù),并將結(jié)果存放在DX中。解答:DATA SEGMENTTABLE DB X1,X2,.X128DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,TABLE MOV DX,0 MOV CX,128AGAIN: MOV AL,SI CMP AL,'A' JNZ NEXT INC DXNEXT: INC SI LOOP AGAIN MOV AX,4C00H INT 21HCODE E

15、NDSEND START12試編制一個匯編語言程序,求出首地址為DATA的1000個字?jǐn)?shù)組中的最小偶數(shù),并把它存放于MIN單元中。(方法:利用書上排序的例題做相應(yīng)的修改即可,略)13在上題中,如果要求同時找出最大和最小的偶數(shù),并把它們分別存放于MAX和MIN單元中,試完成程序。解答:略(方法同第12題)。14(28)在DATA字?jǐn)?shù)組中存放有100H個16位補(bǔ)碼數(shù),試編寫一程序求它們的平均值,放在AX中,并求出數(shù)組中有多少個數(shù)小于平均值,將結(jié)果存于BX中。(略)15(17)編寫一個子程序,對AL中的數(shù)據(jù)進(jìn)行偶校驗(yàn),并將經(jīng)過校驗(yàn)的結(jié)果放回AL中。 解答:DATA SEGMENTCOUNT EQU

16、7DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AX PUSH AX MOV DX,0 MOV CX,COUNTAGAIN: RCR AL,1 JNC L INC DXL: LOOP AGAIN POP AX TEST DX,01 JZ EXIT OR AL,80EXIT: MOV AX,4C00H INT 21H;ANOTHER METHORD JP EXIT OR AL,80HEXIT: MOV AX,4C00H INT

17、 21HCODE ENDSEND START16(18)利用上題的予程序,對DATA開始的256個單元的數(shù)據(jù)加上偶校驗(yàn),試編程序。解答:DATA SEGMENTDAT DB .;256 DUP (?)RESULT DB .;256 DUP (?)NUM EQU 256COUNT EQU 7DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,DAT LEA DI,RESULT MOV CX,NUMNEXT: MO

18、V AL,SI CALL SUB1 MOV DI,AL;MOV SI,AL INC SI INC DI LOOP NEXT MOV AX,4C00H INT 21HSUB1 PROC PUSH AX MOV DX,0 MOV CX,COUNTAGAIN: RCR AL,1 JNC L INC DXL: LOOP AGAIN POP AX TEST DX,01 JZ QUIT OR AL,80HQUIT: RETSUB1 ENDPCODE ENDSEND START17(19)試編寫程序?qū)崿F(xiàn)將鍵盤輸入的小寫字母轉(zhuǎn)換成大寫字母并輸出。解答:DATA SEGMENTMESS DB 'THE

19、INPUT IS NOT CORRECT.',0DH,0AH,'$'DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AXNEXT: MOV AH,01H INT 21H CMP AL,'Q' JZ EXIT CMP AL,'a' JB ERROR CMP AL,'z' JA ERROR SUB AL,20H MOV AH,02H MOV DL,AL INT

20、 21H JMP NEXTERROR: MOV AH,09H LEA DX,MESS INT 21H JMP NEXTEXIT: MOV AX,4C00H INT 21HCODE ENDSEND START18從鍵盤接收20個字符,按鍵入順序查找最大的字符,并顯示輸出。解答:DATA SEGMENTDAT DB 20 DUP(?)DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AX;從鍵盤接收20個字符,并送DAT中保存LEA

21、 SI,DATMOV CX,20NEXT:MOV AH,01HINT 21HMOV SI,ALINC SILOOP NEXT;比較20個字符中的最大字符,并放入AL中 MOV CX,19LEA SI,DATMOV AL,SIINC SINEXT1:CMP AL,SIJAE LLMOV AL,SILL:INC SILOOP NEXT1;將最大的字符的ASCII碼由AL送DL顯示MOV DL,ALMOV AH,2HINT 21H;返回DOS MOV AX,4C00H INT 21HCODE ENDSEND START19(29)編寫匯編程序,接收從鍵盤輸入的10個數(shù),輸入回車符表示結(jié)束,然后將這些

22、數(shù)加密后存于BUFF緩沖區(qū)中。加密表為:輸入數(shù)字:0,1,2,3,4,5,6,7,8,9;密碼數(shù)字:7,5,9,1,3,6,8,0,2,4解答:DATA SEGMENTBUFF DB 10 DUP(?)TABLE DB 7,5,9,1,3,6,8,0,2,4DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AX;LEA DI,BUFFNEXT:MOV AH,01HINT 21H;從鍵盤上接收單個字符CMP AL,0AH;與0AH

23、比,判是否要結(jié)束JZ EXITSUB AL,30H;否則,將09的ASCII碼轉(zhuǎn)換為十進(jìn)制數(shù)LEA BX,TABLEXLAT;用查表指令進(jìn)行加密MOV DI,ALINC DIJMP NEXT;退出并返回DOSEXIT: MOV AX,4C00H INT 21HCODE ENDSEND START20(23)有一個100個字節(jié)的數(shù)據(jù)表,表內(nèi)元素已按從大到小的順序排列好,現(xiàn)給定一元素,試編程序在表內(nèi)查找,若表內(nèi)已有此元素,則結(jié)束;否則,按順序?qū)⒋嗽夭迦氡碇羞m當(dāng)?shù)奈恢?,并修改表長。(略)21(26)在當(dāng)前數(shù)據(jù)段(DS),偏移地址為DATAB開始的順序80個單元中,存放著某班80個同學(xué)某門考試成績。按要求編寫程序: 編寫程序統(tǒng)計90分;80分89分;70分79分;60分6

溫馨提示

  • 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

提交評論