2022年2022年汇编语言程序设计练习题 .pdf
汇编语言程序设计练习题一、字符与串处理类 1.逆序输出字符串“BASED ADDRESSING”。 2.试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。 3.编写程序, 从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 4.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。 5.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。)放在STRING中,试编制一个程序测试字符串中是否存在数字。如有,则把 CL的第 5 位置 1, 否则将该位置置0。 6.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。),将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。7.试编制一个程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序; 如是,则开始接收键入的字符并顺序存放在首地址为buffer的缓冲区中 (空格符不存入),直到接收到第二个空格符时退出程序。 8.试编写一段程序, 要求比较两个字符串string1和 string2所含字符是否相等,如相等则显示“ MATCH ”, 若不相同则显示“NO MATCH ”。 9.试编写一段程序,要求输入两个字符串,如两个字符串相等则显示“MATCH ”, 否则显示“ NO MATCH”。 10.试编写一段程序, 要求在长度为100H字节的数组中, 找出大于 61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN 中。 11.在内存区域0B800:0000-0B800:0FFFF (都是 16 进制数)内查找首地址为SOURCE 的串( SOURCE 的首字节为串长度),如果找到,则把AL 的第 0 位置 0,否则将该位置置1。 12.已知数组A包含 15 个互不相等的整数,数组B包含 20 个互不相等的整数。试编制一个程序,把既在A中又在 B中出现的整数存放于数组C中。 13.在附加段中,有一个首地址为LIST 和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中, AX 寄存器中存放着一个数。要求编制一个程序:在数组中查找该数,如果找到此数,则把它从数组中删除。二、数字输入输出类1. 试编制一个程序,把BX寄存器内的二进制数以十六进制数的形式在屏幕上显示出来。2. 试编制一个程序,把BX寄存器内的二进制数以八进制数的形式在屏幕上显示出来。3. 试编制一个程序,把BX寄存器内的二进制数以十进制数的形式在屏幕上显示出来。 4.从键盘上输入2 个一位数,求出它们的和(假设和不超过1 位)。 5.试编写一段程序, 从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 6.试编写一段程序, 从键盘接收一个0-65535 间的十进制无符号数,并在终端上显示与它等值的二进制数。 7.试编写一段程序,从键盘接收一个-32768-32767间的十进制有符号数,并在终端上显示与它等值的二进制数。 8.编写一个程序,从键盘输入一个065535 之间的 10 进制无符号数,然后以16 进制名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 和四进制数形式显示出所输入的数。 9.编写一个程序,从键盘输入一个不长于8位的四进制数,并将所输入的数以10进制数形式显示出来。10.从键盘上接收一个有符号的十进制数,然后在下一行用十进制输出此有符号数。三、数值处理类 1.编写程序,将一个包含有20 个数据的数组M分成 2 个数组:正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。 2.试编写一个程序,求出首地址为DATA的 100D 字数组中的最小偶数,并把它存放在AX中。 3.有一个首地址为mem 的 100 个字的数组, 试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。 4.设在 A、B 和 C单元中分别存放着3 个数。若3 个数都不是0,则求出三个数的和并存放在 S单元中;若其中有一个数为0,则把其他两个单元也清零。请编写此程序。 5.试编写一个程序,要求比较数组ARRAY 中的三个16 位补码数,并根据比较结果在终端上显示如下信息:如果三个数都不相等则显示0;如果三个数有两个相等则显示1;如果三个数都相等则显示2。 6.从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类计数,最后显示这三类的计数结果。 7.已定义了两个整数变量A和 B,试编写程序完成下列功能:若两个数种有一个是奇数,则将奇数存入A中,偶数存入B中;若两个数均为奇数,则将两数均加1 后存回原变量;若两个数均为偶数,则两个变量均不改变。 8.在首地址为DATA 的字数组中,存放了100H 个 16 位无符号数,试编写一个程序,求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。(注意,分别考虑这些数据的累加和始终在0-65535 之间和超出65535 的情况) 9.已知在首地址为DATA的字数组中存放一系列有符号数(首元素为数据个数),试编写一个程序求出它们的平均值放在变量AVER中,并求出数组中有多少个数大于该平均值,将大于平均值的元素个数保存在变量COUNT 中。(注意, 分别考虑这些数据的累加和始终在-32768-32767 之间和超出 -32768-32767 之外)。 10.编写一个程序,将一个包含有30 个字数据的数组M分成两个数组:奇数数组ODD和偶数数组EVEN , 并把这两个数组中元素的个数以二进制形式显示出来( 不能使用DIV/IDIV指令 ) 。 11.在附加段中,有一个按从小到大的顺序排列的无符号数数组,其首地址存放在DI寄存器中, 数组中的第一个单元存放着数组长度。在AX 中有一个无符号数,要求在数组中查找(AX) ,如找到, 则使 CF=0,并在 SI中给出该元素在数组中的偏移地址;如未找到,则使CF=1 。 12. 在附加段中有一个字数组,其首地址已存放在DI寄存器中, 在数组的第一个字中存放着该数组的长度。要求编制一个程序使该数组中的数按照从小到大的次序排列整齐。(分别使用起泡排序算法、选择排序算法、插入排序算法)。 13.在ADDR 单元中存放着数Y的地址,试编制一个程序把Y中1的个数存入 COUNT 单元中。49. 编写一个程序,计算 1 + 2 + 3 + 4 + , + N 的累加和,并把累加和与10进制形式显示出来。(不能使用公式计算“累加和=N ( N+1)/2 ”,必须使用程序实现循环累加来计名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 算)。四、 I/O 与文件类 1.CMOS RAM 是微机主板上的一块可读写的RAM 芯片,用来保存当前系统的硬件配置和用户对某些参数的设定。CMOS 可由主板的电池供电, 即使系统掉电, 信息也不会丢失。 CMOS RAM本身只是一块存储器,只有数据保存功能,而对CMOS 中各项参数的设定要通过专门的程序。开机时可以通过按某个键键入CMOS 参数设置。我们可以通过端口70H/71H访问 CMOS RAM。 70H为地址端口,存放要访问的CMOS RAM单元的地址; 71H为数据端口,存放从选定的单元中读取的数据,或要写入到其中的数据。读写 CMOS RAM前,要判断端口0AH 的位 7,该位位 1时表示石时钟正在计时,需等待该位为0时才能读写。下面是CMOS RAM的部分单元存储数据的含义(BCD 码)。字节位移量存放数据意义试编写一个程序,实现当前日期、时间。 2.某个计算机的打印机适配器有3个8位的端口(寄存器),其数据寄存器地址是378H,状态寄存器地址是379H,控制寄存器地址是37AH 。这些寄存器主要位的含义是:控制寄存器。CPU 控制打印机工作位0:选通信号。 正常工作室该位为0,当已将数据发送到数据寄存器后,应将该位置为1,以通知打印机从数据寄存器取出数据。置1后需要马上置 0。位1:自动换行。置 1后,打印机每遇到回车就自动走纸1行;置 0后,需要向打印机送出换行符控制走纸。位2:初始化。位3:联机。置 1将设置打印机的联机方式,只有在1方式下打印机才能正常工作。其它位,暂不用。状态寄存器。适配器向CPU 报告打印机的状态位3:0=打印机出错;1=打印机可用。位4:0=打印机脱机;1=打印机联机。位5:0=打印机有纸;1=打印机无纸。位7:0=打印机忙; 1=打印机空闲。其它位,暂不用。试编一个程序, 将内存 STRING 为首地址的字符串在打印机上打印出来(字符串以 ASCII 0为结束标志)。 3.某计算机端口地址600H的是 8位寄存器,其位06分别控制数码管显示中各段D0 D6的亮( 1)和灭( 0),七段数码管的各段编号为:00h 01h 02h 03h 04h 05h 06h 07h 08h 09h目前系统时间的“ 秒数 ” 字段预约警铃时间的“ 秒数 ” 字段目前系统时间的“ 分钟 ” 字段预约警铃时间的“ 分钟 ” 字段目前系统时间的“ 小时 ” 字段预约警铃时间的“ 小时 ” 字段星期几(星期一01 ,星期二 02,依次类推)目前系统日期字段(031)目前系统月份字段(012)系统公元纪年的后两位(0099;00 2000 , 012001 ,以此类推)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - D0 D6 D3 试编写一个过程,将AL保存的一位 10进制数以数码管显示出来(如AL的值为 3,则 D0、D1 、D2 、 D3、D6 亮, D4、D5灭)。4.编写一个程序,新建一个文件:d:abc.txt,从键盘输入文件的内容(不超过100个字符)。然后新建一个文件:d:def.txt,将 d:abc.txt文件的内容复制到d:def.txt。5.在 D盘根目录建立一个文件abc.txt,第 1次向文件中写入“123456”六个字符,第2次增加“ abcdefg”几个字符。6.从键盘上输入文本文件:” d:temp1.txt ” 的内容, 然后新建一个文件d:temp2.txt, 把文件d:temp1.txt 中的所有内容复制到文件:temp2.ini 中。7.将内存单元 0A00H:0000 开始的 32KB 内存保存到文件A32K.BIN 中。8.从键盘上输入 10个人名,然后把它们按照升序的顺序排序。五、子程序类 1.写一段子程序SKIPLINES,完成输出空行的功能。空行的行数由用户在主程序中通过键盘输入,并将行数放在AX寄存器中。 2.设有 10 个学生的成绩分别是76,69,84,90,73,88,99,63,100 和 80 分。试编制一个子程序统计60-69 分, 70-79 分, 80-89 分, 90-99 分和 100 分的人数,并分别放到S6,S7,S8,S9 和 S10单元中。3. 编写子程序嵌套结构的程序,把整数分别用二进制和八进制形式显示出来。 4.主程序 BANDO: 把整数字变量VAL1存入堆栈,并调用子程序PAIRS ;子程序 PAIRS:从堆栈中取出VAL1, 调用二进制显示程序OUTBIN显示出与其等效的二进制数,输出 8 个空格;调用八进制显示程序OUTOCT 显示出与其等效的八进制数,调用输出回车及换行符的子程序。5.主程序 MAIN 和过程 PROADD 在同一源文件中,要求分别使用变量名、地址表、堆栈传送参数的方法,用过程PROADD 累加数组中的所有元素,并把和(不考虑溢出的可能性)送到指定的存储单元SUM中去。6.从键盘上取得一个十进制数,然后把该数用十六进制的形式显示出来。要求子程序用寄存器参数传送的方法。7.使用跳跃表法,根据AL 寄存器中哪一位位1(从低位到高位)把程序转移到8个不同的子程序分支去。子程序0-7分别显示数字0-7。7.在数据区中有 10个不同的信息,编号为0-9,每个信息包括30个字符。现在要求编制一个程序:从键盘上接收0-9之间的一个编号,然后在屏幕上显示出相应的信息内容。六、综合类 1.根据欧几里德辗转相除法求两个正整数M 、N的最大公约数 R。 2.简化的歌德巴赫猜想:任何一个大于6的偶数均可以表示为两个素数之和。现从键盘输入一个 0 65535之间的无符号整数,试验证歌德巴赫猜想。D5 D4 D1 D2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 如输入数 12,输出: 12=5+7 如输入数 20, 输出: 20=3+17 20=7+13 如输入数 7, 输出:Must be even如输入数 3, 输出:Must be greater than or equal to 6 3.用减奇数次数的方法,求一个数的近似平方根,这个平方根是一个整数。如求 17的平方根,可以用 17相继减去奇数1、3、5、7、, ,当结果为负数时停止,即: 17-1-3-5-7-90 可以看出, 17 在减去 5 次奇数后结果变为负数,可以近似认为17 的平方根在4 与 5 之间,计算 NUM 的平方根,如果NUM=17 ,则 ANS中保存结果4。 4.以下面形式定义一个长整数,其所占用字节数由N 得到,比如128 位的数5746352413DE89674523BC9A78563412H 定义成: NUM DB 12H,34H,56H,78H,9AH,0BCH,23H,45H DB 67H,89H,0DEH,13H,24H,35H,46H,57H N DB $-NUM 试编写一个程序,实现对N字节的 NUM 的值求补,并把求补后的值仍保存在NUM 中。 5.根据中华人民共和国国家标准GB 11643-1999 中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为: 六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码的奇数分给男性, 偶数分给女性。 校验码是根据前面十七位数字码,按照 ISO 7064:1983.MOD 11-2 校验码计算出来的检验码。下面介绍计算校验码的算法: 先引入公式: ( 右边最低位为第1 位,左边最高位为第18 位) 有了 Wi 值表后, 可以简化 S的计算过程, 得出 S后计算余数Y,Y的计算公式为: Y = mod(S, 11) ,再根据下表找出 Y 对应的校验码即为要求身份证号码的校验码C。编写一个程序, 完成从键盘上输入一个17 位的身份证号 (身份证号的前17 位,即上面描述中的第18 位至第 2 位),通过计算补充第1 位后,将完整的身份证号显示出来。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -