汇编语言实验报告.docx

上传人:b****7 文档编号:24997579 上传时间:2023-06-03 格式:DOCX 页数:38 大小:240.54KB
下载 相关 举报
汇编语言实验报告.docx_第1页
第1页 / 共38页
汇编语言实验报告.docx_第2页
第2页 / 共38页
汇编语言实验报告.docx_第3页
第3页 / 共38页
汇编语言实验报告.docx_第4页
第4页 / 共38页
汇编语言实验报告.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

汇编语言实验报告.docx

《汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告.docx(38页珍藏版)》请在冰豆网上搜索。

汇编语言实验报告.docx

汇编语言实验报告

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

1.实验目的和要求

1、熟悉汇编程序的汇编、连接、执行进程

2、生成LST文件,查看LST文件

3、生成OBJ文件,修改语法错误

4、生成EXE文件

5、执行

2.实验环境

IBM—PC机及其兼容机

实验的软件环境是:

操作系统:

DOS2.0以上;调试程序:

DEBUG.COM;文本编程程序:

EDIT.EXE、WPS.EXE;宏汇编程序:

MASM.EXE(或ASM.EXE);连接装配程序:

LINK.EXE;交叉引用程序:

CREF.EXE(可有可无)。

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

一、将数据段输入,取名1.txt,保留在MASM文件夹下。

生成LST文件,(没必要连接、运行)用EDIT查看1.LST文件。

试回答:

DA1,DA2的偏移量别离是多少?

COUNT的值为多少?

DATASEGMENT

ORG20H

NUM1=8

NUM2=NUM1+10H

DA1DB‘IBMPC’

DA2DB0AH,0DH

COUNTEQU$-DA1

DATAENDS

END

2、输入有错误的文件,修改错误语句。

(MASM没有显现错误即可。

没必要连接、运行。

DATASEGMENT

VAR1DB0,25,ODH,300

VAR2DB12H,A4H,6BH

VAR3DB’ABCDEF’

VAR4DW1234H,5678H

VAR5DW10HDUP(?

DATAENDS

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

ENDSTART

3、输入正确的程序,汇编、连接、运行

STACKSSEGMENTSTACK

DW128DUP(?

STACKSENDS

DATASSEGMENT

STRINGDB‘WELCOME!

’,13,10,‘$’

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

LEADX,STRING

MOVAH,9

INT21H

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

4.算法描述及实验步骤

(1)编写源程序。

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

(3)执行程序。

2的正确代码:

DATASEGMENT

VAR1DW0,25,0DH,300

VAR2DB12H,0A4H,6BH

VAR3DB'ABCDEF'

VAR4DW1234H,5678H

VAR5DW10HDUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

BEGIN:

MOVAX,DATA

MOVDS,AX

LEASI,VAR5

MOVBX,OFFSETVAR2

MOVWORDPTR[SI],0ABH

MOVAX,VAR1+2

MOVBX,[SI]

MOVCX,VAR4

MOVVAR5+4,CX

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

5.调试进程

(1)300超过一个字节,将DB改成DW。

(2)A4H改成0A4H。

(3)DE改成DS。

(4)BEGIN后要加冒号。

(5)MOV[SI],0ABH改成MOVWORDPTR[SI],0ABH。

(6)MOV[BX],[SI]改成MOVBX,[SI]。

(7)MOVVAR5+4,VAR4改成MOVCX,VAR4

MOVVAR5+4,CX

(8)ENDSTART改成ENDBEGIN

6.实验结果

(1)

DA一、DA2的偏移量别离是0020H,0026H。

COUNT的值为0008H。

(2)

(3)

7.总结

这次上机实验把握了实际调试程序的能力,熟悉了汇编程序的汇编、连接、执行进程,在生成的文件中修改语法错误。

这次实验不仅验证了讲义的理论,更重要的是使我有了对实践能力的培育。

 

实验二顺序程序设计

1.实验目的和要求

1.学习利用DEBUG的命令;

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

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

2.实验环境

实验的硬件环境是:

IBM—PC机及其兼容机

实验的软件环境是:

操作系统:

DOS2.0以上;调试程序:

DEBUG.COM;文本编程程序:

EDIT.EXE、WPS.EXE;宏汇编程序:

MASM.EXE(或ASM.EXE);连接装配程序:

LINK.EXE;交叉引用程序:

CREF.EXE(可有可无)。

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

1)输入程序观看寄放器转变

利用DEBUG,将下面的程序段写入内存,逐条执行,观看每条指令执行后,CPU中相关寄放器的内容转变。

注意用T命令执行时,CS:

IP寄放器的内容。

MOVAX,4E20

ADDAX,1416

MOVBX,2000

ADDAX,BX

MOVBX,AX

ADDAX,BX

MOVAX,001A

MOVBX,0026

ADDAL,BL

ADDAH,BL

ADDBH,AL

MOVAH,0

ADDAL,BL

ADDAL,9C

2)以下程序单步运行,注意AL,BX,CX寄放器的转变,并观看数据段字母的转变。

DSEGSEGMENT

MSG1DB’abc’

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

LEABX,MSG1

MOVCX,3

S:

MOVAL,[BX]

ANDAL,11011111B;将AL中的ASCII码的第5位置0,

;变成大写字母。

MOV[BX],AL

INCBX

LOOPS

MOVAL,0

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

3)程序的跟踪执行操作

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

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

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

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

