分支程序设计及编译.doc_第1页
分支程序设计及编译.doc_第2页
分支程序设计及编译.doc_第3页
分支程序设计及编译.doc_第4页
分支程序设计及编译.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

昆明理工大学信息工程与自动化学院学生实验报告( 2011 2012学年第一学期 )课程名称:微型计算机原理与应用 开课实验室:信自楼111 2011年 11月24日年级、专业、班生医091班学号姓名成绩实验项目名称分支程序设计及编译指导教师韩晓东教师评语 教师签名: 2011年11月 日一、实验目的 1) 掌握分支程序的结构。 2) 掌握分支程序的设计,调试方法。 3) 掌握汇编程序的编译、连接、调试方法。二、实验内容 1) 编写计算下列函数的程序,并在屏幕上显示结果。 1 X0 Y0Z= -1 X0 Y0 0 X 、Y异号2) 由键盘输入03类型号,程序根据进行四类处理,编写程序并调试(用A、B、C、D显示处理结果)。 三、实验准备 1) 阅读教材中有关分支程序的内容。 2) 按要求编写程序。 四、实验设备 PC机一台 5、 实验步骤 1) 输入源程序。 stacksegment stack ;定义堆栈段 dw 512 dup(?) ;堆栈段有512字(1024字节)空间stackends ;堆栈段结束datasegment ;定义数据段X DB -5 ;X赋值 -5 Y DB 20 ;Y赋值20Z DB ? ;Z赋值待定dataends ;数据段结束codesegment code ;定义代码段begin proc far ;定义一个过程 assume cs:code,ds:data,ss:stack ;伪指令assume将段寄存器与段间的关系告诉汇编程序 push ds ; 将ds压入栈顶 sub ax,ax ;为通过过程返回DOS作准备 push ax ;将ax压入栈顶 mov ax, data ;建立DS段地址 mov ds, ax ;将数据段的地址送ds MOV AL,X ;把X放到AL中 XOR AL,Y ;根据X、Y的符号置S标志,相同为0 JS DIFF ;相异为1,X、Y相异则跳转到DIFF MOV Z,1 ;Z赋1 CMP X,0 ;相同后,判断其中某数的符号 JNS NOCHA ;大于等于0,则执行NOCHA NEG Z ;小于0,求补得-1 MOV AH,2 ; 2号功能调用,显示器显示“-1” MOV DL,- INT 21H NOCHA: MOV AH,2 ;2号功能调用,显示器显示“1” MOV DL,1 INT 21H RET ;返回DIFF: MOV Z,0 ;2号功能调用,显示器显示“0” MOV AH,2 MOV DL,0 INT 21H Ret ;返回begin endp ;过程段结束codeends ;代码段结束 end begin ;汇编结束,同时指明程序起始点汇编、连接程序,生成 .EXE文件,执行文件检查结果。改变程序中X和Y 的值运行程序,观察运行结果是否与实验要求一致。当X0,Y0,0,Y0时(程序中取X=5,Y=20)分析上面的运行结果可知 X 、Y异号则Z赋0后结束;X0 , Y0则Z赋1后结束;X0 , Y0则Z赋-1后结束。满足实验要求。2) 输入源程序。stacksegment stack ;定义堆栈段 dw 512 dup(?) ;堆栈段有512字(1024字节)空间stackends ;堆栈段结束datasegment ;定义数据段INPUT DB INPUT(0-3),$ ;定义字符串INPUTdataends ;数据段结束codesegment code ;定义代码段begin proc far ;定义一个过程 assume cs:code,ds:data,ss:stack ;伪指令assume将段寄存器与段间的对应关系告诉汇编程序 push ds ; sub ax,ax ;为通过过程返回DOS作准备 push ax ; mov ax, data ;建立DS段地址 mov ds, axAGAIN: CALL LF ;调用子程序LF MOV DX,OFFSET INPUT ; 9号功能调用,显示字符串“INPUT(0-3)” MOV AH,9 INT 21H MOV AH,1 ;1号功能调用,键入并显示一个字符(键入字符的ASC码读入AL) INT 21H CMP AL,0 ;把AL和0作比较 JE P0 ;AL等于0, 转移到 P0 CMP AL,1 ;把AL和1作比较 JE P1 ;AL等于1, 转移到 P1 CMP AL,2 ;把AL和2作比较 JE P2 ;AL等于2, 转移到 P2 CMP AL,3 ;把AL和3作比较 JE P3 ;AL等于3, 转移到 P3 RET ;返回P0: CALL LF ;调用子程序LF MOV AH,2 ;调用2号功能,显示器显示“A” MOV DL,A INT 21H JMP AGAIN ;无条件转移到AGAINP1: CALL LF ;调用子程序LF MOV AH,2 ;调用2号功能,显示器显示“B” MOV DL,B INT 21H JMP AGAIN ;无条件转移到AGAINP2: CALL LF ;调用子程序LF MOV AH,2 ;调用2号功能,显示器显示“C” MOV DL,C INT 21H JMP AGAIN ;无条件转移到AGAIN P3: CALL LF ;调用子程序LF MOV AH,2 ;调用2号功能,显示器显示“D” MOV DL,D INT 21H JMP AGAIN ;无条件转移到AGAIN LF PROC ;定义过程LF MOV DL,0AH ;2号功能调用,换行 MOV AH,2 INT 21H MOV DL,0DH ;2号功能调用,回车 MOV AH,2 INT 21H RET ;返回LF ENDP ;过程LF结束begin endp ;过程段结束codeends ;代码段结束 end begin ;汇编结束,同时指明程序起始点汇编、连接程序,生成 .EXE文件,执行文件检查结果。运行该程序,由键盘输入03类型号时,输入0、1、2、3时,则相应输出A、B、C、D。若键入03以外的键,则退出该程序。运行该程序,当我从键盘输入0,2,3,1时会分别输出A,C,D,B与之对应:而当我的输入不是0,1,2,3中的任意一个时,则不能输出,而是输出语句“press any key to continue”:此时按任意键则从新运行该程序。6、 所涉及的分支指令应用到的标志位的意义。 答:把不同的处理方法编制成各自的程序处理段,运行时由机器根据不同的条件自动做出选择判别,绕过某些指令,仅执行相应的处理程序段。按这种方式编制的程序,执行的顺序与指令存储的顺序失去了完全的一致性,称之为分支程序。分支程序是机器利用改变标志位的指令和转移指令来实现的。本实验利用比较转移指令实现分支和利用转移表实现分支。该实验涉及了无条件转移指令JMP,将控制转向其后的目的标号指定的地址;JS,负转移,SF=1;JNS,正转移,SF=0;JE 相等转移,ZF=1。对每个分支程序,一定要给出标号,以决定分支后的转移地址。 7、 心得体会 实验结束了,学到了很多,对分支程序设计的结构,分支程序的设计,调试方法都有了充分的认识。这次实验我们采用转移表法多分支程序设计,转移表法又称分支表方法,转移表方法实现多分支的设计思路如下:把转移各分支程序段的转移指令依次存放在一张表中,这张表称为转移表。各分支转移指令在表中的位置,即离表首地址的位移量作为条件。当进行多分支条件判断时,把当前条件的偏移量加上表首地址作为转移地址,转移到表的相应位置,继续执行无条件转移指令,达到多分支目的。同时我也掌握汇编程序的编译、连接、调试方法。这次的实验相对较简单,没有犯多少错误就完成了实验,但是这并意味着不用动脑筋。在读程序的时候还是花了我不少的时间,由于对课本知识的不了解和对实践的缺乏使得我对程序不是很了解,在老师和同学的帮助下,我终于顺利的完成了实验。做完实验,感慨很多,首先是看到了自己

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论