当前位置:文档之家› 微机原理及应用习题105道

微机原理及应用习题105道

《微机原理与应用》习题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 中。

已知:矩阵142321598765A ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦,向量[]T 2457B =。

提示:对于[][]11121314T T21222324123412331323334a a a a a a a a b b b b c c c a a a a ⎡⎤⎢⎥⨯=⎢⎥⎢⎥⎣⎦ 计算公式为:41,1,2,3i ij j j C a b i ===∑;汇编语言程序采用双循环结构。

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 单元。

100010X Y X X -<⎧⎪==⎨⎪>⎩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 单元。

26010H 2810H 50H 2850H X X Y X X X ⎧+≤<⎪=-≤<⎨⎪≥⎩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单元开始存放一个字符串(以字符空格引导,以$结尾),编一个程序统计这个字符串的长度(忽略前导空格和结尾的$字符)。

相关主题