ch03_汇编语言程序的设计_第1页
ch03_汇编语言程序的设计_第2页
ch03_汇编语言程序的设计_第3页
ch03_汇编语言程序的设计_第4页
ch03_汇编语言程序的设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CH03汇编语言程序设计习题与思考题1 下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。VAR1 DB 10, 2VAR2 DW 5DUP(?) , 0VAR3 DB 'HOW ARE YOU', ' $3 DUP (1 , 2)VAR4 DD -1,1,0解答:字节空间-VAR1 : 2 ; VAR2 12 ; VAR3 19 ; VAR4 12。存储空间的分配图:DS: 00000A 02 00 000000000000000000000048 4F001057 20 41 524520594F553F2401020102 01002002 F

2、F FF _F_F00000。000000002 .假定VAR1和VAR2为字变量二LAB为标号,试指出下列指令的错误之处。(1) ADD VAR1, VAR2(3) JMP LABCX(5) MOV1000H , 100(4)(2) SUB AL, VAR1JNZ VAR1(6) SHLAL , 4解答:A转 目位(1)两个操作数中至少有一个为寄存器;为字向的量用标不匹配 ;CX号;定;SHL指令中,当所移位数超过1时,必须用CL或CX来取代所移 数。3 .对于下面的符号定义,指出下列指令的错误。A1DB ?A2DB 10K1 EQU1024(1) MOVK1,AX(2)MOVA1,AX3

3、3)CMPA1,A2(4)K1EQU2048解答:(1)K1为常量,不能用MOV旨令赋值;(2)A1为字节,AX为字变量,不匹配;A1未定义,无法做比较指令;必须用 P U R G E !放K 1 重新赋值前4 .数据定义语句如下所示:FIRST DB 90H, 5FH, 6EH 69HSECOND DB 5 DUP(?)THIRD DB5 DUP(?)自FIRST单元开始存放的是一个四字节的十六进制数(低位字节在前),要求:编一段程序将这个数左移两位后存放到自SECON开始的单元,右移两位后存放到自THIRD开始的单元。(注意保留移出部分)解答:DATA SEGMENTFIRST DB90H

4、,5FH 6EH, 69HSECOND DB5 DUP(7)THIRD DB5DUP(7)DATA ENDSCODE SEGMENTASSUME CS CODE DS: DATASTART : MOV AX DATAMOV DS AXLEA SI , FIRSTLEA DI , SECONDMOVCX2CLC;左移2位MOV AX SIINC SIINC SIMOV DX SIPUSH DXPUSH AXROL DX CLAND DL03HMOV DI+4,DLROL AX? CLAND AL? 03HMOV BL,ALPOP AXPOP DXSHL DXCLSHL AX CLOR DL BL

5、MO DI ,AX二 MO DI+ 2,DX;右移2位,类同左移的方法,略MOV AH4CHINT21HCODE ENDSEND START5 .(原14)在当前数据区从400H开始的256个单元中存放着一组数据,试编程序将它们顺序搬移到从 A000H开始的顺序256个单元中。解答:DATA SEGMENTORG 400HDAT1 DB .;256 DUP (?)ORG 0A000HDAT2 DB.;256 DUP(?)DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART

6、: MOV AX,DATAMOV DS,AX ;CH3-14LEA SI,DAT1LEA DI,DAT2MOV CX,128AGAIN: MOV AL,SI MOV DI,AL INC SI INC DI LOOP AGAIN;CH3-15,将两个数据块逐个单元进行比较,若有错BL=00H否则BL=FFHLEASI,DAT1LEA DI,DAT2 MOV CX,128 NEXT: MOV AL,SIMOV BL,DI CMP AL,BL JNZERROR INC SI INC DI LOOP NEXTMOV BL,0FFH JMP EXIT ERROR: MOV BL,OOH EXIT: MO

7、V AX,4C00HINT21HCODE ENDS END START6 .试编程序将当前数据区从BUFF开始的4K个单元中均写入55H,并逐个单元读出比较,看写入的与读出的是否一致。若全对,则将ERR单元置0H;如果有错,则将ERR单元置FFHo解答:DATA SEGMENTBUFFDB 1000H DUP(7)ERR DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX;将55H依次放入BUFF开始的4K个单元LEA SI,BUFF MOV CX,1000HMOV AL,55HNTXT: MO

