微机原理及应用习题105道 下载本文

内容发布更新时间 : 2024/5/2 8:47:19星期一 下面是文章的全部内容请认真阅读。

《微机原理与应用》习题

1. 求ADDRI开始单元中连续存放的两个双字数据之和,将结果存放在ADDR2开

始的单元,并将结果在显示器上显示出来。(假定和不超过双字) 2. 在一个首地址为STR、长度为N的字符串中查找“空格”,找到则向DL中送

1,否则向DL中送-1。 3. 将两位十六进制数转换成ASCII码,并送屏幕显示,要求使用顺序结构实现。 4. 使用分支结构实现将1位十六进制数转换成ASCII码。假设需要转换的十六

进制数已存放在AL的低4位上,转换结果仍存放到AL中。 5. 一个32位数存放在以数据段的BUF单元开始的位置。编写子程序统计该数

中含“1”的个数,并将其结果存入RSLT字节单元。 6. 用查表法将1位十六进制数转换成相应的ASCII码,并将结果送屏幕显示。 7. 将数据段中首地址为ADDR、长度为N的一组数据加1,并送回原处。 8. 将数据段ADDR1地址处的200个字节数据,传送到数据段地址为ADDR2处。 9. 编写程序,已知有某字串BUF1的首址为2000H,并且数据段与附加段重合。

欲从BUF1处开始将20个字数据顺序传送至BUF2处。 10. 有First和Second开始的2个长度相等的字符串,交换2个字符串的内容。 11. 编写程序能够完成矩阵A与向量B相乘,结果存放在向量C中。

?1423??,向量B?2457T。 2159已知:矩阵A????????8765???a11提示:对于??a21??a31a12a22a324a13a23a33a14?a24????b1b2a34??b3b4???c1c2Tc3?

T计算公式为:Ci??aijbj,j?1i?1,2,3;汇编语言程序采用双循环结构。

12. 假设在内存BUF为首地址的数据区中,有50个字节的无符号数,编一程序

能够找出数据块中的最大者,并把它送至MAX单元中。 13. 编写程序,给一串字符加上奇校验位,采用堆栈传递参数。

14. 编写程序,分别将M1、M2、M3中两个压缩型BCD码求和,并将结果保存。 15. 编写程序,求ARRAY开始的100个带符号字节数据的绝对值,结果放在Result

开始的100个字节中。 16. 查找字符串String中是否有“A”这个字符,如果有“A”,显示“Yes”,结

束程序,若不含“A”则显示“No”,结束程序。

17. 编程把BUF开始的10个正数升序排序,结果放在Result中。

18. 假设从内存BUF单元起有若干学生成绩,成绩以“*”结束。按照100~90为优、89~75为中等、74~60及格、60以下为不及格,编写一程序,完成统计各分数段学生人数。 19. 编写一个过程,完成统计DX中“1”的个数,并将结果送CX中。

20. 一个8位带符号二进制数X存放在内存单元BUF中,试根据下列函数关系编

写程序求Y值,并将结果存入RESULT单元。

??1X?0?Y??0X?0

?1X?0?21. 编写程序对在数据段BUF1地址起存放一串字符个数进行统计,串结束标志

为-1,并将统计的结果放到CX中。 22. 编写一个完整的汇编程序,把50个字节数组中的正数、负数、零挑选出来,

分别将正数、负数存入正数、负数数组,并计算其中正数、负数和零数据的个数,存入内存变量中。 23. 编写一个完整的汇编程序,统计数据段中存放的15个带符号的字数据(首

地址TABLE)中正数、负数和零的个数,分别将个数存放在PLUS、MINUS和ZERO单元,并将正数、负数和零的个数在微机屏幕上以十六进制数的形式显示出来。 24. 编写一个完整的汇编程序,自BUF开始的内存缓冲区中有N (N≤255)个字节

为带符号的二进制数。要求把该数组中的正数、负数分开。正数放在PLADR开始的内存缓冲区中,正数的个数放在PLNUM单元中。负数放在NGADR开始的内存缓冲区中,负数的个数放在NGNUM单元中。 25. 编写一个完整的汇编程序,统计以DATA1为首址的数据存储器中存放的一个

