汇编语言实验题目及报告格式Word文档下载推荐.docx

上传人:b****6 文档编号:16547522 上传时间:2022-11-24 格式:DOCX 页数:18 大小:192.92KB
下载 相关 举报
汇编语言实验题目及报告格式Word文档下载推荐.docx_第1页
第1页 / 共18页
汇编语言实验题目及报告格式Word文档下载推荐.docx_第2页
第2页 / 共18页
汇编语言实验题目及报告格式Word文档下载推荐.docx_第3页
第3页 / 共18页
汇编语言实验题目及报告格式Word文档下载推荐.docx_第4页
第4页 / 共18页
汇编语言实验题目及报告格式Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

汇编语言实验题目及报告格式Word文档下载推荐.docx

《汇编语言实验题目及报告格式Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编语言实验题目及报告格式Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

汇编语言实验题目及报告格式Word文档下载推荐.docx

18

19

20

四川师范大学计算机科学学院《汇编程序设计》实验报告

院系:

专业:

年级:

姓名:

学号:

实验课程:

汇编程序设计

实验室号:

______实验设备号:

实验时间:

指导教师签字:

成绩:

实验一汇编程序的汇编及运行

1.实验目的和要求

(1)熟悉汇编程序的汇编、连接、执行过程;

(2)生成.1ST文件,查看.1ST文件;

(3)生成.OBJ文件,修改语法错误;

(4)生成.EXE文件;

(5)执行程序

2.实验原理

汇编程序从编写到执行的过程

编程→.ASM→编译→.OBJ→连接→.EXE→加载→内存中的程序→执行

3.主要仪器设备(实验用的软硬件环境)

WindowsXP操作系统,MASM,LINK

4.操作方法与实验步骤

1)编写源程序

用记事本输入程序,并存储成源程序,保存在MASM目录下,扩展名为ASM。

2)对源程序进行汇编、连接

操作如下:

(1)在DOS状态下,进入MASM目录;

(2)输入命令:

MASM文件名(连同扩展名);

(3)在系统出现的提示中输入:

objectfilename[.obj]:

按回车键。

Sourcelistling[nul.lst]:

输入:

文件主名,生成.lst文件,也可以不生成,直接按回车键。

.Lst文件用于查看编译为目标文件的过程中产生的中间结果。

Cross-reference[nul.crf]:

(4)如果系统没有提示出错,那么编译过程就完成了。

如果提示错误则应用edit打开源文件进行修改,然后再重复2和3步骤

(5)输入:

link文件主名(不要输扩展名,也可以输入扩展名.obj)

runfile[.exe]:

Listfile[nul.map]:

Libraries[.lib]:

(6)没有提示错误,汇编过程就结束了,产生了exe可执行文件。

如果出现‘nostracksegment’的错误警告,不用理会。

3)执行程序(由DOS中的COMMAND命令将文件加载入内存)

在DOS提示符下直接输入文件主名就可以执行文件了。

程序执行后,有的会显示结果,有的可能执行后什么结果都没有,是因为程序中没有显示命令。

5.实验内容及实验数据记录

5.1

(1)输入数据段1:

DATASEGMENT

ORG20H

NUM1=8

NUM2=NUM1+10H

DA1DB'

IBMPC'

DB0AH,0DH

COUNTEQU$-DA1

DATAENDS

END

(2)生成1-1.lst,用EDIT1-1.lst文件得知DA1=0020,COUNT=0008(参见实验截图)

5.2

(1)输入数据段2:

VAR1DB0,25,0DH,30H

VAR2DB12H,0A4H,6BH

VAR3DB'

ABCDEFH'

VAR4DW1234H,5678H

VAR5DW10HDUP(?

CODESEGMENT

ASSUMECS:

CODE,DE:

DATA

BEINGMOVAX,DATA

MOVDS,AX

LEASI,VAR5

MOVBX,OFFSETVAR2

MOV[SI],0ABH

MOVAX,VAR1+2

MOV[BX],[SI]

MOVVAR5+4,VAR4

MOVAH,4CH

INT21H

CODEENDS

END

(2)进行汇编:

提示有6个错误。

经分析得:

第9行:

将DE→DS

第10行:

将BEING→BEGIN:

第14行:

将[SI]→SI

第15行:

将VAR1+2→[VAR1+2]

第16行:

将[BX]→BX

第17行:

将VAR5+4→AX,VAR4→[VAR4]

修改后进行汇编得:

5.3

(1)输入数据段3:

STACKSSEGMENT

STACKDW128DUP(?

STACKSENDS

DATASSEGMENT

STRINGDB'

WELCONME!

'

13,10,'

$'

DATASENDS

CODESSEGMENT

CODES,DS:

DATAS

START:

MOVAX,DATAS

LEADX,STRING

MOVAH,9

CODESENDS

ENDSTART

(2)运行程序3得到:

WELCOME!

(3)实验截图:

6.数据处理与分析

1)在DOS状态下,对.asm文件汇编,可以得到一个1.lst文件,通过EDIT1.lst,可以查看到DA1=0020,COUNT=0008

2)AX是数据寄存器,而VAR是地址,赋值应该写成[VAR1+2];