8、V SI,AL INC SILOOP NEXT;取出与55H比较,全对则ERR=0否则ERR=FFHLEA DI,BUFFLEA SI,ERRMOV CX,1000HNEXT1:MOV AL,DIINC DICMP AL,55HJNZ ERROR若有一个不同,即置ERR=FFHLOOP NEXT1MOV AL,OOHMOV SI,AL ;全比较完无错,则置ERR=0JMP EXITERROR: MOV AL,0FFHMOV SI,AL;返回DOSEXIT:MOV AH,4CHINT21HCODE ENDSEND STARTEND7 在上题中,如果发现有错时,要求在ERR单元中存放出错的数据个数

9、,则程序该如何修改?解答:DATA SEGMENTBUFFDB 1000H DUP(7)ERR DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX;将55H依次放入BUFF开始的4K个单元LEA SI,BUFFMOV CX,1000HMOV AL,55HNTXT: MOV SI,AL INC SILOOP NEXT;取出与55H比较LEA DI,BUFFLEA SI,ERRMOV DX,0000HMOV CX,1000HNEXT1:MOV AL,DI INC DICMP AL,55HJZ NEXT

10、2 ;若相同,则比较下一个INC DX ;否则将放出错个数的DX加1NEXT2 LOOP NEXT1MOV SI,DXEXIT:MOV AH,4CHINT21HCODE ENDSEND STARTEND&试编写程序段,完成将数据区从0100H开始的一串字节数据逐个从F0H端口输出,已知数据串以0AH为结束符。(略)9. (原24)存中以FIRST和SECONDS始的单元中分别存放着两个4位用压缩BCD码表示的十进制数,低位在前。编程序求这两个数的和,仍用压缩BCD码表示,并存到以THIRD开始的单元。 解答: DATA SEGMENT FIRST DW 3412H SECOND DW

11、7856H THIRD DB ?,?,? DATA ENDS STACK SEGMENTSTACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX LEA SI,FIRST LEA DI,SECOND LEA BX,THIRD MOV CX,2 CLCAGAIN: MOV AL,BYTE PTRSIMOV DL,BYTE PTRDIADC AL,DL DAA MOV BYTE PTRBX,AL INC SI INC DI INC BX LOOP AGAINJC AAMO

12、V BYTE PTRBX,0JMP EXITAA: MOV BYTE PTRBX,1EXIT: MOV AX,4C00HINT21HCODE ENDSEND START10. (原27)设字变量单元A B、C存放有三个数,若三个数都不为零,则求三个数的和,存放在D 中;若有一个为零,则将其余两个也清零,试编写程序。解答:DATA SEGMENTADB?BDB?CDB?DDW?DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AXL

13、EA SI,ALEA DI,DMOV AL,SICMP AL,00JZZEROADC DX,ALLEA SI,BMOV AL,SICMP AL,00JZZEROADC DX,ALLEA SI,CMOV AL,SICMP AL,00JZZEROADC DX,ALMOV DI,DXJMP EXITZERO: MOV AL,0MOV A,ALMOV B,ALMOV C,ALEXIT: MOV AX,4C00HINT21HCODE ENDSEND START11. (16)试编程序,统计由TABLE开始的128个单元中所存放的字符“ A”的个数,并将结果存 放在DX中。解答:DATA SEGMENTT

14、ABLE DBX1,X2,.X128DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AXLEA SUABLEMOV DX,0MOV CX,128AGAIN: MOV AL,SICMP AL,TVJNZ NEXTINC DXNEXT: INC SILOOP AGAINMOV AX,4C00HINT21HCODE ENDSEND START12. .试编制一个汇编语言程序, 求出首地址为DATA的1000个字数组中的最小偶数,并把它

15、存放于MIN单元中。(方法:利用书上排序的例题做相应的修改即可,略)13. 在上题中,如果要求同时找出最大和最小的偶数,并把它们分别存放于MAX和MIN单元中,试完成程序。解答:略(方法同第12题)。14. (28)在DATA字数组中存放有100H个16位补码数,试编写一程序求它们的平均值,放在AX中,并求出数组中有多少个数小于平均值,将结果存于BX中。(略)(17)编写AL中。解15.一个子程序,对AL中的数据进行偶校验,并将经过校验的结果放回答:DATA SEGMENTCOUNT EQU 7DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME

