《编程题 试卷.doc》由会员分享,可在线阅读,更多相关《编程题 试卷.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、分析题(每题4分,共500分) 1. 编写一完整程序,比较两个字符串STR1和STR2所含字符是否完全相同,如果相同(AL)=1,不相同(AL)=0. 2. 编写一段程序统计BUF缓冲区100个字数据中为0的个数,并将统计结果保存在DL中。 3. 比较5个字节的字符串A和B,若两个字符串不相等则字节标志单元FLG置1;否则清0。 4. 设STR开始有一个长度为50个字节的字符串,编一段程序,将字符串的所有字符向后(大地址)移动20个字节。 5. 已知在AX、BX中放有一个32位二进制数,求其补码,并送入CX、DX之中,其中AX、CX放高位。 6. 在A字单元有一个有符号被除数,在B字单元有
2、一个有符号除数,求其商存于C字单元中,余数存D字单元中,试编程实现之。 7. 8. 编写一个完整的程序放在代码段CSEG中,要求把数据段中两个字单元X和Y的内容相加,结果放在AX中. 9. 试编写一程序段把40个字母A的字符串从源缓冲区传送到目的缓冲区。10. 在A地址处有10个数据,现要求传送到B地址处,请编程实现。11. 在A、B地址起各有4个字节单元的无符号数,试编程实现二个无符号数的和,并将值存于C址起的单元中。12. 按下面要求写出程序的框架:定义一个数据段,其中开辟100个字单元、初值为0;定义一个代码段,并在其中指定段寄存器、指定主程序从0100H开始、给有关段寄存器赋值;程序结
3、束。13. 编制将DS段中名为BUFB的字节存储区改写为空白字符(编码为20H)的程序段。假定BUFB存储区定义为BUFB DB N DUP(),其中N为字面常量。14. 将BUF中的16位数分成四组,每组四位,然后把这四组数分别存放在A、B、C、D字节变量中。15. 编一段程序把BX中的二进制数用十六进制数的形式在屏幕上显示出来.16. 在附加段有一个字数组,其首地址已存放在DI寄存器中,在数组的第一个字中存放着该数组的长度.要求编制一个程序使该数组中的数按照从小到大的次序排列整齐.(起跑排序算法)17. 在ADDR单元中存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中.18
4、. 在STR 字符串中搜索字符A。如果找到该字符,则用字符B替代字符A;如果未找到该字符,则在STR字符串后插入字符B,试编写此程序。19. 下列程序是检查并统计BUF缓冲区中以回车(0DH)结束的ASC码串中十进制数的字符个数。若全部是十进制数字符,则将统计的结果送RESUL单元;否则输出ERROR!。请在程序的空格处填写适当的指令。20. 设有数组X和Y.X数组中有X1.X10;Y数组中有Y1,.Y10.试编制Z1=X1+Y1,Z2=X2+Y2,Z3=X3-Y3,Z4=X4-Y4,Z5=X5-Y5,Z6=X6+Y6,Z7=X7-Y7,Z8=X8-Y8,Z9=X9+Y9,Z10=X10+Y1
5、0.结果存入Z数组.21. 编写一程序,统计BUF字缓冲区中的确个数据中为0 的个数,并将统计的结果以十六制数的形式显示输出。22. 编一程序从键盘输入一个字母,然后找出它的前导字符和后续字符(如B的前导字符为A,后续字符为C),并顺序显示输出这三个字符。23. AX中有一个16位二进制数,编一段程序统计其中值为1的位的个数,统计结果存放在CX中。24. 编程计算SUM=a1b1+a2b2+a3b3+a10b10。25. 下列程序段是将X中的64位的无符号的二进制数除以Y中的16位的无符号的二进制数,其结果的商存放在W,余数存放在N中的程序,请在程序段的空格处填上适当的指令。X DW 4 DU
6、P (?)Y DW 7 W DW 4 DUP ( 0)N DW 0 MOV DX, 0 MOV AX, X+6 _(1)_ DIV BX MOV W+6, AX MOV AX, X+4 DIV BX_(2)_MOV AX, X+2DIV BX_(3)_MOV AX, XDIV BX_(4)_(5)_26. 编写一段程序,将数据段中S1开始的任意十个字符按相同顺序传送到以S2为起始地址的存储单元中。27. 已知数据区中从A开始存放任意10个字节数据,求非零数据个数,将结果存于B存储单元。28. 试编制一个程序把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来.29. 有两个3位的ASCI
7、I数和ASC3定义如下: ASC1 DB 578 ASC2 DB 694 ASC3 DB 0000请编写计算ASC3=ASC1+ASC2的程序。30. 编写一段汇编程序,要求实现对从键盘输入的小写字母用大写字母显示出来。31. 将BUF中的8位二进制数转换成八进制数,其中的最高位存放在A字节单元中,最低位存放在C字节单元中。同时显示转换后的结果。32. 试编写一段汇编程序,实现从键盘接收一个小写字母,然后找出它的前导字符,和后续字符,并按顺序输出这三个字符的功能.33. 下列程序段是将BUF缓冲区中的两个字节的非压缩型BCD码转换成ASCII码并送显示器显示的程序,请在程序的空格处填上适当的指
8、令。BUF DB 5, 7 MOV DL, BUF _(1)_ MOV AH, 2 _(2)_ _(3)_ ADD DL, 30H MOV AH, 2 _(4)_34. 设X,Y,Z为有符号的16位二进制数,编写程序计算表达式W=(X+Y+10)*Z/(X+Y)(不考虑加法溢出),其中W存放商,W+2存放余数。35. 在所定义的字节数组中找出第一个非0 数据,并显示输出其所在数组的下标。 36. 下列程序段是A和B 中的24位的无符号数相加,其结果放在双字的C变量中的程序,请在程序段的空格处填上适当的指令。 A DB 3 DUP(?) B DB 3 DUP(?) C DD 0MOV AL, A
9、_(1)_XCHG CH, CLMOV BL, B_(2)_XCHG DH, DLADD CX, DX_(3)_MOV AH, 0_(4)_ADC AH, BHMOV C, CX_(5)_37. 编写一程序,将x变量中的16位二进制数转换成十六进制数并输出。38. 设有一字符串存放在以STING为首址的数据区中,其最后一个字符$作为结束标志,编一程序,计算该字符串的长度并送到LEN单元中.39. 下列程序是将BCD字节缓冲区中的数据转换为十六进制数并输出。请在程序的空格处填写适当的指令。40. 下列程序段是A和B 中的24位的无符号数相加,其结果放在双字的C变量中的程序,请在程序段的空格处填上
10、适当的指令。 A DB 3 DUP(?) B DB 3 DUP(?) C DD 0MOV AL, A_(1)_XCHG CH, CLMOV BL, B_(2)_XCHG DH, DLADD CX, DX_(3)_MOV AH, 0_(4)_ADC AH, BHMOV C, CX_(5)_41. 给出一组数:249AH,7802H,0FFFFH,1234H,9031H,0002H,867AH,2A3EH,将其视为无符号数,找出其中最大数和最小数,结果送入AX和DX中。42. 从键盘接收一个个位数,然后响铃N次.43. 设有单字节无符号数X,Y,Z,若X+Y255,则求X+Z,否则求X-Z,运算结
11、果放在F1中。X,Y,Z,F1均为字节变量名。44. 设在内存某一数据区以STRING地址开始存放了一字符串,其最后一个字符为“$”,其ASSCII码为24H。要求检查该字符串中所有字符的奇偶性,规定每个字符对应的一个字节数中必须有偶数个“1”,则为正确。若奇偶性正确,结果为0,否则结果为-1。试编写程序。45. 有一个50个字符的串,试把其中小写字母改为大写字母,把数字改为“”,其它字符不变。46. 下列程序是将BUF缓冲区的多精度数求补。请在程序的空格处填写适当的指令。47. 将A 字节变量中的48位无符号数与B 字节变量中的16位无符号数相乘,并将结果存放在C字节变量中。48. 编写一程
12、序,将BUF字节缓冲区中的100字节按相反方向存放到BUFl中。49. 有一个首地址为A的N字数组,编制程序使该数组中的数按照从大到小的次序排列.(起跑排序算法)50. 下面程序段是判断寄存器AH和AL中第3位是否相同,如相同,AH置0,否则AH置全1。试把空白处填上适当指令。 _ AND AH,08H _ MOV AH,OFFH JMP NEXT ZERO:MOV AH,0 NEXT:51. 以BUF为首地址的字节单元中,存放了COUNT个无符号数,下面程序段是找出其中最大数并送入MAX单元中。请完成程序。 BUF DB 5,6,7,58H,62,45H,127, COUNT EQU $-B
13、UF MAX DB ? MOV BX,OFFSET BUF MOV CX,COUNT-1 MOV AL,BX LOP1:INC BX _ JAE NEXT MOV AL,BX NEXT:DEC CX _ MOV MAX,AL 52. 下列程序是统计BUF字缓冲区中正数、负数和0的个数并分别送P、N和Z字变量。请在程序的空格处填写适当的指令。53. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示.54. 下列程序是统计以0为结尾的STR字符串中大写字母、小写字母、数字和非数字字母的个数分别送A、B、C、D字单元保存。请在程序的空格处填写适当的指令。55. 将A和B 中的2位压缩型
14、BCD码相加后并输出结果。56. 设在以EXAMSTU为首址的存区中依次存放着某考区245个理科生的七门成绩,现要统计每个考生的总成绩,并将其存放在该考生单科成绩之后的两个单元。试编出完成这一任务的程序。57. 在首地址为TABLE的数组中按递增有序存放着100H个16位的补码数,试编写一个程序,把数组中出现次数最多的数及其出现次数分别存放在NUMB和COUN字单元中。58. 设有一段英文,其字符变量名为ENG, 并以字符结束。试编写一程序,查找单词RED在该文中出现的次数,并以“RED出现的次数:XXXX”的格式显示出次数。59. 下列程序段是将BUF缓冲区中的两个字节的非压缩型BCD码转换
15、成ASCII码并送显示器显示的程序,请在程序的空格处填上适当的指令。BUF DB 5, 7 MOV DL, BUF _(1)_ MOV AH, 2 _(2)_ _(3)_ ADD DL, 30H MOV AH, 2 _(4)_60. 下列程序是将有符号数字节缓冲区BUF中小于100的数送BUF1字节缓冲区中保存。请在程序的空格处填写适当的指令。61. 编程序,将AX寄存器中的16位数分成四组,每组四位,然后把这四组数分别放在AL、BL、CL、DL中。62. 已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数,试编制一个程序,把既在A中出现又在B出现在整数存放于数组C中。63.
16、编写一程序,将BUF缓冲区中的2位十六进制数转换成二进制数并输出。64. 统计变量X中的值有多少位为1,并记入ONE变量中.65. 编写一程序,将字符串缓冲区BUF中的小写字母转换成大写字母。66. 从键盘上接收一个四位的16进制数,并在终端上显示出与它等值的二进制数.67. 将A单元的内容求补,并与原内容相“与”,结果存入B单元中。68. 编写一程序,用串比较指令,比较STR1和STR2字符串,若两个字符串完全相等,则输出OK!;若不相等,则输出ERROR!及STRl中第一个不相等的字符。69. 数组A包含15个互不相等的整数,数组B包含20个互不相等的整数,编写程序,将既在A数组中出现又在
17、B数组中出现的整数存放于数组C中.70. 从键盘输入一系列字符,以字符$为结束符,然后对其中的非数字字符记数,并显示出记数结果.71. 有若干行字符串存放在以BUF为首地址的字节存储区中,最后以1AH作结束标志。现需删除第4行的内容,并将删除后BUF缓冲区的内容显示输出。72. 有一个首地址为MEM的100个字数组,试编制程序删除数组中所有为零的项,并将后续项向前移进,填补删除项,最后将数组的剩余部分以零补充。73. 试编写一程序,要求比较两个字符串STR1和STR2中所含字符是否相同,若相同则显示输出MATCH;若不相同则显示输出NO MATCH。74. 在附加段中,有一个按从小到大顺序排列
18、的无符号数数组,其首地址存放在DI寄存器中,数组中的第一个单元存放着数组中的偏移地址;如未找到,则使CF=1.(折半查找算法)75. X、Y、Z为无符号的16位二进制数,编写程序计算表达式W=(X+8)*Z+(X*Y)(不考虑加法的溢出)。76. 设X、Y是无符号数字节变量,下列程序是计算表达式Z=(X+5)*10/Y的程序,请在空格处填上适当的语句(不考虑溢出)。DATA SEGMENTX DB ?Y DB ?Z DW 0_(1)_CODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX,DATA_(2)_MOV AL,XADD AL,5_(3_MU
19、L BL_(4)_MOV Z,AXMOV AH,4CH_(5)_CODE ENDS END START77. 在附加段中,有一个首地址为LIST和未经排序的字数组.在数组的第一个数字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数.要求编制一程序:在数组中查找该数,如果找到此数,则把它从数组中删除.78. 设A、B、C是无符号数字节变量,下列程序是计算表达式Z=(C+(A+B)*(B+5)/B的程序段,请在空格处填上适当的指令。A DB ?B DB ?C DW 2 DUP(0) MOV AL,A ADD AL, B MOV BL,B _(1) _ _(2)_
20、ADD AL, C ADC AH, 0 DIV B MOV Z, AX _(3) _79. 下列程序是将BUF中的16位无符号二进制数转换为十进制数并输出。请在程序的空格处填写适当的指令。80. 编写一程序,将A和B中的两位压缩型BCD码相加,并将相加的结果用十进制数输出。81. 设在X单中存放一个0-7之间的整数,用查表法求出其平方值,并将结果存入Y单元。82. 已知有符号字节变量A,设计一段程序,求出A的绝对值,将结果存于字节变量B中。83. 设有一段英文,其字符变量名为ENG,试编写一个程序,查对单词SUN在该文中出现的次数,并显示出次数:SUN:.84. 将BUF缓冲区中的100个字的
21、有符号数按正数和负数分开,并分别送至同一个数据段的BUF1和BUF2两个缓冲区中。85. 在ARRAY址起有20个有符号数。试编程将其正数存于A起的单元中。负数存于B起的单元中,且显示正数及负数的个数。86. 在首地址为ARY的字数组中,存放了100H个16位的补码数,试编写一程序,求出它们的平均值并放在V字单元中;求出数组中有多少个数大于此平均值(整数部分),将结果放在COUN字单元中。87. 设X、Y是有符号数字变量,下列程序是计算表达式S=(X+5)*Y+4)/(XY)的程序段,请在程序的空格处填上适当的指令。X DW ?Y DW ?S DW 2 DUP(0) MOV AX, X ADD
22、 AX, 5 IMUL Y _(1)_ _(2)_ MOV BX, X SUB BX, Y _(3)_ MOV S+2, AX _(4)_88. 将A中的2位非压缩型BCD码与B中的2位非压缩型BCD相乘,并将结果存放在C 字节变量中。89. 编写完整程序,功能是把N个8个二进制数据转换成16进制字符数据。假定N个数据存放在字节变量VARB中,转换后的字符数据存放在HVARB中,提示0-9的字符码为30H-39H,A-F的字符码为41H-46H90. 在ABC起的连续4个单元中放有4个无符号数。试编程实现第1、4二数求和,再减去第2数和第3数,结果存入XYZ起的单元中。91. 设在内存数据区T
23、ABLE地址开始存放一列表,表长在LEN单元,表中数据为有符号字节数据,请用冒泡排序法编程将表中的数据从小到大排序。92. 编写一程序,比较两个有符号的字变量x和Y。 (1)若两个数都大于等于100,则将两个数分别加1。 (2)若两个数都不大于等于100,则将两个数分别减1。(3)若两个数一个大于等于100,另一个数不大于等于100,则将两个数互换。93. 下列程序是统计S,丑字符串中出现X变量中存放的字符的次数,并将统计的结果送COUNT单元。请在程序的空格处填写适当的指令。 DATA SEGMENT STR DB CAGEYGUUIY04637DYU7R656SR C = $-ARY X
24、DB U COUNT DW O DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS,AX MOV COUNT, 0 (1) MOV CX, C MOV AL,X L: CMP AL, SI (2) INC COUNT NEXT: INC SI (3) MOV AH, 4CH INT 2lH CODE ENDSEND START94. 下列程序是将BUF字节缓冲区中的2位十六进制数转换成2位十六进制数的ASClI 码,并将转换结果存放在Y单元中。请在程序的空格处填上的适当的指令。 HOV AL,
25、BUF (1) _ SHR AL, CL (2) _ JBE L ADD AL, 7 L: ADD AL, 30H MOV Y,AL MOV AL, BUF (3) _ CMP AL, 1O (4) _ ADD AL, 7 M: ADD AL, 30H MOV Y+l,AL MOV AH, 4CHINT 21H95. 下列程序是判断两个无符号字数据X、Y的大小,当XY时执行X-Y;当XY 时执行Y-x;当x=Y时执行X+Y。其运算后的结果存放在W中。请在程序的空格处填上适当的指令。 MOV AX,X MOV BX,Y CMP AX,BX (1) _ JB M ADD AX, BX (2) _
26、L: (3) _ JMP EXIT M: XCHG AX, BX SUB AX, BX EXIT:MOV W,AX MOV AH, 4CH INT 21H96. 设X为有符号数的字变量,编写一段程序,若x的绝对值大于10,则将其绝对值送Y保存:否则将X+10的值送Y保存。97. 编写一程序,判断X、Y字节变量中的数据,根据判断结果置FLAG字节变量的值。 (1)若两个数都为奇数,则将FLAG置2。 (2)若两个数都为偶数,则将FLAG置0。(3)若两个数为一奇一偶,则将FLAG置1。98. 编写一子程序,将AL寄存器中的l位十六进制数转换成ASCII码显示输出。99. 下列程序是判断BUF字缓
27、冲区中有符号数的大小,当其数值大于-100时,就将FLAG字节单元清0,否则就将其置1。请在程序的空格处填上适当的指令。 MOV AX,BUF (1) _ (2) _ MOV FLAG,O (3) _ L: MOV FLAG, 1 M: MOV AH, 4CHINT 21H00. 编一段程序,将AL中任意一位十六进制数转换为ASCII码,结果放在BL中。01. 编一数据传送子程序。采用寄存器传递参数的方法设计子程序,并给出主程序的调用方式。02. 编写一程序,统计x字节变量中为1的位数,井将统计的结果显示出来。03. 把4个字节单元的非压缩BCD码(高4位为0)转换为4位压缩BCD码(两字节)
28、后存放到首址为BCDF的两个字节单元中。提示:例如,执行前 SRCF DB 06H,02H,07H,04H 执行后 BCDF DB 62H,74H 具体算法为: (1)取出第一字节单元的内容。 (2)取出第二字节单元的内容左移4位,后与上字节单元合并。 (3)取出第三字节单元的内容。 (4)取出第四字节单元的内容左移4位,后与上字节单元合并。 (5)再将四位BCD码送BCDF和BCDF+1字节单元。04. 下列程序是比较字符串STR1和STR2中第一个不相等的字符,若查找到,则将FLAG字节单元置1,并将查找的字符串STR1的偏移地址送ADR字单元,否则FLAG清0。请在程序的空格处填上适当的
29、指令。 LEA SI, STR1 (1) _ MOV CX, 100 CLD (2) _ (3) _ MOV FLAG, 0 JMP EXIT L: MOV FLAG, 1 (4) _ MOV ADR, SI EXIT:MOV AH, 4CH INT 2Lh05. 现有 DATA SEGMENT ARRAY DW 64 DUP(?) DW 5 DUP(?) DATA ENDS 试编制一程序段,要求在ARRAY+8到ARRAY+10(两者都包括在内)单元中插入5个0。06. 在数据区里,有10个不同的信息,编号为09,每个信息包括30个字符。现在要求编制一个程序:从键盘接收09之间的一个编号,然
30、后在屏幕上显示出相映编号的信息内容。07. 按子程序说明编写一完整的子程序。子程序名:ATBC功 能:ASCII码转换成BCD码。入口参数:BX存放待转换的ASCII字节存储区首址 SI存放转换后的BCD码字节存储区首址 CX存放待转换的代码个数08. 编写一个程序,判断X字节变量中的三个数,根据比较结果FLAG字节变量置1: (1)若三个数都为0,则FLAG置3。 (2)若两个数为O,则FLAG置2。 (3)若一个数为0,则GLAG置1。(4)若全不为0,则FLAG置0。09. 利用堆栈传递参数的方法编制一子程序,实现对两个已定义的数组分别求和。10. 下列程序是将X、Y双字变量的内容相加,
31、其结果存放在Z变量中。请在程序的空格处填写适当的指令。 DATA SEGMENT X DD lOH Y DD H Z DB 5 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS:nATA START: MOV AX, DATA MOV DS,AX MOV CX, 4 (1) AND AX,A。X L: MOV AL, BYTE PTR XSI (2) MOV ZSI, AL INC SI (3) MOV AL, 0 (4) MOV ZS1, AL MOV AH, 4CH INT 21H CODE ENDSEND START11. 假定A、B、C
32、字节变量中存放的是三个相等的数据,但由于某种原因使其中的一个数据发生变化,试编写一程序找出三个数中变化的代码存放在D中,并将变化的代码单元恢复成原来的数据。12. 下列程序是判断X和Y中有符号字数据的大小,当X中的数据大于Y中的数据时, 就将Z置1;当x中的数据小于Y中的数据时就将z置-1;否则将z清0。请在程序的空 格处填上适当的指令。 MOV AX,X (1) _ (2) _ JG M MOV Z, -1 JMP EXIT L:MOV Z,0 JMP EXIT M: (3) _ EXIT: MOV AH, 4CHINT 21H13. 用宏定义、宏调用实现A和B变量中的2位非压缩型BCD码相
33、加,然后显示输出相加的结果。14. 利用0AH号功能调用,从键盘输入最多达80个字符的字符串存入以BUF为首址的缓冲区中。 15. 利用02号系统功能调用完成输出显示一串字符信息。 16. 下列程序段是将BUF1字缓冲区中的内容送300H输出端口,将200H端口中的内容送BUF2字缓冲区的程序,请在程序段的空格处填上适当的指令。 BUF1 DW ? BUF2 DB ? LEA BX, BUF1 MOV AX, BX _(1)_ _(2)_ _(3)_(4)_MOV BUF2, AL17. 假设中断类型号为的中断处理程序的首地址为IT8,试写出主程序中设置这一中断向量的程序段.18. 采用09H
34、号功能调用,输出显示指定的字符串。19. 设从STR1和STR2开始各存放一个长度为100字节的字符串,编一段程序比较两字符串是否相等。若相等,则显示E,否则显示N。20. 下列程序段是利用宏定义和DOS功能调用将ST中的字符串显示在显示器上的程序,请在程序段的空格处填上适当的指令或参数。DISPLAY MACRO X, YMOV AH, X_(1)_INT 21H _(2)_DATA SEGMENT ST DB ABCD$DATA ENDS DISPLAY (3) 、 (4)21. 编写一程序段从键盘上读入字符并判断它是否为“y”或“n”22. 写出一段清屏程序.23. 编写指令,以文本方式在品红底显示5个浅绿色的笑脸符。24. 试编写一程序,要求能从键盘接收一个个位数N,然后响铃N 次(响铃的ASC码为07)。25. 若要求将文件TEST.TXT的内容在屏幕上显示出来,请在_处添入适当的内容:DATA SEGMENTFILE DB TEST.TMP,00H ;文件说明