数据块(以FFH为结束符)的长度(即字节数),不包括结束符FFH,且长度小于256,将其存于CONT单元中。 26. 编写一个完整的汇编程序,在数据存储器中有一数据块,其起始地址在

FIRST(低字节)和FIRST+1(高字节)单元,数据块长度在LEN单元且不为0。要求统计该数据块中正偶数和负奇数的个数,并将统计结果分别存放在PUNIT和NUNIT单元。 27. 编写一个完整的汇编程序,已知某应用系统规定:5个单字符命令A~E的命

令处理程序入口地址分别为PGMA、PGMB、PGMC、PGMD和PGME,输入命令的ASCII字符存放在累加器中。编制程序段的功能为:如果累加器中的内容为合法命令字符A~E之一,则控制转入相应命令处理程序的入口;否则转入出错处理程序入口ERR。 28. 编写一个完整的汇编程序,从8000H开始的存储区中存放着80名同学某科

目的成绩(0~100分),试编程统计及格(60分以上)和不及格人数,并将统计结果存放在选定的寄存器中。

29. 编写程序,能够实现将( DX,AX )中的(32位)内容向右逻辑移动4位。 30. 编写程序完成统计数据段从4500H开始单元存放的100个单字节带符号数中

负数和正数的个数,将结果分别放于DX和BX中。 31. 编写程序完成将首地址为TABLE的数组中存放的100个8位无符号二进制数

中,最小数和最大数找出来,分别存放到MIN和MAX单元中。 32. 假设有一个8位无符号二进制数X存放在内存单元为ADDR中,Y与X的关系

表示在下面的函数中,编写一个程序,能够求出Y的值,并将结果存入RESULT单元。

?X2?60?X?10H?Y??2X?810H?X?50H

?28X?50H?33. 有3个不带符号字节数X、Y、Z存放在内存WP开始的单元中,编写出完整

的汇编源程序,能够计算(X×Y–Z)/Z的值。(X、Y、Z数可任意假设) 34. 若在自1000H单元开始有一个100个数的数据块,要把它传送到自2000H开

始的存储区中去。 35. 在自0500H单元开始,存有100个数。要求把它传送到1000H开始的存储区

中,但在传送过程中要检查数的值,遇到第一个零就停止传送。 36. 在自0500H单元开始,存有100个数。要求把它传送到1000H开始的存储区

中,但在传送过程中检查数的值,零不传送,不是零则传送到目的区。 37. 在自0500H单元开始,存有100个数,把数据块中的正数传送到自1000H开

始的存储区。 38. 在自0500H单元开始,存有100个数,把数据块中的正数传送到自1000H开

始的存储区;而把其中的负数,传送到自1100H开始的存储区。且分别统计正数和负数的个数,分别存入1200H和1201H单元中。 39. 自0200H单元开始,有100个无符号数,编一个程序求这100个数的和(用8

位数运算指令),把和放在0264H和0265H单元(和用两字节表示),且高位在0265H单元。 40. 若在0500H单元中有一个数x:

(1) 利用加法指令把它乘2,且送回原存储单元 (假定x×2后仍为一个字

节); (2) x×4;

(3) x×10 (假定x×10≤255)。 41. 若在存储器中有两个数a和b(它们所在地址用符号表示,下同),编一程序

实现a×10+b (a×10以及“和”用两字节表示)。

42. 若在存储器中有数a、b、c、d(它们连续存放),编一个程序实现

((a×10+b)×10+c)×10+d (和小于等于65535) 43. 在0200H单元和020AH单元开始,存放两个各为10个字节的二进制数(地址

最低处放的是最低字节),求它们的和,且把和放在0214H开始的存储单元中。 44. 若在0500H单元有一个数x,把此数的前四位变0,后四位维持不变,送回

同一单元。 45. 若在0500H单元有一个数x,把此数的前四位变“1”,后四位维持不变,送

回同一单元。 46. 把x的最低位变“1”,高7位不变,送至0600H单元。

47. 若在0500H单元有一个数x,把此数的前四位变反,后四位维持不变,送回

同一单元。 48. 把x的最高位取反,后7位不变,把结果按二进制显示,并送至0600H单元。 49. 若从0200H单元开始有100个数,编一个程序检查这些数,正数保持不变,

负数取补后送至0300H单元开始的存储区。 50. 若在0200H和0201H单元中有一个双字节数,编一个程序对它们求补。 51. 若在0200H和0201H单元中有两个正数,编一个程序比较它们的大小,把较

