




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.5 宏指令及子程序设计实验2.5.1 实验目的1、 熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法。2、 掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。3、了解宏指令与子程序的异同以及各自的适用场合。2.5.2 实验预习要求1、 复习宏指令的定义与调用方法。2、 复习过子程序的定义与调用方法。3、 根据“2.5.3 实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。4、 从“2.5.4 实验习题”中任选一道题目,编写源程序,以便上机调试。2.5.3 实验内容从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在屏幕上显示出来。要求: 在屏幕上显示字符串提示信息的功能由宏指令DSTRING实现; 将键盘输入的十进制数转换成二进制数由子程序DTOB实现; 在N个无符号字节型二进制数中找出最大数的功能由子程序FMAX实现; 将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的功能由子程序BTOAD实现。程序运行结果如右图所示。1、 编程指导(1) 显示提示信息的宏指令DSTRING的编写宏指令通常用于在程序中需要反复使用但所需指令条数又不是很多的情形;而对于需要经常使用且需要较多指令才能完成的功能通常通过子程序调用来实现。这是因为,从执行速度上看,由于子程序调用涉及到保护断点的操作,因此,子程序调用比宏调用执行时间相对要稍长一些;但从生成的可执行文件的大小方面考虑,子程序调用生成的文件要小一些。读者在进行汇编语言程序设计时,应综合考虑两者的利弊,以便进行合理选择。下面给出实现提示信息显示的宏指令的定义:DSTRINGMACROSTRING PUSHDX PUSH AX MOV DX,OFFSET STRING MOV AH,09H INT 21H POP AX POP DX ENDM 请读者注意,宏指令应该先定义,后调用。因此,宏定义通常紧跟在代码段中段寄存器赋值指令之后给出。(2) 将键盘输入的十进制数转换为二进制数的子程序DTOB的编写 子程序的定义方法请参阅教材“5.6.4 子程序设计”一节。将十进制数转换为二进制数的程序代码请参阅本书“2.4.3 实验内容”中“编程指导”部分。(3) 在N个无符号字节型二进制数中找出最大数的子程序FMAX的编写请参阅教材“5.6.3 循环程序设计”一节例5.12。(4) 将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的子程序BTOAD的编写程序代码请参阅本书“2.4.3 实验内容”中“编程指导”部分。2、 程序框架COUNT EQU10DATASEGMENT NUMDB 10 DUP(?) IBUF DB 7,0,6 DUP(?)OBUFDB 6 DUP(?) INFOR1 DB Please input 10 numbers:,0AH,0DH,$ INFOR2 DB The max found in the 10 numbers is $ INFOR3 DB 0AH,0DH,$DATA ENDSSTACK SEGMENT stack DATA2 DW 40 DUP(?) TOP EQU LENGTH DATA2STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKstart: MOVAX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP定义显示字符串信息的宏指令DSTRING MOV SP,AX DSTRING INFOR1 MOV BX,OFFSET NUM MOV CX,COUNTLOOP1: CALL DTOB DSTRING INFOR3 MOV BX,AL INC BX LOOP LOOP1 MOV AX,OFFSET NUM PUSH AX;通过堆栈向子程序传递参数(数据个数及数据在数据段内的偏移地址) MOV CX,COUNT PUSH CX CALL FMAX DSTRING INFOR2 CALL BTOAD MOV AH,4CH定义将键盘输入的十进制数转换为二进制数的子程序DTOB INT 21H定义将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的子程序BTOAD定义在N个无符号字节型二进制数中找出最大数的子程序FMAX CODE ENDS ENDstart 2.5.4 实验习题1、 从键盘输入N个十进制数,求它们的和(累加和要求不大于65535),并将累加结果在屏幕上显示出来。要求给出必要的提示信息(用宏调用完成);累加功能由子程序调用实现;二进制数形式的累加和转换为十进制数并显示由子程序调用实现。2、 计算1+2+3+N。要求N由键盘输入;给出必要的提示信息(由宏调用实现);累加功能由子程序调用实现;二进制数(累加和)转换为十进制数并显示由子程序调用实现。3、 编写在屏幕上顺序显示A B C Z的程序。要求两字符之间有一定的时间延迟,通过调用宏指令实现;延迟时间常数由键盘输入;将键盘输入的十进制数形式的延迟时间常数转换为二进制数由子程序实现。2.5.5 实验报告要求1、 补全“2.5.3 实验内容”中源程序框架内未写出的程序代码,并说明你在调试该程序过程中遇到了哪些问题,是如何处理的?若允许输入大于255小于65536的十进制数,程序应如何修改?COUNT EQU 10DATA SEGMENT NUM DB 10 DUP(?) IBUF DB 7,0,6 DUP(?) OBUF DB 6 DUP(?) INFOR1 DB Please input 10 numbers:,0AH,0DH,$ INFOR2 DB The max found in the 10 numbers is $ INFOR3 DB 0AH,0DH,$DATA ENDSSTACK SEGMENT stack DATA2 DW 40 DUP(?) TOP EQU LENGTH DATA2STACKENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOVAX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AXDSTRINGMACROSTRING PUSHDX PUSHAX MOV DX ,OFFSET STRING MOV AH,09H INT 21H POP AX POP DX ENDM DSTRING INFOR1 MOV BX,OFFSET NUM MOV CX,COUNTLOOP1: CALLDTOB DSTRING INFOR3 MOV BX,AL INC BX LOOP LOOP1 MOV AX,OFFSET NUM PUSH AX MOV CX,COUNT PUSH CX CALL FMAX DSTRING INFOR2 CALL BTOAD MOV AH,4CH INT 21HDTOBPROC PUSHCX PUSHDX PUSHSI MOV DX, OFFSET IBUF MOV AH, 0AH INT 21H MOV CL, IBUF+1 MOV CH, 0 MOV SI, OFFSET IBUF+2 MOV AX, 0AGAIN: MOVDX, 10 MUL DX AND BYTE PTR SI, 0FH ADD AL, SI ADC AH, 0 INC SI LOOP AGAIN POP SI POP DX POP CX RETDTOBENDPFMAXPROC PUSHCX PUSHSI MOVAL,NUM MOVSI,OFFSET NUM MOVCX,9LOOP2: INC SI CMPAL, SI JAELOOP3 XCHGAL,SILOOP3: DEC CX JNZLOOP2 MOVAH,0 POPSI POPCX RETFMAXENDPBTOADPROC PUSHBX PUSHCX PUSHDX MOV BX, OFFSET OBUF+5 MOV BYTE PTR BX,$ MOV CX, 10LOOP4:MOV DX, 0 DIV CX ADD DL, 30H DEC BX MOV BX, DL XOR AX, 0 JNZ LOOP4 MOV DX, BX MOV AH, 09H INT 21H POPBX POPCX POPDXBTOAD ENDPCODE ENDS END START 2、 从“2.5.4 实验习题”中任选一道题目,画出流程图,编写源程序,并说明在调试过程中遇到了哪些问题,是如何处理的。计算1+2+3+N。要求N由键盘输入;给出必要的提示信息(由宏调用实现);累加功能由子程序调用实现;二进制数(累加和)转换为十进制数并显示由子程序调用实现。STACKSEGMENT STACK DB 100 DUP(?)STACKENDSDATA SEGMENT INF1 DB Please input a number N(0-627): $ IBUFDB 7,0,6 DUP(?) OBUF DB 6 DUP(?) INF2 DB 0AH,0DH,$DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOVDS,AXDSTRING MACRO STRING PUSHDX PUSH AX MOV DX,OFFSET STRING MOV AH,09H INT 21H POP AX POP DX ENDM DSTRING INF1 CALL DTOB CALLADDN CALL BTOAD MOV AH,4CH INT 21HDTOBPROC NEAR PUSH CX MOVDX,OFFSET IBUF MOV AH,0AH INT 21H MOV CL,IBUF+1 MOV CH,0 MOV SI,OFFSET IBUF+2 MOV AX, 0AGAIN:MOVDX,10 MUL DX AND BYTE PTR SI,0FH ADD AL,SI ADC AH,0 INCSI LOOP AGAIN POP CX RETDTOBENDPADDNPROC NEAR MOV CX,AX XOR AX,AX MOVBX,01HLOOP5:ADD AX,BX INCBX LOOP LOOP5 RETADDNENDPBTOAD PROC NEARMOVBX,OFFSET OBUF+5MOV BYTE PTRBX,$MOV CX,10LOOP4:MOV DX,0 DIV CXADD DL,30HDEC BXMOV BX,DLXOR AX,0JNZ LOOP4 MOVDX,OFFSET INF2MOV AH,09HINT 21HMOV DX,BXMOV AH,09HINT 21HRETBTOADENDP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030区块链技术在供应链金融中的落地实践与风险控制评估报告
- 2025-2030动力电池铜箔轻薄化技术进展
- 2025-2030动力电池负极材料技术路线更迭与产能过剩预警
- 2025-2030动力电池硅基负极材料膨胀问题解决进展分析报告
- 2025-2030动力电池梯次利用经济模型与政策支持
- 2025-2030动力电池梯次利用商业模式创新与残值测算方法研究
- 2025-2030动力电池回收网络建设滞后问题及标准化进程评估报告
- 2025-2030动力电池回收利用技术路线比较与循环经济商业模式报告
- 2025-2030动力电池回收利用技术突破与环保政策影响评估
- 2025-2030动力电池回收利用商业模式创新与政策扶持效果评估
- 中国自身免疫性胰腺炎诊治指南(上海2023)
- 邮政社招笔试题
- 节前物业安全培训
- 2024年-2025年《公路养护》知识考试题库与答案
- 与信仰对话 课件-2024年入团积极分子培训
- NB-T31052-2014风力发电场高处作业安全规程
- 国际地图语言学研究进展
- 《水利水电建设工程验收规程》-SL223-2008
- AIOT智能物联产业学院建设方案
- 行政管理专业教学实施细则
- 闭合性颅脑损伤重型个案护理
评论
0/150
提交评论