汇编实验七子程序设计_第1页
汇编实验七子程序设计_第2页
汇编实验七子程序设计_第3页
汇编实验七子程序设计_第4页
汇编实验七子程序设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、实 验 报 告 学年 第 学期实 验 课 程汇编语言学 生 姓 名123实 验 项 目子程序设计学 院计算机科学技术实 验 性 质专业选修课 班 级 学 号实 验 地 点同 组 人 数1第 组实 验 日 期第 周 星期 第 节成 绩4环 境 参 数Dosbox-0.74Masm 5.01、 实验目的及要求2、 实验原理、实验内容3、 实验仪器设备及材料4、 操作方法与实验步骤5、 实验数据记录及处理6、 实验结果分析及讨论一、实验目的: 1掌握子程序设计方法。2掌握调用程序与子程序间参数传递的几种方法。二、实验任务1编制一个子程序把一个十六位二进制数用十六进制形式在屏幕上显示出来,采用堆栈方法

2、传递这个二进制数,并用一个主程序验证它。源代码:DATA SEGMENTDATA ENDSSTACK SEGMENT STACKDB 256 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX, DATAMOV DS, AXMOV AX, STACKMOV SS, AXMOV DX,10100B ;对应十六进制为:1234HPUSH DX ;入栈CALL DISP;调用子程序ADD SP,2;平衡堆栈MOV AX,4C00HINT 21HDISPPROCPUSH BPMOV BP,SP ;用bp指示数

3、据地址PUSHFPUSH AXPUSH BXPUSH CXPUSH DX ;以上保护现场MOV BL,2;字节控制 循环两次MOV CL,4 ;移动4位 LOP:MOV DL,SS:BP+5SHR DL,CL CMP DL,0AH JCJ1ADDDL,7H J1: ADD DL,30H MOVAH,2 INT21H MOV DL,SS:BP+5ANDDL,B CMPDL,0AHJCJ2 ADDDL,7H J2: ADDDL,30H MOVAH,2 INT21H DEC BP DECBL JNZLOP POP DXPOP CXPOP BXPOP AXPOPFPOP BP;恢复现场RETDISPE

4、NDPCODE ENDSEND START流程图:编译连接MS-DOS下运行:本实验是如何利用DEBUG进行调试的:用debug命令打开.exe程序,使用t命令执行,主要检查地址是否取对,尤其再用堆栈传递参数时,取参数时的偏移地址增量。说明用堆栈传送参数的过程及其具体方法:1、将数据存入dx中,在调用子程序前压入栈顶。 PUSH DX2、调用子程序,先将bp压入栈顶,再将sp值赋给bp。PUSH BP MOV BP,SP3、计算参数的偏移地址,取出数据并存入dl中。 MOV DL,SS:BP+52设有一个数组存放学生的成绩(0100),编制一个子程序统计059分,6069分, 7079分, 8

5、089分,90100分的人数,并分别存放到scoreE, scoreD, scoreC, scoreB, scoreA单元中,编写一个主程序与之配合使用。源代码:DATA SEGMENTscore db 70,86,99,45,60,98,99,99,99,99,99,99,99,99,99,99,99,99,99;全班成绩数组count dw 19;总人数gradeN db 0,0,0,0,0; 对应成绩等级为A B C D EDATA ENDSSTACK SEGMENT STACKdb 256 dup(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:D

6、ATA,SS:STACKSTART:mov ax,DATAmov ds,axmov ax,STACKmov ss,axmov bx,offset scoremov cx,countagain:;调用子程序grade统计各个等级的人数mov al,bxcall gradeinc bxloop againmov bx,0mov cx,5show:;调用子程序disp将各个等级人数打印出来,考虑了人数为两位数的情况mov al,bx+gradeNcall dispinc bxloop show;结束mov ax,4c00hint 21hgrade procpush cxpush axpushfcmp

7、 al,60jae next0inc gradeN+4jmp next4next0:cmp al,70jae next1;不小于inc gradeN+3jmp next4next1:cmp al,80jae next2inc gradeN+2jmp next4next2:cmp al,90jae next3inc gradeN+1jmp next4next3: inc gradeNnext4:popfpop axpop cxretgrade endpdisp procpush cxpush bxpushf;显示功能,因为最多只有两位数,使用一次除法即可AND AH,0;商为十位,余数为个位MO

8、V CL,10dDIV CLMOV DH,AHCMP AL,0JZ DISP_CMOV DL,AL;商为0时,跳过不执行 十位add dl,30hMOV AH,02HINT 21HDISP_C:MOV DL,DH;个位add dl,30hMOV AH,02HINT 21HMOV AH,02HMOV DL,20HINT 21Hpopfpop bxpop cxretdisp endpCODE ENDSEND START 流程图:编译连接:MS-DOS下运行:本实验是如何利用DEBUG进行调试的:同样用debug命令载入.exe程序,用t命令执行,主要观察取数是否正常,比较后能否落入正确的成绩等级内。说明用堆栈传送参数的过程及其具体方法:这个程序用的是寄存器传值,需要注意保护所使用的寄存器中参数值。三、小结1.学会了怎么调用子程序。2.学会了使用堆栈和寄存器传递参数。3.在用堆栈传递参数时,参数的偏移地址不正确,调试两次后,确定了正确的偏移地址。4.做任务二时,没有考虑到人数是两位数的情况,

温馨提示

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

评论

0/150

提交评论