小的数放在0201H单元中。 52. 若在0200H和0201H单元中有两个无符号数,编一个程序比较它们的大小,

把较大的数放在0201H单元中。 53. 若自0500H单元开始有1000个带符号数,把它们的最小值找出来,放在1000H

单元中。 54. 若自1000H单元开始有1000个无符号数,把它们的最大值找出来,放在2000H

单元中。 55. 在0200H单元中有一个数x,利用移位和相加的办法,使x×10(假定

x×10>255)后送回原单元。 56. 在0200H和0201H单元中,存有一个两字节数(高位在后),编一个程序把它

们整个右移一位。 57. 在自BUFFER单元开始,放有一个数据块,BUFFER和BUFFER+1单元中放的是

数据的长度,自BUFFER+2开始存放数据,每一单元放的是两位BCD码,把它们分别转换为ASCII码,放到自BLOCK开始的存储区中(低四位BCD码转换成的ASCII码放在地址低的单元),而BLOCK和BLOCK+1放转换成的ASCII码的长度。 58. 在自BUFFER单元开始,放有一个数据块,BUFFER和BUFFER+1单元中放的是

数据块的长度,自BUFFER+2开始存放的是以ASCII码表示的16进制数码(即0~9,A~F),把它们转换为16进制数码,放在同一单元中。

59. 若在某存储区中已输入4个以ASCII码表示的16进制数码(高位在前),把

它们转换为二进制数放入BX寄存器对中,并显示在屏幕上。 60. 若自STRING单元开始存放一个字符串(以字符空格引导,以$结尾),编一个

程序统计这个字符串的长度(忽略前导空格和结尾的$字符)。 61. 在自STRI1和STRI2开始各有一个由10个字符组成的字符串,检查这两个

字符串是否相等,在STFLAG单元中建立一个标志(相等为00,不等为FF)。 62. 编一个程序,统计一个八位二进制数中的为“1”的位的个数。

63. 编一个程序,使放在DATA及DATA+1单元的两个八位带符号数相乘,乘积放在DATA+2及DATA+3单元中(高位在后)。 64. 编一个程序,使放在DATA(被除数)及DATA+1(除数)的两个八位带符号数相

除,商放在DATA+2单元,余数放在DATA+3单元中。 65. 编一个程序,使放在DATA和DATA+1的两字节无符号数与在DATA+2及DATA+3

中的无符号数相乘,乘积接着原来的数存放(高位在后)。 66. 编一个程序,两个16位无符号数相除,商和余数接着原来的数存放(先放商,

高位在后)。 67. 把在BX寄存器对中的16位带符号二进制数转换为十进制数,且把符号位及

各位十进制码转换为相应的ASCII码,放到自DATA开始的7个存储单元中(高位在前),最后填以空格。 68. 若自STRING开始有一个字符串(以‘#’号作为字符串的结束标志),编一个

程序,查找此字符串中有没有字符$,有多少个$(放在NUMBER单元中,没有$则其为0,否则即为$的个数);且把每一个$字符所存放的地址,放到自POINTR开始的连续的存储单元中。 69. 把数据块传送程序编为一个子程序MOVE,源地址、目的地址和传送的字节数

放在自ADDR开始的存储单元中。主程序调用子程序实现上述功能。 70. 把八位无符号数乘法程序编为一个子程序,被乘数、乘数和乘积放在自DATA

开始的存储单元中。主程序调用子程序实现上述功能。 71. 编写子程序。将AL中的二进制数转换成对应的BCD码(置于AL中)返回。

若AL中的二进制数大于99,则置CF为1,AL不变,返回。主程序调用子程序实现上述功能。 72. 编写子程序。将AL中的(两位)压缩BCD码转换成对应的二进制数(置于

AL中)返回。主程序调用子程序实现上述功能。 73. 编写子程序。将AX中的二进制数转换成对应的(4位压缩)BCD码(置于AX

中)返回。若AX中的二进制数大于9999,则置CF为1,AX不变,返回。主程序调用子程序实现上述功能。 74. 编写子程序。将AX中的(4位压缩)BCD码转换成对应的二进制数(置于AX

中)返回。主程序调用子程序实现上述功能。