(3)能够用T命令单步执行指令,执行到MOVAH,4CH时终止,也能够用G命令执行整个程序,输入:

G=B地址(如:

G=0000)

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

输入:

DK地址:

0(如:

D1260:

0)

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

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

(1)

,X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。

(无符号数)

(2)X,Y为字节类型数,求

,写出完整的数据段和代码段,不用乘除指令。

(无符号数)

4.算法描述及实验步骤

1)在DEBUG的环境下,用A命令逐条把程序段写入内存,用T命令逐条执行,然后再观看CPU中相关寄放器的内容转变。

2)先用记事本编写源程序,把它寄存到MASM目录下,再把它生成.exe文件,用DEBUG的反汇编U命令,G命令,T命令,单步运行程序,观看AL,BX,CX寄放器的转变,并观看数据段字母的转变。

假设要将大写字母改成小写字母只要将ANDAL,11011111B语句改成ORAL,00100000B(将AL中的ASCII码的第5位置1,变成小写字母)即可。

3)

(1)分析问题:

设X、Y、W的值寄存在字节变量X、Y、W中。

结果寄存在字节变量Z当中。

第一:

初始化;第二:

两数相减,AL-X

第三:

无符号数乘法mul(单操作数)被乘数在BL中,将W-X送入BL中,mul10,将结果送BL。

第四:

无符号数相加送AX,(W-X)*10+5->AX

第五:

无符号数相加,结果存于BH,X+Y->(BH)

第六:

无符号数除法(单操作数),商->Z,余数->Z+1

(2)分析问题:

设X、Y的值寄存在字节变量X、Y中。

结果寄存在字节变量Z当中。

第一:

初始化;第二:

无符号数相加,结果存于AL,即X+Y—>AL。

第二:

两数相乘用SAL指令,左移3位等于乘8,结果存于AL,即(X+Y)*8—>AL。

第三:

无符号数相减,结果存于BL,即X-Y—>BL。

第四:

两数相乘用SAL指令,左移一名即乘2,结果存于BL,即(X-Y)*2—>BL。

第五:

无符号数相减,结果存于AL,即(X+Y)*8-(X-Y)*2—>AL。

第六:

两数相除用SAR指令,右移4位等于除6,结果存于Z,即

((X+Y)*8-(X-Y)*2)/16—>Z。

流程图:

①:

②:

 

4)

(1)代码如下:

(2)代码如下:

DATASEGMENTDATASEGMENT

XDB2XDB48

YDB10YDB30

WDB20ZDB?

ZDB?

DATAENDS

DATAENDSCODESEGMENT

CODESEGMENTASSUMECS:

CODE,DS:

DATA

ASSUMECS:

CODE,DS:

DATASTART:

MOVAX,DATA

START:

MOVAX,DATAMOVDS,AX

MOVDS,AXMOVAL,X

XORAX,AX;将AX置0ADDAL,Y

MOVAL,WMOVCL,3

SUBAL,X;W-XSALAL,CL;(X+Y)*8

MOVBL,10MOVBL,X

MULBL;(W-X)*10SUBBL,Y

ADDAX,5;(W-X)*10+5SALBL,1;(X-Y)*2

MOVBH,XSUBAL,BL

ADDBH,Y;X+Y->(BH)MOVCL,4

DIVBH;商AL,余AHSARAL,CL;((X+Y)*8-(X-Y)*2)/16

MOVZ,ALMOVZ,AL

MOVZ+1,AHMOVAL,0

MOVAH,4CHMOVAH,4CH

INT21HINT21H

CODEENDSCODEENDS

ENDSTARTENDSTART

5.调试进程

输入程序并运行,编译结果无误。

6.实验结果

1)

……

通过T命令逐条执行后,AX、BX的内容发生了转变,而CX、DX、SP、BP、SI、DI、DS、ES、SS的内容都没改变,CS也没变成0B01H,IP内容随着用DEBUG的T命令逐条执行后发生了改变。

2)

……

因为有LOOPS语句,循环3次,因此:

AL刚开始为5EH,当执行完MOVAL,[BX]和执行完ANDAL,DF语句后,AL别离为61H,62H,63H;41H,42H,43H;执行完MOVAL,00后为00H;BX为0000H,当执行完INCBX后别离为0001H,0002H,0003H;CX开始为002BH,当执行完MOVCX,3后为0003H,执行完LOOP000C后别离为0002H,0001H,0000H。

大写字母改成小写字母的结果:

3)

(1)

T命令逐条执行后数据段中的结果别离为:

0002H=14,0000H=02,0001H=0A,

0003H=0F,0004H=05。

(2)

T命令逐条执行后数据段中的结果别离为:

0000H=30,0001H=1E,0002H=04。

7.总结

通过这次的实验,已经能够熟练利用DEBUG命令。

同时也学会利用简单的汇编指令编写程序,也了解了顺序程序语句的执行进程。

对讲义知识进一步明白得,收成专门大。

 

实验三分支循环程序设计

1.实验目的和要求

一、学习调试程序,查找逻辑错误;

二、学习分支语句的编程和调试;

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

2.实验环境

实验的硬件环境是:

IBM—PC机及其兼容机

实验的软件环境是:

操作系统:

DOS2.0以上;调试程序:

DEBUG.COM;文本编程程序:

EDIT.EXE、WPS.EXE;宏汇编程序:

MASM.EXE(或ASM.EXE);连接装配程序:

LINK.EXE;交叉引用程序:

CREF.EXE(可有可无)。

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

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?

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVCX,10

MOVAL,0

LEASI,MSG

L1:

MOVBL,[SI]

CMPBL,0

JBENEXT

INCAL

NEXT:

INCSI

LOOPL1

MOVM,AL

MOVAL,0

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

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

按上题方式查找一处逻辑错误。

DSEGSEGMENT

MSGDB13,15,7,25,24

MDB?

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVCX,4

MOVAL,MSG

MOVSI,OFFSETMSG+1

L1:

CMPAL,[SI]

JBNEXT

MOVAL,[SI]

NEXT:

LOOPL1

MOVM,AL

MOVAL,0

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

3.编程:

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

4.编程:

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

4.算法描述及实验步骤

(1)在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,发觉结果不正确,用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误。

(2)在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,发觉结果不正确,用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误。

(3)代码DSEGSEGMENT(4)DSEGSEGMENT

MSGDB9,-1,-6,0,2,0,8,-5,0,6NUM1DB7,11,24,53,81,30,42,62

RESULTDB?

NUM2DB22,10,77,36,64,51,29,33

DSEGENDSRESULTDW?

CSEGSEGMENTDSEGENDS

ASSUMECS:

CSEG,DS:

DSEGCSEGSEGMENTPARAPUBLIC'CODE'