16、 DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AXPUSH AXMOV DX,0MOV CX,COUNTAGAIN: RCR AL,1JNCLINC DXL: LOOP AGAINPOP AXTEST DX,01JZ EXITOR AL,80EXIT: MOV AX,4C00HINT21H;ANOTHER METHORDJP EXITOR AL,80HEXIT: MOV AX,4C00HINT21HCODE ENDSEND START16. (18)利用上题的予程序,对DATA开始的256个单元的数据加上偶校验,试编程序。解

17、答:DATA SEGMENTDATDB .;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,DATAMOV DS,AXLEA SI,DATLEA DI,RESULTMOV CX,NUMNEXT: MOV AL,SICALL SUB1MOV DI,AL;MOV SI,ALINC SIINC DILOOP NEXTMOV AX,4C00HINT

18、21HSUB1 PROCPUSH AXMOV DX,0MOV CX,COUNTAGAIN: RCR AL,1JNCLINC DXL: LOOP AGAINPOP AXTEST DX,01JZQUITOR AL,80HQUIT: RETSUB1 ENDPCODE ENDSEND START17. (19)试编写程序实现将键盘输入的小写字母转换成大写字母并输出。解答:DATA SEGMENTMESS DB 'THE INPUT IS NOT CORRECT.',ODH,OAH;$'DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASS

19、UME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AXNEXT: MOV AH,01HINT21HCMP AL,QJZ EXITCMP AL,'a'JB ERRORCMP AL,NJA ERRORSUB AL,20HMOV AH,02HMOV DL,ALINT21HJMP NEXTERROR: MOV AH,09HLEA DX,MESSINT21HJMP NEXTEXIT: MOV AX,4C00HINT21HCODE ENDSEND START18. 从键盘接收20个字符,按键入顺序查找最大的字符,并显示

20、输出。解答:DATA SEGMENTDAT DB 20 DUP(7)DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AX;从键盘接收20个字符,并送DAT中保存LEA SI,DATMOV CX,20NEXT: MOV AH,01HINT21HMOV SI,ALINC SILOOP NEXT;比较20个字符中的最大字符,并放入AL中MOV CX.19LEA SI,DATMOV AL,SIINC SINEXT1:CMP AL,SIJ

21、AE LLMOV AL,SILL: INC SILOOP NEXT1;将最大的字符的ASCII码由AL送DL显示MOV DL,ALMOV AH,2HINT21H;返回DOSMOV AX,4C00HINT21HCODE ENDS END START19. (29)编写汇编程序,接收从键盘输入的10个数,输入回车符表示结束,然后将这些数加密后存于buff缓冲区中。加密表为:输入数字:0, 1,2,3,4,5,6,7,8,9;密码数字:7,5,9,1,3, 6,8,0,2, 4解答:DATA SEGMENTBUFFDB 10 DUP(?)TABLE DB 7,5,9,1,3,6,8,0,2,4DAT

22、A ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AX 5LEA DI,BUFFNEXT: MOV AH,01HINT21H ;从键盘上接收单个字符CMP AL,0AH ;与OAH比,判是否要结束 JZ EXITSUB AL.30H ;否则,将09的ASCII码转换为十进制数LEA BX,TABLEXLAT;用查表指令进行加密MOV DI,ALINC DIJMP NEXT ;退出并返回DOSEXIT: MOV AX,4C00HINT21HCODE ENDS END START20. (23)有一个100个字节的数据表,表元素已按从大到小的顺序排列好,现给定一元素,试编程序在表查找,若表已有此元素,则结束;否则,按顺序将此元素插入表中适当的位置,并修改表长。 (略)21. (26)在当前数据段(DS,偏移地址为DATAB开始的顺序80个单元中,存放着某班80个同学某门 考试成绩。按要求编写程序: 编写程序统计90分;80分89分;70分79分;60分69分,V 60分的人数各 为多少,并将结果放在同一数据段、偏移地

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论