微机原理及应用习题105道
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《微机原理与应用》习题
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 =。 提示:对于[][]11
121314T T
21
22232412341233132
3334a 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以及“和”用两字节表示)。