《汇编语言》实验指导书-2014.9_第1页
《汇编语言》实验指导书-2014.9_第2页
《汇编语言》实验指导书-2014.9_第3页
《汇编语言》实验指导书-2014.9_第4页
《汇编语言》实验指导书-2014.9_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、汇编语言实验指导书201491第 1 页 共 36 页 一、实验目的及要求二、实验内容1汇编语言源程序的建立本例中给出的程序是要求编写 3+5=8 8 存入 AL 或 AX 程序的文件名为 ABC.ASM 。(用任何一个种文本编辑器编写此程序,存盘)或双击桌面的 “Masm for Windows 集成实验环境 2012.5”快捷文件图标,进入汇编语言集成开发环境DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSST

2、ART:MOV AX,DATASMOV DS,AX;=第 2 页 共 36 页MOV AX ,3 ;自己写的代码Mov BX ,5 ;自己写的代码ADD AX ,BX ;自己写的代码(只有3条);此处输入代码段代码;=MOV AH,4CHINT 21HCODES ENDSEND START再次调出源程序进行修改。将源程序文件汇编成目标程序文件一般情况下,汇编程序 MASM.exe 的主要功能有以下 3 点:(1)检查源程序中存在的语法错误,并给出错误信息。(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。(3)若程序中使用了宏指令,则汇编程序将展开宏指令。第 3 页 共 36

3、 页3用链接程序 link.exe 生成可执行程序文件.OBJ 件,必须经过链接以后,才能成为可执行文件(即扩展名为.EXE链接以后,便可以产生可执行程序文件(.EXE 4程序的执行本程序当中没有编写输出部分代码,所以在屏幕上看不到程序执行的结果。我们可以采用调试程序 DEBUG 来进行检查,相关内容请参见实验二。第 4 页 共 36 页 一、实验目的DEBUG.EXE 程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程序设计人员或用户触及到机器内部,因 此可以说它是 80X86CPU 的心灵窗口

4、,也 是我们学习汇编语言必须掌握的调试工具。二、实验内容1在 DEBUG 环境下建立和汇编程序在 DEBUG 试。第 5 页 共 36 页比如,在 DEBUG下编写如下程序:MOV DL,33HMOV AH,2;字符 3的 ASCII码送 DL;使用 DOS的 2号功能调用;进入功能调用,输出3;BIOS中断服务,程序正常结束。INTINT21H20H3变程序中33H为相应字符的 ASCII码。其中涉及 DOS和 BIOS功能调用。因为我们是在 DOS/输出指令直接通过端口输入输出,而必须使用DOS内部提供的子程序完成输入/输出。DOSDOS功能调用要求在进入 INT21H调用前,首先将功能调

5、用号送AH寄存器,并根据功能调用号准备初始数据。也就是说 INT21H的 2号功能调用是输出 DL寄存器中的字符。INT20H是 BIOS中断服务,这一软中断用来正常结束程序。具体步骤如下:进入 debug调试环境后,第 6 页 共 36 页(1)输入程序并汇编_A 1000B03:0100 MOV DL,330B03:0102 MOV AH,20B03:0104 INT 2l0B03:0106 INT 200B03:0108“0B03:0100”类似这样的地址是系统自动提供的,不需用户输入。至此程序已输入完毕,并汇编成机器指令。现在用 G命令运行程序如下:(2)运行程序_G3Program

6、terminated normally如果现在想分析一下该程序的指令,可以用反汇编命令 U作如下操作:(3)反汇编_U 100,1080B03:0100 B2330B03:0102 B4020B03:0104 CD210B03:0106 CD200B03:0108MOVMOVINTINTDL,33AH,022120(4 200H码段的 200单元,可进行如下操作:_E cs:200 B2,33,B4,02,CD,21,CD,20(5)执行机器指令程序_G=2003Program terminated normally第 7 页 共 36 页三、常用 DEBUG命令DEBUG 命令是在命令提示符

7、“_”下由键盘键入的。每条命令以单个字母的命令符开头,然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作参数与命令符之间用空格隔开,命令的结束符是回车键( ENTER及参数的输入可以是大小写的结合。Crtl+Break 键可中止命令的执行。Crtl+NumLock不必写 H。1汇编命令 A格式: (1)A :(2)A :(3)A (4)A功能:汇编命令是将用户输入的汇编语言指令,汇编为可执行的机器指令。键人该命令后显示段地址和偏移地址并等待用户从键盘逐条键入汇编语言指令。每当输入一行语句后按“ENTER”键,输入的语句有效。若输入的语句中有错,DEBUG会显示“ Error键

8、返回到提示符“_其中(13)用 CS 4)以CS:100123)中A命令后的地址形式。2比较命令 C格式:C ,其中是由L 指定的。的起始地址单元起逐个与目标起始地址以后的单元顺序的形式显示失配单元及内容。3显示内存单元命令 D格式: (1)D (2)D 第 8 页 共 36 页(3)D其中(1)以 CS3)显示 CS:100为起始地址的一片内存单元内容。功能:该命令将显示一片内存单元的内容,左边显示行首字节的段地址:偏移地址,中间是以十六进制形式显示的指定范围的内存单元内容,右边是与十六进制数相对应字节的 ASCII4修改内存单元命令 E格式: (1)E (2)E 其中是以逗号分隔的十六进制

9、数,或是用或”括起来的字符串,或者是二者的组合。1)将指定内容写入指定单元后显示下一地址,以代替原来内容。可连续键入修改内容,直至新地址出现后键入回车2逐一写入由开始的一片单元中,该功能可以将由指定地址开始的连续内存单元中的内容,修改为单元内容表中的内容。例如:_E DS:30 F8,AB,”AB” DS:30到DS:33的连续4个存储单元底内容将被修改为F8H,ABH,41H,42H。5填充内存命令 F格式:F 使用。例如:F 05BC:200L 10 XYZ,3C该命令将由地址 05BC:200开始的 10H(16)个存储单元顺序填充“B2,58,59,5A,3C,B2,58,59,5A,

10、3C,B2,58,59,5A,3C,B2”6连续执行命令 G格式: (1)G(2)G=(3)G=,其中(23)中的“=”是不可缺省的。功能:第 9 页 共 36 页 默认程序从 CS:IP开始执行。 程序从当前的指定偏移地址开始执行。 从指定地址开始执行,到断点自动停止并显示当前所有寄存器、状态标志位的内容和下一条要执行的指令。DEBUG调试程序最多允许设置10个断点。7跟踪命令 T格式:T =功能:如果键入TENTER”键,则默认从CS:IP开始执行程序,且每执行一条指令后要停下来,显示所有寄存器、状态标志位的内容和下一条要的缺省值是一条,也可以由指定执行若干条命令后停下来。例如:T指令。又

11、例如:T 10该命令从当前指令开始执行 10H内容和下一条要执行的指令。8反汇编命令 U格式: (1)U (2)U 定范围内的代码以汇编语句形式显示,同时显示地址及代码。注意,反汇编时一定确认指令的起始地址后再作,否则将得不到正确结果。地址及范围的缺省值是上次 U指令后下一地址的值。这样可以连续反汇编。9执行过程命令 P格式:P说明:该命令主要用于调试程序。它与跟踪命令TT命令是跟踪一条或多条指令,而P命令是执行一条指令(包括带重复前缀的数据串操作指令)例如:设有如下指令序列:MOV AH,02H第 10 页 共 36 页INT 21H:当要执行 INT 21H T INT 21H程序(DOS

12、功能调用)后,需要数十次T命令才能返回当前程序;若采用P命令进行调试,则只执行INT 20H一条指令,执行完立即返回,给调试者的感觉好象是执行了一条普通指令一样。因此,当读者以后遇到CALLINT n指令或带重复前缀的数据串操作指令时,若不想观察相应过程的详细执行过程,就可以用 P命令。10显示命令 R格式: (1)R(2)R 功能:显示当前所有寄存器内容、状态标志及将要执行的下一指令的地址(即CS:IPFLAG以状态标志位的形式显示,详见表 2-1。表 2-1 状态标志显示形式显示形式OV/NVDN/UPEI/DING/PLZR/NZPE/POCY/NCAC/NA奇偶标志 PF进位标志 CF

13、辅助进位标志AF修改内容后按“ENTER”键有效。若不需修改原来内容,直接按“ENTER”即可。例如:R AX11结束 DEBUG返回 DOS命令 Q格式:Q功能:返回 DOS提示符下。四、重新调试实验一的程序,看最终 AX寄存器的值是多少?第 11 页 共 36 页 一、实验目的1掌握数据传送和算术运算指令的用法。2熟悉在 PC 机上建立、汇编、连接和调试程序的方法。3理解计算机中除法溢出的含义。二、实验内容1设 W、X、Y、Z 均为 8 位带符号数,要求完成计算表达式W=X+Y-Z。数情况参考程序清单:ABC.ASMDATA SEGMENTXDB 1DB 4DB 3;x 单元存放数字 9,

14、以下类推YZWDB ?,? ;预留 2个单元,存放运算结果DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX , DATAMOV DS ,AX;=MOV AL , XADD AL , Y ;x+ySUB AL ,Z ;x+y-z第 12 页 共 36 页MOV W ,AL 存结果到 W单元;=;=输出结果MOV AH ,2ADD AL,30hMov dl,alINT 21H;调用 DOS中断 INT 21H功能的 2号子功能;个位数字变成数字字符,此 3条语句输出数字的 ASCII码;=MOV AH,4CHINT 21HCODE EN

15、DSENDSTART思考:1. 如果运算结果大于等于,显示的结果正确吗?如何解决?2. 如果运算结果小于 ,显示的结果正确吗?如何解决?第 13 页 共 36 页 一、实验目的1. 掌握数据传送和算术运算指令的用法。2熟悉字符的输入输出。3理解计算机中除法溢出的含义。二、实验内容改写实验三 ABC.ASM,分以下6 个问题进行编程1. 改写实验三ABC.ASM,把其中的 都置空,代码如下X DB ?Y DB ?Z DB ?2. 改为从键盘输入 Z的值,分别为1,4,3,输入单个字符的代码为:MOV AH , 1INT 21H第 1 页 共 36 页;调用 INT 21H 中的 1 号功能,输入

16、单个字符,输入的字符的 ASCII码值存放在 AL寄存器中 3减运算,看看运算结果是否正确?如果不正确,如何解决?3. 如果想让输入和输出的结果如下图所示,又该如何解决?4. 如果想让输入和输出的结果如下图所示,又该如何解决?第 2 页 共 36 页5. 在此基础上,把 ABC.ASM 程序改为下面的表达式,写出代码:W=(X+Y)*2-Z)/2 ;X,Y,Z,W均为字节6 X,Y,Z,W达式的代码?W=(X*Y)+5-Z*5)/2第 3 页 共 36 页 一、实验目的1掌握分支程序的结构及相关指令。2掌握分支程序的设计,调试方法。二、实验内容1 在 BUF 和 BUF+1BUF+2 单元分别