7.质疑、建议、问题讨论

直接用edit.exe编辑汇编程序修改不方便,可以使用记事本编辑,再通过更改后缀名变成.asm文件。

四川师范大学计算机科学学院《汇编程序设计》实验报告

实验二:

(1)学习使用DEBUG的命令;

(2)使用DEBUG命令在数据段中查看程序运行的结果;

(3)利用DEBUG运行简单的程序段。

DEBUG命令的使用过程。

1)将输入的大写字母改为小写字母并输出,编写程序。

输入程序观察寄存器变化

2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。

如果是将小写字母改成大写字母带注释的语句该如何修改?

3)程序的跟踪执行操作

在DOS下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。

那么如何查看程序的运行结果呢?

程序执行过程的跟踪操作步骤如下:

(1)在DOS下输入:

DEBUG文件名.EXE

(2)在DEBUG提示符下输入U命令

如果程序中有数据段,可以看到反汇编后第一句可执行语句为:

A地址:

B地址MOVAX,K地址如:

1261:

0000MOVAX,1260

其中:

K地址就是数据段的段寄存器内容,A地址为代码段段寄存器地址,B地址为程序第一条指令的偏移地址。

(3)可以用T命令单步执行指令,执行到MOVAH,4CH时结束,也可以用G命令执行整个程序,输入:

G=B地址(如:

G=0000)

(4)用D命令查看程序执行后数据段的变化

输入:

DK地址:

0(如:

D1260:

0)

在显示的数据中,对照源程序或LST文件查看结果所在的偏移地址的内容。

4)输入下面的程序,按实验一和上面的步骤运行一遍。

这是一个两个数相与的程序。

结果存放在MSG2单元中,偏移地址为?

值为多少?

DSEGSEGMENT

MSG1DW7856H,2038H

MSG2DW?

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVAX,MSG1

ANDAX,MSG1+2

MOVMSG2,AX

MOVAL,0

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

3.编写调试下面的程序,用DEBUG查看数据段中的结果

1)Z=((W-X)*10+5)/(X+Y),X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。

2)X,Y为字节类型数,求Z=((X+Y)*8-(X-Y)*2)/16,写出完整的数据段和代码段,不用乘除指令。

1)在debug中用a命令,输入以下程序后观察寄存器变化

2)创建文件并逐步执行

4)实验截图为

5)Z=((W-X)*10+5)/(X+Y),X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。

6)X,Y为字节类型数,求Z=((X+Y)*8-(X-Y)*2)/16,程序代码

6.质疑、建议、问题讨论

实验三:

分支循环程序设计

(1)学习调试程序,查找逻辑错误;

(2)学习分支语句的编程和调试;

(3)学习循环语句的编程和调试。

利用DEBUG命令查找发现逻辑错误并修改,调试。

4.实验内容

(1)有10个数,统计正数的个数,存放在变量M中。

经过汇编后,行程.exe文件。

在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。

用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确(AL寄存器中存放正数的个数)。

程序

DSEGSEGMENT

MSGDB4,-2,-6,0,5,67,8,-3,5,6

MDB?

CSEGSEGMENT

MOVDS,AX

MOVCX,10

LEASI,MSG

L1:

MOVBL,[SI]

CMPBL,0

JBENEXT

INCAL

NEXT:

INCSI

LOOPL1

MOVM,AL

输入程序并调试。

得到上面程序的分析结果。

(2)数据段中是一组无符号数,将最小数存放在M单元中。

对其进行调试发现错误并修改。

源程序如下:

MSGDB13,15,7,25,24

MDB?

MOVCX,4

MOVAL,MSG

MOVSI,OFFSETMSG+1

CMPAL,[SI]

JBNEXT

MOVAL,[SI]

LOOPL1

MOVAL,0

CSEGENDS

ENDSTART

经调试发现循环结束AL中的数值不变,且SI没有自增

故要在next:

处加上INCSI

(3)编程:

在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果放在RESULT中。

(4)编程:

Ai、Bi为字节型无符号数据,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。

实验四:

子程序设计

(1)学习子程序的编写,主子程序的调用

(2)不同模块间程序的调用和调试

2.主要仪器设备(实验用的软硬件环境)

3.实验内容

(1)数据段的三个字符,调用子程序将其逐个显示出来。

子程序的功能是显示一个字符。

但不执行,对CALL语句和RET语句观察SP、IP的变化,并用D命令查看栈顶内容。

程序段如下:

DATASEGMENT

MAGDB‘ABC’

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MOVAX,DATA

MOVSI,0

MOVCX,3

