




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
明德至善 博学笃行实验课程名称 微机原理实验 实验项目名称 分支程序实验一 实验指导老师 学 生 姓 名 学 院 理学院 专 业 电子信息科学与技术 年 级 2008级(一)班 学 号 实 验 时 间 2010年11月19日 总 成 绩教师签名 1. 实验目的 掌握主程序与子程序之间的调用关系及其条用方法。 掌握子程序调用过程中进程调用与远程调用的区别。 掌握通过堆栈传送参数的方法。2. 实验内容 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,并在屏幕是显示出来。要求码型转换通过子程序HEXASC实现。在转换过程中,通过子程序DISP实现显示。 编写一个主程序,从键盘接受若干个字符,然后用远调用的方法,调用子程序统计该字符串中字符“b”的个数。子程序的参数是字符串的首地址TABLE、字符长度N及字符“b”。子程序返回字符“b”的个数。参数传送采用堆栈实现。主程序在子程序返回后,显示字符“b”及其个数(设为十六进制数)。3. 实验说明 第一个实验程序用子程序的进程调用实现。由于在调用HEXASC子程序时,子程序又调用DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到有个子程序的返回地址值。由于是进调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS的值是不变的。 第二个程序是利用元调用的方法调用子程序的。在远调用请款下,主程序与子程序处在不不同的逻辑代码中,可在子程序执行中查看CS的值,他与主程序中的CS值是不同的。子程序调用后,堆栈中保留了返回地址的daunting地址及段内偏移量。 第二个程序中,主程序与子程序之间参数的传递是由堆栈实现的。一段时将参数(此处是串首地址TABLE,串长度N及待通井机的字符“b”)顺序压入堆栈,在子程序调用后,通过BP指针对对战中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。4. 实验准备 预习子程序设计的方法,根据实验内容要求,画出主程序及子程序的流程图。 熟悉键盘字符串及用堆栈传送参数的程序段编程方法。5. 验步骤 编写、汇编和连接两个源程序,生成相应的可执行文件.EXE 用DEBUG的R命令、T命令或G命令和D 命令检查远程调用及进程调用时堆栈的变化。特别是通过堆栈传送的参数和子程序取出的参数是返回返回参数的详细过程。 检查程序执行的结果是否正确。 二进制转换实验源程序清单:;CONV.ASMDATESEGMENTBUF DB 0ABCH,0CDH,0DEH,01H,02H DB 03H,3AH,4BH,5CH,6FHDATEENDSCODE SEGMENTASSUME CS:CODE,DS:DATESTART:MOV AX, DATE MOV DS, AX MOV CX, 10 ;设置计数值 LEA BX, BUF ;取数据串的有效地址AGAIN:MOV AL, BX CALL HEXASC INC BX LOOP AGAIN MOV AH, 4CH INT 21HHEXASCPROC NEAR ;转换字程序MOV DL, ALPUSH CXMOV CL, 4SHR DL, CLPOP CXCALL DISPMOV DL, BXADN DL, OFHCALL DISPRETHEXASCENDPDISPPROC;显示子程序CMP DL, 9JBE NEXTADD DL, 7INT 21HRETDISPENDPCODEENDSEND STERT反汇编指令分析程序汇编结果:运行程序 单步执行查看程序调用情况:取数据段的段地址送入DS寄存器。DS=110F.取数据的偏移地址送入BX BX=0000取是个元素中的第一个数据送入AX,AL=AB调用子程序 入口参数为AX,子程序的调用为段内直接调用,所以只把SP减1(单字节),保护现场。把AL的值送入DL,并对元素个数计数值CX压栈保护DL右移四位,取AL中的高位数据。DL=AH。字程序嵌套调用(显示AL中的高位数据),入口参数为DL,入口地址为 002C调用DOS 2好功能 显示DL中的值。 统计字符个数程序;COUNTER.ASMDATASEGMENTCHARDB bMASGEDBPLEASE INPUT STRINGS: $RESULTDBTHE STATISTIC CHARACTERS IS: $BUFDB 50H,?,50H DUP(?)CR DB 0DH,0AH,$DATAENDSMCODESEGMENTASSUME CS:MCODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,MASGEMOV AH, 9HINT 21HLEA DX,BUFMOV AH,0AHINT 21HMOV DX,OFFSET CRMOV AH,9INT 21HLEA SI,BUFMOV CL, SI+1MOV CH,0INC SIINC SI MOV AL,CHARMOV AH,0 PUSH SI;利用堆栈传递参数PUSH CXPUSH AX CALL FAR PTR CHECK;远调用MOV DL,CHARMOV AH,2INT 21HMOV DX,OFFSET CRMOV AH,9INT 21HPOP AXMOV DL,ALAND DL,0FHCMP DL,9JBE NEXTADD DL,7NEXT:PUSH DXLEA DX, RESULTMOV AH, 9INT 21HPOP DXADD DL,30HMOV AH,2INT 21H ;显示统计个数MOV AH,4CHINT 21HMCODEENDSSCODESEGMENTASSUME CS:SCODECHECK PROC FARPUSH BPMOV BP,SPMOV SI,BP+10MOV CX,BP+8MOV AX,BP+6XOR AH,AHAGAIN:CMP AL,SIJNE NEXT1INC AHNEXT1:INC SI ;指向下一字符LOOP AGAINMOV AL,AHMOV BP+10,AXPOP BPRET 4CHECKENDPSCODE ENDSEND START源程序清单:程序运行结果:主程序在第一次调用子程序CHECK时,由于是段间转移,所以段基址会改变,同时把CS和IP压栈保护SP减4。如下图所示:5.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年离婚协议起草与执行全程法律援助合同
- 2025年印刷物流合同:一站式包装印刷及配送服务协议
- 2025年医院食堂智能化升级改造及运营维护合同
- 2025年度大气污染治理技术引进及合同谈判策略
- 2025年智能厕所无障碍改造与运营管理合同
- 2025年智能家居小工程定制安装分包合同范本
- 2025年电子商务平台运营与数据分析服务合同
- 2025年企业专利技术保护及市场风险预警服务合同
- 2025城市公园夜间保洁员劳动合同
- 2025年夜间商业街区专用车位租赁及物业管理服务合同
- 公司领导财务知识培训课件
- 2025年郑州银行招聘考试(行政能力测验)历年参考题库含答案详解(5套)
- 园艺生物技术应用与发展
- 子痫患者护理查房
- 2025上海市八年级升九年级数学暑假提升讲义:相似三角形压轴题(六大题型)原卷版
- 2025年工业互联网工程技术人员考核试题题库及答案
- 农行OCRM系统讲解
- 医疗护理员职业技能竞赛试题及答案
- 2025年高端美食主题餐厅餐饮服务整体外包合同
- 体育课培训课件
- 工贸安全员考试题库及答案大全
评论
0/150
提交评论