17、放有一个无符号字节型数,编程序将其中最大数存入 MAX 2 要求同上,只是比较的数为有符号数。3将 1000H 单元开始的 10 个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。本实验要求在DEBUG 调试状态下进行,包括汇编程序、运行程序、检查结果。4大写字母转换成小写字母程序,按 ESC 键结束输入。算法分析:由 ASCII 码字符表可知,英文大、小写的 26个字母的值的差为 20H,因此欲将从键盘上输入的大写字母转换为相应的小写字母,只需将从键盘输入的大写字母的 ASCII 编码值加上 20H 即可。5已知两整数变量 A 和 B,试编制完成下列功能的程序:若两数中一个是奇数,则

18、将奇数送入 ABUF 单元中,偶数送入 BBUF 单元中。若两个数均为奇数,则两数分别加 1,并存入原变量中。若两个数均为偶数,则两变量不变。算法分析:设义、B 两变量预先存放在数据段的 ABUF 和 BBUF 的字节单元中,其值分别为 X 和 Y第 1 页 共 36 页断一个数的最低位是 0或是 1就可以了。若是 0,则为偶数,若为 1,则为奇数,可以采用 TEST指令和条件转移指令 JZ来实现,6在内存中以 BUF单元开始缓冲区中连续存放着 10个学生的分数,试编制程序统计其中 90一 100分、80一 89分、60一 79分及 60分以下者各有多少人,并把结果分别存放在 S9、S8、S7

