《汇编语言程序设计》实验指导书计算机系宋勤《汇编语言》实验学时分配表实验一汇编语言程序上机过程以及调试一、预习内容. 工具软件、的使用. 常用命令的使用:. 完整程序设计方法的格式。
二、目的要求. 掌握常用工具软件、的使用. 掌握常用命令: 能灵活使用这些命令调试程序. 掌握完整程序设计方法的格式,能正确书写数据段,代码段等。
三、实验内容用两种方法把字符串复制到串中去;(1)从左到右的方向复制(2)从右到左的方向复制' $'(?);************************************************, ,:实验步骤:)用文字编辑工具(记事本或)将源程序输入完整后保存在:\下,注意保存时将文件扩展名改为(如)。
)打开桌面的“命令提示符”程序进入命令操作,先用命令改变路经,接着用”文件名” (如,这里文件名可以不带扩展名) 对源文件进行汇编,产生文件和文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
)用”文件名” (如;) 将文件连接成可执行的文件()。
)用调试程序,熟悉命令的使用:()打进入控制,显示提示符‘‘。
()用命令执行程序,可得与步骤相同的结果,也可用命令逐条运行这些指令,每运行一行检查并记录有关寄存器及的变化情况,并注意标志位有无变化。
()用命令检查键入的程序并记录,特别注意左边的机器码和指令地址。
如果一条命令没有显示完全,可以再次输入命令,该命令会紧接着上一个命令的输出继续显示。
()用命令’地址’设置断点,如,表示将断点设置在代码段的偏移地址为的指令前,并执行到该断点前。
其中,命令中的地址项可以从上条命令的运行结果获得。
()用命令查看各寄存器的情况。
()用命令查看数据段的情况,表示从偏移地址开始,也可以指定其他偏移地址值。
()用命令‘地址’的方式修改数据区的字符串,其中’地址’指需要修改的数据段内存单元偏移地址,可根据上条命令获得。
如表示从偏移地址开始修改数据。
()再次用命令执行程序,查看执行结果。
()用命令退出,如果在上述步骤中碰到异常,可以先用命令退出后再进入调试。
四、实验报告或作业.分析程序,画出程序流程图.汇编,连接及调试时产生的错误,其原因及解决办法。
.思考:) 上述实验中用修改数据段的内容,是否改变原文件的内容?) 用单步执行命令运行程序,运行到 , ,指令后,和寄存器内容前后有何变化,产生变化的原因是什么?附使用:.打进入 ,显示提示符‘‘。
.退出命令.显示内存命令起始地址结束地址.修改内存命令起始地址,连续修改打空格键。
打回车键退出命令。
.检查寄存器命令标志位显示.修改寄存器命令寄存器名.小汇编命令起始地址,不输入指令打回车键退出命令。
.反汇编命令起始地址结束地址.文件命名命令盘号:文件名.读文件命令内存地址.写文件命令内存地址.读扇区命令内存地址盘号(:) 扇区号扇区数.写扇区命令内存地址盘号扇区号扇区数.运行命令起始地址结束(断点)地址.单步命令起始地址运行指令数,进入子程序内部。
.单步命令起始地址运行指令数,不进入子程序内部。
.内存搬家命令起始地址结束地址目的地址标志位显示.修改寄存器命令寄存器名.小汇编命令起始地址,不输入指令打回车键退出命令。
.反汇编命令起始地址结束地址.文件命名命令盘号:文件名.读文件命令内存地址.写文件命令内存地址.读扇区命令内存地址盘号(:) 扇区号扇区数.写扇区命令内存地址盘号扇区号扇区数.运行命令起始地址结束(断点)地址.单步命令起始地址运行指令数,进入子程序内部。
.单步命令起始地址运行指令数,不进入子程序内部。
.内存搬家命令起始地址结束地址目的地址实验二顺序程序设计一、预习内容.常用工具软件、和的使用.完整程序设计方法的格式.汇编语言顺序结构程序的设计方法二、目的要求.继续熟悉常用工具软件、和的使用.继续熟悉完整程序设计方法的格式.学习与掌握汇编语言顺序结构程序的设计方法三、实验内容编程实现双字除以字(用),并且把商存入字单元,把余数存入字单元(具体数值可自行确定)。
并且用查看程序的运行结果,检查程序运行结果的正确性。
??,: ,,[],实验步骤:.用文字编辑工具(记事本或)将源程序输入完整后保存在:\下,注意保存时将文件扩展名改为(如)。
.用对源文件进行汇编,产生(如)文件和文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
.用将文件连接成可执行的文件()。
.直接运行产生的文件。
.用调试程序,单步执行程序,并记录黑体部分单步执行后,,,寄存器以及标志寄存器的值..在状态下,用“偏移地址”的方式将程序的改为再单步执行黑体部分,对比步骤的结果,查看有何变化,并记录。
.修改源程序实现双字与字的无符号乘法。
四、实验报告或作业.分析程序,画出程序流程图。
.汇编,连接及调试时产生的错误,其原因及解决办法。
.步骤的结果记录。
.步骤的结果记录,并分析发生变化的原因。
.思考:) 指令,[] 改写成 ,[] 经过汇编后,二者是否相同,为什么?) 如何实现双字与字的乘法,写出完整的源程序。
实验三循环程序设计实验 (必做)一、实验目的:掌握循环程序的设计方法进一步熟悉利用程序修改参数的方法,并检查和验证结果的正确性。
学会针对不同的问题,选用不同的组织循环的方法。
二、实验内容编写一个程序,用二进制显示从键盘输入一个字符的码。
编写一个程序,记录某个字存储单元数据中的个数,以十进制形式显示结果。
三、实验准备编写实验内容要求的两个程序。
写出调试以上程序,即修改程序参数,检查结果的操作方法。
熟悉源程序汇编、连接命令的使用方法即要回答的内容。
四、实验步骤用或其它编辑软件,编写源程序,例如及。
对其进行汇编及连接,产生文件。
对文件进行调试运行。
.用调试运行,学会修改内容的方法。
.对键入不同的字符,分别进行调试。
.在下运行这两个文件。
五、实验报告要求画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
六、参考程序段清单:;;←(循环次数): ;左移进,从高位开始显示;指令不改变;←++;若是,则←' ';若是,则←' ';显示;减,如果未减至,则循环;;数据段;代码段;循环初值:←: ;也可以用;全部是就可以退出循环,减少循环次数;用指令也可以;利用指令加的特点进行计数: ;判断的个数是否小于;的个数小于,转移,‘1’;的个数大于或等于;则要先显示一个: ,‘0’;显示个数——————————————————————实验一、预习内容.多重循环程序和排序程序设计方法。
.带符号数的比较转移指令二、目的要求.掌握多重循环程序和排序程序设计方法。
.掌握带符号数的比较转移指令三、实验内容建立学生名次表,以为首地址的数组中保存了学生的成绩,其中保存学号为的学生的成绩。
要求建立一个个字的数组,并根据中的学生成绩将学生名次填入数组中,其中的内容是学号为学生的名次(提示:一个学生的名次等于成绩高于该学生的人数加)(?),: ,,:①②:,[]:③④,实验步骤:.输入,汇编并连接此程序。
.在下运行此程序,记录运行结果。
.将转移指令改为,,分别运行记录排序结果,察看结果是否正确不对,并分析原因。
四、实验报告或作业.分析程序,画出程序流程图.汇编,连接及调试时产生的错误,其原因及解决办法。
.记录情况下的排序结果,同时比较将转移指令改为时的排序结果,并分析结果正确与否,如果不正确,写出原因和解决办法。
.思考:如果想外循环也用实现,应该怎样修改程序?——————————————————————实验四分支程序设计实验 (必做)一、实验目的:掌握分支程序的设计方法掌握利用修改参数、检查结果的方法。
掌握汇编语言源程序的编辑、汇编、连接及调试过程。
二、实验内容编写一个程序,显示寄存器中的两位十六进制数编写一个程序,判别键盘上输入的字符;若是字符,则显示之;若为或字符,均显示“”;若是回车字符<>(其码为),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
三、实验准备编写实验内容要求的两个程序。
写出调试以上程序,即修改程序参数,检查结果的操作方法。
熟悉源程序汇编、连接命令的使用方法即要回答的内容。
四、实验步骤用或其它编辑软件,编写源程序,例如及。
对其进行汇编及连接,产生文件。
对文件进行调试运行。
.用调试运行,学会修改内容的方法。
.对键入不同的字符,分别进行调试。
.在下运行这两个文件。
五、实验报告要求画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
六、参考程序清单()显示中两位十六进制数程序:;: AL,AL,AL:;显示高位码:;显示低位码;返回()显示键入字符程序:;等待键入字符,送;是否是回车符?;是则转退出程序AL,’’AL,’’MO ,AL:AL: ,’’::AL::—————————————————————实验(选做)一、预习内容.分支程序设计方法。
.利用转移指令、实现多岔分支的方法。
二、目的要求.掌握分支程序设计方法。
.掌握利用转移指令、实现多岔分支的方法。
三、实验内容统计学生成绩。
设有个学生的成绩分别为、、、、、、、、和分。
试编制程序分别统计低于分、分、分、分、分及分的人数,并分别存放到、、、、及单元中,: ,,:, []①②::::::③④,实验步骤:.阅读程序,将程序补充完整。
.输入,汇编并连接此程序。
.在下运行此程序,记录运行结果。
.单步运行程序,记录前五次执行转移指令后寄存器的值。
四、实验报告或作业.分析程序,画出程序流程图。
.汇编,连接及调试时产生的错误,其原因及解决办法。
.每次执行转移指令时寄存器的值。
、最终运行结果,即、、、、及的值。
、思考:如何修改程序使源程序先统计,然后依次统计? ———————————————————————实验五子程序设计实验(必做)本实验的目的在于让读者掌握同一模块调用的方法。
一、实验目的掌握主程序与子程序之间的调用关系及调用方法。
掌握子程序调用过程中近程调用与远程调用的区别。
掌握通过堆栈转送参数的方法。
二、实验内容将开始的个单元中的二进制数转换成两位十六进制数的码,在屏幕上显示出来。
要求码型转换通过子程序实现,在转换过程中,通过子程序实现显示.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’’的个数.子程序的参数是字符串的首地址,字符串长度及字符””.子程序返回字符"”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符””及其个数(设为一位十六进制数).三、实验说明第一个实验程序用子程序的近程调用实现。
由于在调用子程序时,子程序又调用了子程序,这叫子程序的嵌套调用。
实验过程中可以从堆栈的内容看到两个子程序的返回地址值。