- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
试验6:宏结构.doc
湖 北 工 程 学 院
课程设计报告
专 业 : 网络工程
课程名称 : 汇编课程设计
班 级 : 1217142
姓 名 : 雷震
学 号 : 012301714208
设计题目 : 宏程序
设计时间 : 2014-6-5
实验目的
加深对宏程序的理解;?
掌握宏的定义和使用;?
掌握创建宏组和条件宏的方法;
掌握宏的应用;
5.学会利用宏程序的特点减少程序的冗余度;
6. 加深对编程的独立探索、创新能力。
二、实验内容:
利用宏程序实现将输入的字符串逆序输出,要求尽可能提高时间复杂度。
本程序没有开辟一个新的空间来存储逆序后的字符串,而是直接在原存储区上对输入字符串进行改变。不仅如此,本程序每次循环逐一将首尾字符进行交换,这样将时间复杂度由原来的O(N)提高到O(n/2)。
程序中,INFO1保存输入提示字符串,INFO2保存输出提示字符串。BUF指示缓冲区的大小,LEN指示输入字符串的长度,STR指示输入的字符串。
程序开始,利用定义在MACRO.LIB中的定义的宏进行宏调用,RETURN输出回车换行符,PRINT输出字符变量INFO1,INPUT从键盘输入字符带缓冲区。
将输入字符串串首的偏移地址赋给SI,将AH,CH初始化为0,将输入字符串长度LEN赋给AL,然后将字符串长度加到SI中,此时SI指向输入字符串尾的后一个字节。将BX赋值为2,将字符串长度除以2,将除得的商作为循环次数赋值给CX。接着,将SI里面的数据减1,将输入字符串串首的偏移地址赋给DI。此时,SI指向输入字符串的最后一个字符,DI指向输入字符串的第一个字符。
循环开始,将偏移地址SI中的字符赋给AL,交换AL和偏移地址DI中的字符,最后将AL中的字符赋给偏移地址为SI的内存单元,完成首尾字符的交换。更改循环条件,将DI后移一个字符,SI前移一个字符,循环条件CX减1。
循环完成后,利用宏程序调用,RETURN输出回车换行符,PRINT输出字符串变量INFO2,PRINT输出变换后的字符串STR。
程序返回,执行完毕。
三、实验步骤
1.程序设计流程图
Y
N
源代码:
宏定义代码:
INPUT MACRO A
LEA DX,A
MOV AH,10 ;10号系统功能调用
INT 21H
ENDM
PRINT MACRO A
LEA DX,A
MOV AH,9 ;9号系统功能调用
INT 21H
ENDM
RETURN MACRO
MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH ;回车换行
INT 21H
ENDM
STACK0 MACRO A
STACK SEGMENT STACK ;栈的定义
DB A
STACK ENDS
ENDM
主程序代码:
INCLUDE MACRO.LIB
STACK0 200 DUP (0) ;利用宏,定义堆栈段
DATA SEGMENT
INF01 DB Please input primary string:$ ;提示输入变量字符串INFO1
INF02 DB Output he transfered string:$ ;提示输出变量字符串INFO2
BUF DB 81 ;BUF指示缓冲区的大小
LEN DB ? ;LEN变量指示输入字符串的长度
STR DB 80 DUP($) ;STR变量表示输入字符串,初始化为美元符号
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
RETURN ;利用宏调用,输出回车换行符
PRINT INF01 ;利用宏调用,输出字符变量INFO1 中的字符串
INPUT BUF ;利用宏调用,从键盘输入字符到缓冲区;
LEA SI,STR ;将输入字符串的偏移地址赋给SI
MOV CH,0 ;将CX和AX的高字节单元初始化为0
MOV AH,0
MOV AL,LEN ;将输入字符串的长度赋值给AL
ADD SI,AX ;SI指向字符串末尾后的一个字符
M
文档评论(0)