19、和 S6中。7(ABCD),自动汇总并显示各类分数的人数(假定各类分数的总人数在 0一 9之间)。若按下键,则停止输入 ;若按下 A、B、C、D之外的其他键,则提示“INPUT ERR0R”信息。8数值 0一 7,分别转向标号为10171017程序段分别实现显示字符 0一 70。9 统计一个有 10人的班中,男、女生的人数各是多少。将统计的男生人数存入变量 MANK中,女生人数存入变量 WOMAN中。算法分析:男、女生的标志可用“01”字符来表示,并从键盘输入此标志。根据题意,总人数已知,在此范围下,对输入标志进行分类求和显然可用循环结构来完成。每循环一次使相应人数增1,而循环计数值减1,直至

20、该计数值为0。可用CX作为循环计数值,用 LOOP指令对循环条件进行判定。10. 编写判断输入的姓名是否正确的程序,要求:有提示输入的语句,输入N”键重新输入,正确了按“Y”键退出。第 2 页 共 36 页 一、实验目的1掌握循环结构程序设计的方法;2掌握数据块传送程序设计的方法;3掌握循环指令的应用。二、实验内容1编写程序实现将数据段 STR1单元开始的 20个字符移到 STR2开始的存储区。假设 STR1+20STR2,可以用串传送指令,也可以用 MOV传送指令。编程思路:考虑:(1)数据串操作的起始位置从高地址还是从低地址开始。(2)确定使用串传送指令,还是用 MOV指令。(1) 确定循