START:

MOVAX,DSEGASSUMECS:

CSEG,DS:

DSEG

MOVDS,AXSTART:

MOVAX,DSEG

MOVCX,10MOVDS,AX

MOVAL,0MOVCX,8

LEASI,MSGMOVBX,0

L1:

MOVBL,[SI]MOVSI,OFFSETNUM1

CMPBL,0MOVDI,OFFSETNUM2

JNENEXTL1:

MOVAL,[SI]

INCALMULBYTEPTR[DI]

NEXT:

INCSIADDBX,AX

LOOPL1INCDI

MOVRESULT,ALINCSI

MOVAL,0LOOPL1

MOVAH,4CHMOVRESULT,BX

INT21HMOVAL,0

CSEGENDSMOVAH,4CH

ENDSTARTINT21H

CSEGENDS

ENDSTART

(3)流程图:

(4)流程图:

 

等于0

不等于0

 

Y

N

 

5.调试进程

(1)运行程序,发觉结果错误:

发觉结果错误,单步执行,查找错误:

在执行“JBENEXT”命令时,到-2时,为有符号数,可是JBE为无符号数的比较,因此显现了结果错误,应把“JBE”改成“JLE”。

(2)进行编译连接、运行程序,结果如下:

发觉结果不正确。

单步执行,查找错误,结果如下:

发觉一直都是0D和0F两个数在比较,直至推出循环。

指针没有往下跳转,因此得犯错误答案。

在NEXT语句开始部份加上incSI语句,再执行LOOPL1语句。

6.实验结果

(1)

(2)

(3)

(4)

7.总结

通过这次实验,我了解了如何调试程序,查找逻辑错误,学会了一些分支语句的编程和调试和循环语句的编程和调试。

通过实践,对知识进行了巩固,加深了明白得,收成颇多。

实验四DOS功能挪用

1.实验目的和要求

1.学会DOS中关于显示功能挪用指令的用法。

2.领会修改显存方式显示字符。

2.实验环境

实验的硬件环境是:

IBM—PC机及其兼容机

实验的软件环境是:

操作系统:

DOS2.0以上;调试程序:

DEBUG.COM;文本编程程序:

EDIT.EXE、WPS.EXE;宏汇编程序:

MASM.EXE(或ASM.EXE);连接装配程序:

LINK.EXE;交叉引用程序:

CREF.EXE(可有可无)。

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

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

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

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

(1)明白得程序

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

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

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

DATASEGMENT

BUFDW4F59H,56A8H,0FF90H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVSI,0

P:

MOVBX,BUF[SI]

MOVCH,4

L:

MOVCL,4

ROLBX,CL

MOVDL,BL

ANDDL,0FH

CMPDL,10

JBNEXT

ADDDL,7

NEXT:

ADDDL,30H

MOVAH,2

INT21H

DECCH

JNZL

INCSI

INCSI

CMPSI,4

JNAP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

4、运行以下程序,在屏幕的第1行,会显示一个字符X,明白得程序段

STACKSEGMENT

DB128DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK

START:

MOVAX,STACK

MOVSS,AX

MOVSP,128

MOVAX,0B800H

MOVES,AX

MOVAH,0;BIOS10H的0号功能,设置80X25的彩色字符模式

MOVAL,03H

INT10H

MOVAH,'X'

MOVES:

[160*1+40*2],AH

MOVAL,0

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

5、显示

*********

*******

*****

***

*

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

4.算法描述及实验步骤

(1)挪用DOS的1号功能实现。

CODESSEGMENT

ASSUMECS:

CODES

START:

MOVAH,1

INT21H

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

(2)挪用DOS的10号和2号功能来实现字符串的显示。

DATASSEGMENT

BUFDB10,?

10DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

MOVDX,OFFSETBUF

MOVAH,0AH

INT21H

MOVDL,0DH;回车换行

MOVAH,02H

INT21H

MOVDL,0AH;回车换行

MOVAH,02H

INT21H

MOVCL,BUF

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

当前位置:首页 > 小学教育 > 其它课程

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

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