1、实验报告格式微机原理实验报告实验名称: 分支结构程序设计 班 级: CDIO 学 号: 111145115 姓 名: 卢高林 指导老师: 李珍香 2012年 11 月 17 日实验报告要求1.实验要求(1)预习条件转移指令和无条件转移指令(2)熟悉分支程序员设计的方法2.实验目的1,熟悉运算指令对标志位的状态影响以及标致位的表示方法2,掌握条件专一,无条件转移指令的使用方法3,掌握分支结构3.程序说明:(1)说明程序基本结构,包括程序中各部分的功能。(2)说明入口参数与出口参数,各种参数输入与输出的方式。(3)说明程序中各部分所用的算法和编程技巧。(4)说明主要符号和所用到寄存器的功能。4.上
2、机调试说明(1)上机调试步骤。(2)上机调试过程中遇到的问题是如何解决的。(3)对调试源程序的中间结果和最终结果进行分析。5.写出源程序清单及执行结果。(1),编写程序面试线将大写字母字符串转换成小写字符串data segmentstring db I am a Student$ ;定义字符串data endscode segment ;定义代码段 assume cs:code,ds:datastart: mov ax,data mov ds,ax mov bx,0 ;清零next: mov al,string+bx cmp al,$ jz over ;判断结束 cmp al,A jb exi
3、t cmp al,Z ;判断是否是大写字母 ja exit add al,20h ;是则转换成小写字母exit: mov dl,al ;调用2号功能 mov ah,02h int 21h inc bx jmp nextover: mov ah,4ch ;返回系统 int 21h code ends end start程序调试过程:(1)将程序一个分支命名为out,通过查找资料发现out是汇编语言中已经运用的符号,所以我改为over(2)起初的寻址写的是inc string 。mov al,string 来实现指针下移,汇编连接没有错误,但是运行结果是乱码,通过查找资料发现,inc指令是一个任意
4、的8或16位的通用寄存器或存储单元,但不能是立即数,而变量名string表示从段的起始地址到定义变量额地址间的字节数,所以寻址方式不对,改为Inc bx .mov al,string+bx程序运行结果显示(2)在内存中定义三个16位数,判断这三个数是否相等。显示相应提示。data segmentbuf db 50,50,50 ;定义字符串str1 db all equall$ str2 db only two equall$ str3 db all three different from each other$ data endscode segment sssume ds:data,cs:
5、codeStart:mov ax,data mov dx,ax xor dx,dx mov al,buf ;将第一个数放在AL中 cmp al,buf+1 ;第一个数个第二个数比较 jz case2 ;相等,则转向case2 cmp al,buf+2 ;不等,则与第三个数比较 jz case1 mov al,buf+1 ;第二个数转到AL cmp al,buf+2 ;第二个数与第三个数比较 jz case1 mov dx, offset str3 ;调用9号功能输出字符串 mov ah,09h int 21h jmp exitcase1:mov dx,offset str2 mov ah,09
6、h int 21h jmp exitcase2:cmp al,buf+1 jnz case1 mov dx, offset str1 mov ah,09h int 21hexit: mov ah,4ch ;返回系统 int 21hcode ends end start程序调试过程:起初误使用了2号功能输出,查找资料发现2号功能是单字符输出,入口参数DL=要输出的字符串或其SACLL码值改用9号功能后结束语句中end start中end多加了s导致出错,改后运行通过程序运行结果:(3)从键盘输入,判断是大写,小写,数字,还是其他,显示相应的提示data segmentstr1 db this i
7、s an upper letter$ ;定义4个字符串str2 db this is a lowercase letter$ str3 db this is a figure$ str4 db this is an other letter $data endscode segment ;定义代码段 assume cs:code,ds:datastart:mov ax,data mov ds,ax mov ah,1 int 21h cmp al,0 ;判断是否是数字 jb case1 cmp al,9 jb case2 cmp al,A ;判断是否是大写字母 jb case1 cmp al,Z
8、 jb case3 cmp al,a ;判断是否是先写字母 jb case1 cmp al,z jb case4 ;都不是则归为其他 jmp case1case1:mov dx, offset str4 ;输出相应的字符串内容 mov ah,9 int 21hcase2:mov dx,offset str3 mov ah,9 int 21h case3:mov ax,offset str1 mov ah,9 int 21hcase4:mov dx,offset str2 mov ah,9 int 21h mov ah,4ch ;返回系统 int 21hcode ends end start 程序调试过程:混淆2号功能和9号功能入口参数的设置了。2号功能是是DL=要输出的字符,9号功能是DX=指向字符串首地址,改正后运行通过起初定义字符串时候末尾没有加上$,程序编译通过,但是运行结果是:经过查找资料,明白了数据存储的规律,同时明白了为什么字符串定义结尾必须加上结束标志$程序运行结果:6.心得体会(1)输入程序的时候要仔细,输入完毕后再检查,谨防无意中程序输入错误而浪费时间(2)目前对部分伪指令的使用规则不太熟悉,有混淆的现象,这个问题需要自己多练多记多下功夫解决(3)学会了借助DEBUG来分析检查错误(4)学会了部分DOS系统指令功能的调用,达到了实验目的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1