21、环程序的结构。2编制程序计算 S=1+2+3+4+N直到和大于 500显示出来(N 3. 1所示,33000H内存单元开始的100个字节存储单元全部清0。本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。4编程在屏幕上显示 10行相同字符串。5动态从键盘输入 20个二位无符号数,找出其中最大数并显示。6动态从键盘输入 20个二位无符号数,从小到大排序并显示。7 1的长度为 5 2的长度为 10。编程: 若串2的最后 5个字符和串 1相同,则置 FLAG单元为“Y”,否则置为“N”。第 3 页 共 36 页8编写打印如下图形程序01021032104321054321065

22、43210765432108765432109876543210第 4 页 共 36 页实验七 子程序设计一、实验目的1掌握子程序的定义和调用及参数传递的方法。2 掌握子程序、子程序的嵌套、递归子程序的结构。3 掌握子程序的设计、编制及调试。二、实验内容1 对缓冲区中的一组字符的 ASCII码加偶校验。要求画出流程图,编写程序。 ASCII码为 7偶校验的含义为:校验位与7位字符位中的 1的个数之和为偶数,这可用于字符正确与否的校验。例如:字符为 1011011,其中 1的个数为 5,那么校验位填 1,这样 1的个数为 6,即为偶校验。偶校验位的填入可作为子程序来设计,缓冲区的首址一般由主程序

23、提供,可假设缓冲区中的字符个数由缓冲区中的第一个字节给出。2 用子程序调用实现在屏幕上显示 10能用子程序调用方法实现。3 试编制计算 N!(N0)的程序。N!=N*(N-1)*(N-2)*1,其递归定义如下: 0!=1,()!(1)4 用子程序结构编写程序:从键盘输入一个二位十进制数的月份数(01125.及 8 个字符的电话号码,并以一定的格式显示出来。第 5 页 共 36 页主程序TELIST中包括以下功能(1) 显示提示符INPUT_NAME:;(2) 调用子程序INPUT_NAME输入姓名;(3) 显示提示符INPUT TELEPHONE NUMBER:;(4) 调用子程序INPHON

24、E输入电话号码;(5) 调用子程序PRINTLINE显示姓名及电话号码。子程序INPUT_NAME中包括以下功能(1) 调用键盘输入子程序GETCHAR,把输入的姓名存放在INBUF缓冲区;(2) 把 INBUF中的姓名移入输出行。子程序INPHONE中以下功能(1) 调用键盘输入子程序 GETCHAR,把输入的 8 位号码存放在INBUF缓冲区;(2) 把 INBUF中的号码移入输出行。第 6 页 共 36 页子程序 PRINTLINE中以下功能显示姓名及电话号码,格式为:NAMETEL第 7 页 共 36 页实验八显示程序设计一、实验目的1 掌握软件延时程序的编写方法。2 熟悉系统功能调用

25、的方法。3 掌握宏定义与宏调用的方法。二、实验内容1 编写在屏幕上每隔一秒连续显示字符 09的程序。编程提示:为了使输出的字符之间有空格,在每一个循环中输出一个 09的字符和一个空格。为了输出 09,置寄存器 BL初值为 0,每循环一次使其增量。为了保证输出是十进制,增量后用 DAA调整指令。由于输出为一位十进制数,用 AND0FH指令屏蔽高 4位。2用系统功能调用将HELLO由键盘输入,再从屏幕输出*HELLO*3编程实现:每隔5.5S从键盘读一个字符,并将字符的ASCII码存入缓冲区,共读 50个字符,利用 INT 16H的 0功能读取字符,返回值在 AL中。4利用自编中断 INT 60H实现在屏幕上显示 10行相同字符。显示功能用 INT60H实现。第 8 页 共 36 页 一、 实验题目:显示学生名次表二、 实验目的:序编程方法,巩固提高汇编语言程序设计能力应用水平。三、 实验内容实验内容: 编制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论