【实验目的】
掌握分支程序的基本编程方法。熟悉进制转换。用LOOP指令、条件转移指令和向量地址法实现程序转移。
【实验内容】
【1】编写程序,如果输入的是大写字母,则输出对应的小写字母;如果输入的是小写字母,则输出对应的是大写字母;如果输入的是数字,原样输出;按回车结束。
【2】分离字数组ARRAY中的正、负数,把其中的正数复制到PDATA数组;负数复制到NDATA数组,并分别统计正、负数个数。
【3】在数据段定义分支地址表,通过键盘输入数字1~8,实现转移。要求:
(1)分支表定义如下:PTABLE DW P1,P2,P3,P4,P5,P6,P7,P8
(2)P1~P8为标号,如果键盘输入数字3,则从分支地址表中取出P3的地址,实现间接转移。标号处的指令只是显示一个信息。
【实验过程】
【实验1】思路:
读入字符串并存放到缓冲区。循环处理字符串中的每个字符直到遇到回车结束。不考虑非法输入,对于每个字符:如果小于41h说明为数字,直接跳到输出;如果大于41h但小于4ah说明为小写字母,将其ASCII码加20h转为大写字母;否则说明为大写字母,将其ASCII码减20h转为小写。最后输出转换后的字符串即可.注意用0ah功能读入字符串,在dx+2处开始存放第一个字符。
缓冲区定义如下:
程序主体如下:
运行测试。假设输入的串为IloveAHU2023
输入后运行结果: (输入回车后会覆盖输入串,所以分开截图)
【实验2】数据段定义如下,定义了array,pdata,ndata和正/负数计数器:
程序主体部分如下:用LOOP检测array中的每个数的正负性,对正数和负数分别进行处理(放到对应的数组并累计个数)
使用debug查看运行结果。根据debug查看和内存存放的相关知识,可知array,pdata,ndata,cpos,cneg分别位于DS:0000,DS:0010,DS:0020,DS:0030,DS:0032
使用debug运行程序并查看DS段的值:
可以看到pdata数组(DS:0010起始)存放了所有的正数,ndata数组(DS:0020起始)存放了所有的负数,正数和负数的个数分别为5和3.
【实验3】(略去定义部分)由于PTABLE是字数组,所以读入数字*2对应下标
如上,数字对应的标号执行的内容为将数字对应的大写字母存放在DL里,并跳转到ed输出。
运行程序,符合预期结果。(第一个字符为输入,第二个字符为输出)。