1、微机原理及应用习题105道微机原理与应用习题1. 求ADDRI开始单元中连续存放的两个双字数据之和,将结果存放在ADDR2开始的单元,并将结果在显示器上显示出来。(假定和不超过双字)2. 在一个首地址为STR、长度为N的字符串中查找“空格”,找到则向DL中送1,否则向DL中送-1。3. 将两位十六进制数转换成ASCII码,并送屏幕显示,要求使用顺序结构实现。4. 使用分支结构实现将1位十六进制数转换成ASCII码。假设需要转换的十六进制数已存放在AL的低4位上,转换结果仍存放到AL中。5. 一个32位数存放在以数据段的BUF单元开始的位置。编写子程序统计该数中含“1”的个数,并将其结果存入RS
2、LT字节单元。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中。已知:矩阵,向量。提示:对于计算公式为:;汇编语言程序采用双循环结构。12.
3、 假设在内存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单元
4、起有若干学生成绩,成绩以“*”结束。按照10090为优、8975为中等、7460及格、60以下为不及格,编写一程序,完成统计各分数段学生人数。19. 编写一个过程,完成统计DX中“1”的个数,并将结果送CX中。20. 一个8位带符号二进制数X存放在内存单元BUF中,试根据下列函数关系编写程序求Y值,并将结果存入RESULT单元。21. 编写程序对在数据段BUF1地址起存放一串字符个数进行统计,串结束标志为-1,并将统计的结果放到CX中。22. 编写一个完整的汇编程序,把50个字节数组中的正数、负数、零挑选出来,分别将正数、负数存入正数、负数数组,并计算其中正数、负数和零数据的个数,存入内存变量
5、中。23. 编写一个完整的汇编程序,统计数据段中存放的15个带符号的字数据(首地址TABLE)中正数、负数和零的个数,分别将个数存放在PLUS、MINUS和ZERO单元,并将正数、负数和零的个数在微机屏幕上以十六进制数的形式显示出来。24. 编写一个完整的汇编程序,自BUF开始的内存缓冲区中有N (N255)个字节为带符号的二进制数。要求把该数组中的正数、负数分开。正数放在PLADR开始的内存缓冲区中,正数的个数放在PLNUM单元中。负数放在NGADR开始的内存缓冲区中,负数的个数放在NGNUM单元中。25. 编写一个完整的汇编程序,统计以DATA1为首址的数据存储器中存放的一个数据块(以FF
6、H为结束符)的长度(即字节数),不包括结束符FFH,且长度小于256,将其存于CONT单元中。26. 编写一个完整的汇编程序,在数据存储器中有一数据块,其起始地址在FIRST(低字节)和FIRST+1(高字节)单元,数据块长度在LEN单元且不为0。要求统计该数据块中正偶数和负奇数的个数,并将统计结果分别存放在PUNIT和NUNIT单元。27. 编写一个完整的汇编程序,已知某应用系统规定:5个单字符命令AE的命令处理程序入口地址分别为PGMA、PGMB、PGMC、PGMD和PGME,输入命令的ASCII字符存放在累加器中。编制程序段的功能为:如果累加器中的内容为合法命令字符AE之一,则控制转入相
7、应命令处理程序的入口;否则转入出错处理程序入口ERR。28. 编写一个完整的汇编程序,从8000H开始的存储区中存放着80名同学某科目的成绩(0100分),试编程统计及格(60分以上)和不及格人数,并将统计结果存放在选定的寄存器中。29. 编写程序,能够实现将( DX,AX )中的(32位)内容向右逻辑移动4位。30. 编写程序完成统计数据段从4500H开始单元存放的100个单字节带符号数中负数和正数的个数,将结果分别放于DX和BX中。31. 编写程序完成将首地址为TABLE的数组中存放的100个8位无符号二进制数中,最小数和最大数找出来,分别存放到MIN和MAX单元中。32. 假设有一个8位
8、无符号二进制数X存放在内存单元为ADDR中,Y与X的关系表示在下面的函数中,编写一个程序,能够求出Y的值,并将结果存入RESULT单元。33. 有3个不带符号字节数X、Y、Z存放在内存WP开始的单元中,编写出完整的汇编源程序,能够计算(XYZ)/Z的值。(X、Y、Z数可任意假设)34. 若在自1000H单元开始有一个100个数的数据块,要把它传送到自2000H开始的存储区中去。35. 在自0500H单元开始,存有100个数。要求把它传送到1000H开始的存储区中,但在传送过程中要检查数的值,遇到第一个零就停止传送。36. 在自0500H单元开始,存有100个数。要求把它传送到1000H开始的存
9、储区中,但在传送过程中检查数的值,零不传送,不是零则传送到目的区。37. 在自0500H单元开始,存有100个数,把数据块中的正数传送到自1000H开始的存储区。38. 在自0500H单元开始,存有100个数,把数据块中的正数传送到自1000H开始的存储区;而把其中的负数,传送到自1100H开始的存储区。且分别统计正数和负数的个数,分别存入1200H和1201H单元中。39. 自0200H单元开始,有100个无符号数,编一个程序求这100个数的和(用8位数运算指令),把和放在0264H和0265H单元(和用两字节表示),且高位在0265H单元。40. 若在0500H单元中有一个数x:(1) 利
10、用加法指令把它乘2,且送回原存储单元 (假定x2后仍为一个字节);(2) x4;(3) x10 (假定x10255)。41. 若在存储器中有两个数a和b(它们所在地址用符号表示,下同),编一程序实现a10+b (a10以及“和”用两字节表示)。42. 若在存储器中有数a、b、c、d(它们连续存放),编一个程序实现(a10+b)10+c)10+d (和小于等于65535)43. 在0200H单元和020AH单元开始,存放两个各为10个字节的二进制数(地址最低处放的是最低字节),求它们的和,且把和放在0214H开始的存储单元中。44. 若在0500H单元有一个数x,把此数的前四位变0,后四位维持不
11、变,送回同一单元。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单元中有两个正数,编一个程
12、序比较它们的大小,把较小的数放在0201H单元中。52. 若在0200H和0201H单元中有两个无符号数,编一个程序比较它们的大小,把较大的数放在0201H单元中。53. 若自0500H单元开始有1000个带符号数,把它们的最小值找出来,放在1000H单元中。54. 若自1000H单元开始有1000个无符号数,把它们的最大值找出来,放在2000H单元中。55. 在0200H单元中有一个数x,利用移位和相加的办法,使x10(假定x10255)后送回原单元。56. 在0200H和0201H单元中,存有一个两字节数(高位在后),编一个程序把它们整个右移一位。57. 在自BUFFER单元开始,放有一个
13、数据块,BUFFER和BUFFER+1单元中放的是数据的长度,自BUFFER+2开始存放数据,每一单元放的是两位BCD码,把它们分别转换为ASCII码,放到自BLOCK开始的存储区中(低四位BCD码转换成的ASCII码放在地址低的单元),而BLOCK和BLOCK+1放转换成的ASCII码的长度。58. 在自BUFFER单元开始,放有一个数据块,BUFFER和BUFFER+1单元中放的是数据块的长度,自BUFFER+2开始存放的是以ASCII码表示的16进制数码(即09,AF),把它们转换为16进制数码,放在同一单元中。59. 若在某存储区中已输入4个以ASCII码表示的16进制数码(高位在前)
14、,把它们转换为二进制数放入BX寄存器对中,并显示在屏幕上。60. 若自STRING单元开始存放一个字符串(以字符空格引导,以$结尾),编一个程序统计这个字符串的长度(忽略前导空格和结尾的$字符)。61. 在自STRI1和STRI2开始各有一个由10个字符组成的字符串,检查这两个字符串是否相等,在STFLAG单元中建立一个标志(相等为00,不等为FF)。62. 编一个程序,统计一个八位二进制数中的为“1”的位的个数。63. 编一个程序,使放在DATA及DATA+1单元的两个八位带符号数相乘,乘积放在DATA+2及DATA+3单元中(高位在后)。64. 编一个程序,使放在DATA(被除数)及DAT
15、A+1(除数)的两个八位带符号数相除,商放在DATA+2单元,余数放在DATA+3单元中。65. 编一个程序,使放在DATA和DATA+1的两字节无符号数与在DATA+2及DATA+3中的无符号数相乘,乘积接着原来的数存放(高位在后)。66. 编一个程序,两个16位无符号数相除,商和余数接着原来的数存放(先放商,高位在后)。67. 把在BX寄存器对中的16位带符号二进制数转换为十进制数,且把符号位及各位十进制码转换为相应的ASCII码,放到自DATA开始的7个存储单元中(高位在前),最后填以空格。68. 若自STRING开始有一个字符串(以#号作为字符串的结束标志),编一个程序,查找此字符串中
16、有没有字符$,有多少个$(放在NUMBER单元中,没有$则其为0,否则即为$的个数);且把每一个$字符所存放的地址,放到自POINTR开始的连续的存储单元中。69. 把数据块传送程序编为一个子程序MOVE,源地址、目的地址和传送的字节数放在自ADDR开始的存储单元中。主程序调用子程序实现上述功能。70. 把八位无符号数乘法程序编为一个子程序,被乘数、乘数和乘积放在自DATA开始的存储单元中。主程序调用子程序实现上述功能。71. 编写子程序。将AL中的二进制数转换成对应的BCD码(置于AL中)返回。若AL中的二进制数大于99,则置CF为1,AL不变,返回。主程序调用子程序实现上述功能。72. 编
17、写子程序。将AL中的(两位)压缩BCD码转换成对应的二进制数(置于AL中)返回。主程序调用子程序实现上述功能。73. 编写子程序。将AX中的二进制数转换成对应的(4位压缩)BCD码(置于AX中)返回。若AX中的二进制数大于9999,则置CF为1,AX不变,返回。主程序调用子程序实现上述功能。74. 编写子程序。将AX中的(4位压缩)BCD码转换成对应的二进制数(置于AX中)返回。主程序调用子程序实现上述功能。75. 编写子程序。将AL中的二进制数转换成对应的ASCII码(置于AL中)返回。主程序调用子程序实现上述功能。76. 编写子程序。将AL中的ASCII码转换成对应的二进制数(置于AL中)
18、返回。若AL中的ASCII码不在09、AF之间,则置CF为1,AL不变,返回。主程序调用子程序实现上述功能。77. 编写子程序。将AX中的无符号十进制数转换成对应的ASCII码串存放于变量中。变量定义为:ASCII DB 5 DUP(?)。DX存放该变量的起始地址。要求子程序返回时, CX存放该ASCII码串中的字符个数。主程序调用子程序实现上述功能。78. 编写子程序。将AX中的有符号十进制数转换成对应的ASCII码串存放于变量中。变量定义为:ASCII DB 6 DUP(?)。DX存放该变量的起始地址。要求子程序返回时, CX存放该ASCII码串中的字符个数。主程序调用子程序实现上述功能。
19、79. 编写子程序。将一ASCII码字符串转换成对应的无符号二进制数(存放于AX中)。该ASCII码字符串的首地址存放于DX中,其字符个数存放于CX中。若出现非法字符或超过AX的存储范围等情况,置CF为1,AX不变,返回。主程序调用子程序实现上述功能。80. 编写子程序。将一ASCII码字符串转换成对应的有符号二进制数(存放于AX中)。该ASCII码字符串的首地址存放于DX中,其字符个数存放于CX中。若出现非法字符或超过AX的存储范围等情况,置CF为1,AX不变,返回。主程序调用子程序实现上述功能。81. 编写子程序。用给定的字节(在AL中)填充一指定的内存区域。该内存区域的起始地址位于DI中
20、,需填充的内存单元个数位于CX中。主程序调用子程序实现上述功能。82. 编写子程序。用给定的字(在AX中)填充一指定的内存区域。该内存区域的起始地址位于DI中,需填充的内存单元个数位于CX中。主程序调用子程序实现上述功能。83. 编写子程序。在一给定的内存区域中查找指定的字节。该内存区域的起始地址位于DI中,其存单元个数位于CX中。指定的字节位于AL中。若找到,则将该内存单元的偏移地址存放于DI中,且置ZF为1,返回。若未找到,DI不变,置ZF为0,返回。主程序调用子程序实现上述功能。84. 编写子程序。在一给定的内存区域中查找指定的字。该内存区域的起始地址位于DI中,其存单元个数位于CX中。
21、指定的字位于AX中。若找到,则将该内存单元的偏移地址存放于DI中,且置ZF为1,返回。若未找到,DI不变,置ZF为0,返回。主程序调用子程序实现上述功能。85. 编写子程序。求内存中一无符号字型数据序列的平均值。该无符号字型数据序列的起始地址位于BX中,数据个数位于CX中。要求求得的平均值整数部分(商)存放于AX中,小数部分(余数)存放于DX中。主程序调用子程序实现上述功能。86. 编写子程序。求内存中一有符号字型数据序列的平均值。该无符号字型数据序列的起始地址位于BX中,数据个数位于CX中。要求求得的平均值整数部分(商)存放于AX中,小数部分(余数)存放于DX中。主程序调用子程序实现上述功能
22、。87. 编写子程序。求内存中一无符号字节型数据序列的和。该无符号字节型数据序列的起始地址位于BX中,数据个数位于CX中。要求求得的和存放于AX中,且置CF为0;但若其和超过AX的存放范围,或数据个数为0等情况,则置CF为0,AX不变。主程序调用子程序实现上述功能。88. 编写子程序。求内存中一有符号字节型数据序列的和。该无符号字节型数据序列的起始地址位于BX中,数据个数位于CX中。要求求得的和存放于AX中,且置CF为0;但若其和超过AX的存放范围,或数据个数为0等情况,则置CF为0,AX不变。主程序调用子程序实现上述功能。89. 编写子程序。求内存中一无符号字节型数据序列的最大值和最小值。该
23、无符号字节型数据序列的起始地址位于SI中,数据个数位于CX中。要求求得的最大值存放于AH中,最小值存放于AL中。主程序调用子程序实现上述功能。90. 编写子程序。求内存中一有符号字节型数据序列的最大值和最小值。该无符号字节型数据序列的起始地址位于SI中,数据个数位于CX中。要求求得的最大值存放于AH中,最小值存放于AL中。主程序调用子程序实现上述功能。91. 编写子程序。将一无符号字节序列排成升序。该字节序列的首地址存放于SI中,其字节个数存放于CX中。主程序调用子程序实现上述功能。92. 编写子程序。将一有符号字节序列排成升序。该字节序列的首地址存放于SI中,其字节个数存放于CX中。主程序调
24、用子程序实现上述功能。93. 编写子程序。比较两个字节型数据块。其中,第一个数据块的首地址存放于SI中,第二个数据块的首地址存放于DI中,CX中存放比较的字节个数。若两个数据块完全匹配,则置ZF=0,返回;否则,置ZF=1,并将不匹配的单元地址存放于DI中返回。主程序调用子程序实现上述功能。94. 编写子程序。比较两个字型数据块。其中,第一个数据块的首地址存放于SI中,第二个数据块的首地址存放于DI中,CX中存放比较的字个数。若两个数据块完全匹配,则置ZF=0,返回;否则,置ZF=1,并将不匹配的单元地址存放于DI中返回。主程序调用子程序实现上述功能。95. 编写子程序。交换两个字节串。其中,
25、第一个字节串的首地址存放于SI中,第二个字节串的首地址存放于DI中,CX中存放字节串的字节个数。主程序调用子程序实现上述功能。96. 编写子程序。交换两个字串。其中,第一个字串的首地址存放于SI中,第二个字串的首地址存放于DI中,CX中存放字串的字个数。主程序调用子程序实现上述功能。97. 编写子程序。将一个字符串中的小写字母转换成大写字母。该字符串的首地址存放于BX中,字符个数存放于CX中。主程序调用子程序实现上述功能。98. 编写子程序。将一个字符串中的大写字母转换成小写字母。该字符串的首地址存放于BX中,字符个数存放于CX中。主程序调用子程序实现上述功能。99. 编写子程序。从键盘输入一
26、个十六进制数,将其存储到DX中。若输入数据中出现非法字符,则返回。主程序调用子程序实现上述功能。100. 编写子程序。将DX中的十六进制数输出到屏幕上。主程序调用子程序实现上述功能。101. 编写子程序。从键盘输入一个BCD码十进制数,将其存储到DX中。若输入数据中出现非法字符,则返回。主程序调用子程序实现上述功能。102. 编写子程序。将DX中的BCD码十进制数输出到屏幕上。主程序调用子程序实现上述功能。103. 编写子程序。从键盘输入一个有符号十进制数,将其存储到DX中。若输入数据中出现非法字符,则返回。主程序调用子程序实现上述功能。104. 编写子程序。从键盘输入一个无符号十进制数,将其存储到DX中。若输入数据中出现非法字符,则返回。主程序调用子程序实现上述功能。105. 编写子程序。将内存中的一字符块显示到屏幕上。该字符块的首地址存放于BX中,字符个数存放于CX中。主程序调用子程序实现上述功能。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1