【实验报告】汇编语言程序设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验目的与内容 目的: 1)进一步熟悉汇编语言程序的编辑、宏汇编、链接、运行基本概念; 2)熟练掌握动态调试程序TD/DEBUG 的常用命令或窗口功能,学会用TD/DEBUG 调试程序,修改数据和 寄存器等环境; 3)熟悉掌握汇编语言程序的典型数据结构设计、典型程序流控制方法,了解DOS/BIOS 功能调用的基 本方法。 内容: (1)编写程序实现如下功能: ① 从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母 (其他字符不变)并按原顺序将这些字符在屏幕上显示出来。 ② 从键盘输入在0~65535 之间的十进制数,将其转换为16 进制数并在屏幕中显示出来,要求判断输 入字符串是否为在0~65535 之间的十进制数。 (2)复习TD 各种操作,并用DEBUG 调试程序,学会基本命令操作,并通过单步、设置断点等方法观 察中间结果,完成正常运行。 命令行方式下直接键入debug myfile.exe 回车(myfile 为待调试可执行程序),进入调试方式(显示-),键入H 回车显示全部命令、格式和功能。常用命令有:U(反汇编)、A(汇编输入指令程序)、R(寄存器显示/修改)、I(端口输入)、O(端口输出)、D(显示数据)、E(修改数据)。 除资源修改管理功能外,重点应用T(单步)、Tn(执行n 步)、P(过程/指令)、G××××(从当前CS:IP执行到断点××××)或G=××××1 ××××2(从××××1 执行到××××2 断点)调试实验程序。 程序流程图: 1. 2. 三. 方案实现与测试 1)实验一的基本实验内容和要求 ① 编写代码完成功能要求,文件格式为.asm 文件(如文件名为add.asm),将文件放入带汇编工具的文件夹中,即含有汇编工具(MASM/TASM.EXE)和链接工具(LINK/TLINK.EXE)的文件夹。 ② 全屏启动命令行模式,进入上述文件夹 输入: tasm add.asm 或 masm add 回车后编译产生add.obj 文件 再输入: tlink add.obj 或 link add 回车后链接产生add.exe 文件 如果程序有错误,编译时会产生错误提示,指出错误的位置和错误类型及错误码,改正错误后再重新编译链接。 ③ 启动TD 并载入add.exe,在代码段可以看到程序指令,部分符号已被实际地址或数值替换表示。 ④直接运行:运用TD功能键F9,运行结果如下图所示 由图可以看出,在数据区13B3:0000到13B3:0005分别存放的是data1,data2两个加数和data3和的数据,且运行结果正确,在运行结束之后,寄存器器中的值恢复到随机值。 ⑤单步运行:使用TD功能键F7,当单步运行完mov cx,0002这条指令后,程序的运行结果如下图所示 ⑥断点运行,比如在指令mov [si+0004],al zhetiao 指令上设置断点后,程序的运行结果为: 直接在代码区添加代码,如在指令mov si,00000 后添加指令mov ax,100.程序结果 2)汇编语言程序设计实验内容 (1)从键盘输入任意字符串后,存入自定义存储单元,判断处理后将小写字母转换为大写字母(其他字符不变)并按原顺序将这些字符在屏幕上显示出来。 ①主要算法:disp proc near xor cx,cx;给CX中的数据进行清零 mov cl,input[1];将输入的字符数付给cl,循环次数 mov si,2;input[2]开始为实际输入的ASCII码 again: mov dl,input[si] cmp dl,61h;判断是否为小写字母 jb next cmp dl,7ah ja next sub dl,20h;将小写字母转换为大写字母 next: mov ah,02h;显示字符 int 21h inc si;SI指向下一个字符 loop again ret disp endp ②调试程序:使用单步运行的方法,输入字符串“123abc”,程序运行到调用子程序,单步运行指令mov cl,[0001]后,发现此时CX中的数值变为6,符合我刚才输入的字符总数。程序第一次执行指令cmp dl,61,可以发现CF=1,此时程序跳转到显示字符程序段,符合我刚才输入的第一个字符1的情况。当CX=0003时,此时程序判断输入的字符a是否为小写字母,单步运行指令sub dl,20h后,小写字母a被转换为A,程序运行结果正确。当子程序运行结束之后,回到主程序,当运行结果提示“Do you want to continue (y/n)”,此时如输入y,重复程序操作,如输入n,程序结束。最终程序运行结果如下图所示: (2)从键盘输入在0~65535 之间的十进制数,将其

文档评论(0)

moon8888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档