LL:

MOVDL,MAG[SI]

CALLMADD

INCSI

LOOPLL

MOVAH,4CH

INT21H

MADDPROC

MOVAH,02H

RET

MADDENDP

CODEENDS

ENDSTART

进行汇编单步执行。

用T命令运行五次,D命令查看SS段内容。

通过在DEBUG中用T单步执行与用P子程序执行,分别使ABC逐个显示出来,当执行到调用子程序时候SP=007A,对IP进行保护,当子程序执行完毕以后,返回到SP保护的IP地址0012.。

直接把文件名输进去后可以把三个字符一起输出:

(2)阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行的文件S31.EXE。

具体步骤如下:

MASMS31.ASM(分别汇编)

MASMS32.ASM

LINKS31S32(将两个文件连接成为一个文件名为S31)

S31.EXE(运行)

源程序如下:

NAMES31.ASM

EXTRNDISP:

FAR

CODESEGMENTPARA'

CODE'

ASSUMECS:

CODE

MOVAH,01H

MOVBL,AL

MOVAH,AL

MOVAL,BL

CMPAX,3030H

JEEXIT

CALLNEARPTRTRAN

CALLFARPTRdisp

JMPSTART

EXIT:

TRANPROCNEAR

ANDAX,0F0FH

MOVBL,AH

MOVCL,10D

MULCL

ADDAL,BL

RET

TRANENDP

ENDSTART

NAMES32.ASM

PUBLICDISP

CODE1SEGMENTPARA'

CODE1

DISPPROCFAR

MOVBH,00

MOVCH,4

ROLL:

MOVCL,4

ROLBX,CL

MOVDL,BL

ANDDL,0FH

CMPDL,9

JBENEXT1

ADDDL,07H

NEXT1:

ADDDL,30H

MOVAH,02H

DECCH

JNZROLL

DISPENDP

CODE1ENDS

END

经过汇编,链接得到S31.EXE

4.编程题

(1)编程:

利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来(也可以将找到的不相等字符逐个显示,用INT21H的02功能调用)。

最后的输出结果为:

(2)编程:

子程序搜索指定字符缓冲区中是否有N,如果有用Y替代。

调用子程序将BUF1、BUF2、BUF3中的N全部用Y替代。

运行程序:

实验五DOS功能调用

(1)学会DOS中关于显示功能调用指令的用法;

(2)领会修改显存方法显示字符。

3.实验内容

1)输入一个字符,显示出来。

2)输入一个字符串,显示出来。

3)BUF开始的3个16位二进制数用十六进制数的形式显示出来。

(1)理解程序

(2)输入程序,汇编,运行(在DOS状态下输入:

文件名.EXE),观察结果。

(3)如果要分行显示,程序要如何修改?

4)直接改变显存内容显示。

(1)显存空间分配:

内存地址空间中,B8000H-BFFFFH共32KB的空间,为80×

25彩色字符模式显示缓冲区。

向这个地址空间写入数据,写入的内容将立即出现在显示器上。

80×

25=2000个字符,每个字符在缓冲区中占2个字节,一个字节存放ASCII码,一个字节存放字符属性(字符颜色、字符背景颜色、闪烁、高亮度)

(2)偏移地址计算:

如第2行,第40列:

(2-1)×

160+40×

2这个偏移地址中存放字符的ASCII码,

(2-1)×

2+1这个偏移地址中存放字符的属性。

第M行,第N列的一般计算公式为:

(M-1)×

160+N*2存放ASCII码

160+N*2+1存放属性

(3)运行下列程序,在屏幕的第1行,会显示一个字符X。

根据上面

(1)、

(2)点理解程序段。

STACKSEGMENT

DB128DUP(0)

STACKENDS

CSEG,SS:

STACK

MOVAX,STACK

MOVSS,AX

MOVSP,128

MOVAX,0B800H

MOVES,AX

MOVAH,‘X’

S:

MOVES:

[160*1+40*2],AH

ENDSTART

5)编程显示以下图案。

*********

*******

*****

***

*

6)编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。

4.质疑、建议、问题讨论

学习汇编语言应深刻理解汇编语言的逻辑特点,更高效,更直接地达到目标。

在进行编程时,利用好DEBUG程序,以了解程序的运行状态,有助于改错和改进程序。

实验六字符处理程序设计

(1)熟悉串操作指令的功能与应用;

(2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。

WindowsXP操作系统,MASM,LINK

从键盘键入一个字符串,存入内存BUF为首地址的单元中,现要求统计其中含有小写字母的个数,并将统计结果以两位十进制数形式显示在屏幕上。

4.质疑、建议、问题讨论

通过此次实验,我更深刻理解了指针在程序中的应用,也对子程序的灵活调用有了一番认识。

还有就是作为一名程序员,必须具有耐心和细心,才能够写成简洁高效的程序。

实验体会:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1