汇编上机实验报告.docx

上传人:b****5 文档编号:11572642 上传时间:2023-03-19 格式:DOCX 页数:29 大小:1.16MB
下载 相关 举报
汇编上机实验报告.docx_第1页
第1页 / 共29页
汇编上机实验报告.docx_第2页
第2页 / 共29页
汇编上机实验报告.docx_第3页
第3页 / 共29页
汇编上机实验报告.docx_第4页
第4页 / 共29页
汇编上机实验报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

汇编上机实验报告.docx

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

汇编上机实验报告.docx

汇编上机实验报告

实验一认识Tddebug集成操作软件实验日志

指导教师曾素华实验时间:

2013年04月02日

学院计算机科学与技术专业计算机科学与技术

班级0411005学号2010211912姓名李新娱实验室s401

一、实验题目

认识Tddebug集成操作软件

二、实验目的

1.熟悉汇编程序的开发过程。

2.认识Tddebug集成操作软件。

3.掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。

4.掌握INT21H软件中断来调用DOS内部子程序的方法

三、实验内容及说明

1.实验内容:

数据传送实验

1)编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。

参见示例出程序。

2)修改此程序,采用字符串传送指令完成。

2.实验中使用DOS功能调用(INT21H):

参见教材《32位微型计算机原理与接口技术》89页

(1)显示字符串

入口:

AH=09H

调用参数:

DS:

DX=串首地址,‘$’为结束字符。

(2)返回DOS系统

入口:

AH=4CH

调用参数:

AL=返回码

四、实验主要步骤

要求一数据传送实验

1.运行Tddebug软件,选择Edit菜单编写实验程序

2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。

3.使用Rmrun菜单中的Run运行程序,观察运行结果。

4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。

单步执行数据传送指令后,观察各寄存器及数据区的内容。

过程如下:

3)按F7单步执行,在代码区中有一个三角,表示正在执行的指令。

每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。

4)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:

●方法1:

在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:

“DS或ES寄存器的值:

偏移地址”,即可显示用户指定的数据区

●方法2:

选择菜单View|Dump,弹出内存数据显示窗口。

3)查看执行结果:

按Alt+F5,切换到用户窗口。

5.更改数据区中的数据,考察、调试程序的正确性。

五、心得体会

通过本次试验我初步认识了汇编程序的开发过程,了解了Tddebug软件,在一开始的试验中反应太慢没有跟上老师,但在自主实践缓解通过与同学交流完成了实验,虽然对代码还不是很熟悉,但Tddebug软件的操作方法已经熟悉,并且掌握了在此环境的编辑、编译、链接汇编语言的程序方法和INT21H的中断调用来调用DOS内部子程序的方法。

实验二I/O程序设计实验日志

指导教师邹洋实验时间:

2013年04月16日

学院计算机科学与技术专业计算机科学与技术

班级0411005学号2010211912姓名李新娱实验室s401

一、实验题目

I/O程序设计

二、实验目的

1.理解软中断的调用方法及中断过程。

2.掌握INT21H软件中断来调用DOS系统I/O子程序的方法。

3.掌握将存储在内存单元中的数据在屏幕上显示的方法。

4.掌握从键盘输入信息到内存的方法。

三、实验要求

1.将指定数据区中一个字节的数据以十六进制数形式显示在屏幕上。

设计思路:

首先将该数以十六进制数形式分解,然后将每一位分别转换为ASCII码送屏幕显示。

其中0H~9H之间的数加30H,即可得0H~9H的ASCII码,而AH~FH的ASCII码,则需再加7H,参见表5-1。

参考程序流程如图2-1所示。

示例程序参见参考程序清单。

2.编程由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。

3.从键盘输入两个1位十进制数,计算二者之和,并将结果显示在屏幕上。

4.编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上。

四、实验主要步骤

要求二由键盘输入任意一个字符,将ASCII码值显示在屏幕上

1.画出实验流程图。

参考代码:

;将指定数据区SD的数据以十六进制数形式显示在屏幕上

DATASEGMENT

MESDB'Showaashex:

',0AH,0DH,'$'

SDDB'a'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMES;显示提示信息

MOVAH,09H

INT21H

MOVSI,OFFSETSD

MOVAL,DS:

[SI]

ANDAL,0F0H;取高4位

MOVCL,4

SHRAL,CL

CMPAL,0AH;是否是A以上的数

JBC2

ADDAL,07H

C2:

ADDAL,30H

MOVDL,AL;显示字符

MOVAH,02H

INT21H

MOVAL,DS:

[SI]

ANDAL,0FH;取低4位

CMPAL,0AH

JBC3

ADDAL,07H

C3:

ADDAL,30H

MOVDL,AL;显示字符

MOVAH,02H

INT21H

MOVAH,4CH;返回DOS

INT21H

CODEENDS

ENDSTART

2.运行Tddebug软件,选择Edit菜单编写实验程序

3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。

4.使用Rmrun菜单中的Run运行程序,观察运行结果。

5.使用Rmrun菜单中的Debug调试程序。

单步执行指令,观察各寄存器及数据区的内容。

要求三从键盘输入两个1位十进制数,计算二者之和。

codesegment

assumecs:

code

start:

movcx,2

movbl,0

next:

movah,1

int21h

subal,30h

jcnext

cmpal,9h

janext

addal,bl

daa

movbl,al

movdl,13

movah,2

int21h

movdl,10

int21h

loopnext

movcl,4

movdh,2

next1:

rolbl,cl

movdl,bl

anddl,0fh

adddl,30h

movah,2

int21h

decdh

jnznext1

movah,1

int21h

movah,4ch

int21h

codeends

endstart

五、心得体会

这次实验再次实践了Tddebug软件的使用方法,让我更深层次理解了软中断的调用方法及中断过程,掌握了INT21H软件中断来调用DOS系统I/O子程序的方法和讲存储在内存单元中的数据在屏幕上显示的方法,并且掌握了从键盘输入信息到内存的方法。

在这次实验中我还自己动手写了代码,虽然很多不会都咨询了同学,但后来还是成功实现了功能。

 

实验三分支程序设计实验日志

指导教师邹洋实验时间:

2013年04月28日

学院计算机科学与技术专业计算机科学与技术

班级0411005学号2010211912姓名李新娱实验室s401

一、实验题目

分支程序设计

二、实验目的

1.掌握比较指令、条件转移指令的用法

2.掌握分支结构程序的组成

3.掌握分支程序的设计、调试方法

三、实验要求

1.判断X的大小,并根据判断结果以不同方式分别显示。

2.键入一个数,判断数是否在5

3.编写程序,在屏幕上显示一组菜单,根据键盘输入的菜单编号,提示你选择的菜单名。

4.从键盘输入一个字符,判断该字符是小写字母、大写字母、数字或其他字符,并给出相应的提示。

四、实验主要步骤

要求一判断X的大小,并根据判断结果以不同方式分别显示。

1.画出实验流程图。

参考代码:

;设NUMBER单元的数X以及数值N1,N2均为单字节无符号数,请判断X的大小,并根据判断结果分别显示:

N1<=X<=N2,或XN2。

DATASEGMENTUSE16

MESG1DB'N1<=X<=N2$'

MESG2DB'X

MESG3DB'X>N2$'

NUMBERDB66;无符号数X

N1EQU22

N2EQU88

DATAENDS

CODESEGMENTUSE16

ASSUMECS:

CODE,DS:

DATA

BEG:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMESG1

CMPNUMBER,N1

JAENEXT;X≥N1转

MOVDX,OFFSETMESG2

JMPDISP

NEXT:

CMPNUMBER,N2

JBEDISP;X≤N2转

MOVDX,OFFSETMESG3

DISP:

MOVAH,9

INT21H;显示结果信息

MOVAH,4CH

INT21H;返回DOS

CODEENDS

ENDBEG

2.运行Tddebug软件,选择Edit菜单编写实验程序

3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。

4.使用Rmrun菜单中的Run运行程序,观察运行结果。

5.使用Rmrun菜单中的Debug调试程序。

观察构成分支条件的各标志的变化情况及相关寄存器内容。

6.更改数据区中的数据,考察程序的正确性。

要求二键入一个数,判断数是否在5

DATASEGMENTUSE16

MESG1DB'0$'

MESG2DB'-1$'

NUMBERDB66

N1EQU5

N2EQU24

DATAENDS

CODESEGMENTUSE16

ASSUMECS:

CODE,DS:

DATA

BEG:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMESG1

MOVAH,01H

INT21H

MOVBL,AL

SUBBL,30H

CMPBL,N1

JGNEXT

MOVDX,OFFSETMESG2

JMPDISP

NEXT:

CMPBL,N2

JBDISP

MOVDX,OFFSETMESG2

DISP:

MOVAH,9

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEG

五、心得体会

在上一次实验的基础上,我掌握了比较指令、转移指令使用方法,并初步了解了分支程序的设计、调试方法。

这次要求里面的代码对我来说有点难,不能像以前一样的照猫画虎,让我只能自主思考,主动学习指令并应用。

 

实验四循环程序设计实验日志

指导教师邹洋实验时间:

2013年05月14日

学院计算机科学与技术专业计算机科学与技术

班级0411005学号2010211912姓名李新娱实验室s401

一、实验题目:

循环程序设计

二、实验目的:

1.掌握比较指令、转移指令和循环指令的使用方法

2.掌握循环结构程序的组成

3.掌握循环程序的设计、调试方法

三、实验要求:

1.求某数据区内负数的个数

为统计数据区内负数的个数,需逐个判别区内的每一个数据,然后将所有数据中凡是符号位为1的数据个数累加起来,即得到区内包含负数的个数。

参见程序清单.

2.试编程统计数据区中正数、零和负数的个数。

3.编程求无符号数字节序列中最大值和最小值

实验中可使用BH和BL作为暂存现行最大值和最小值,且在初始时将BH和BL初始化为首字节的内容,循环依次比较每个字节的内容,求得最大值(存于BH中)和最小值(存于BL中),送屏幕显示。

4.从键盘输入一字符串,搜索该字符串中是否有字符“A”,若有请输出其在串中的位置。

四、实验主要步骤:

要求1求某数据区内负数的个数

1.画出实验流程图。

参考代码:

;确定数据区NUMB中负数的个数(存放于BL中)

DDATASEGMENT

NUMBDB12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01H

MESDB'Thenumberofnegativeis:

$'

DDATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DDATA

START:

MOVAX,DDATA

MOVDS,AX

MOVDI,OFFSETNUMB

XORBL,BL

MOVCX,10

A1:

MOVAL,[DI]

TESTAL,80H

JEA2

INCBL

A2:

INCDI

LOOPA1;统计负数个数

MOVDX,OFFSETMES

MOVAH,09H

INT21H

MOVAL,BL;显示负数个数,注意与实验二所使用的方法的区别

MOVCX,2

A3:

PUSHCX

MOVCL,4

ROLAL,CL

POPCX

MOVBL,AL

ANDAL,0FH

CMPAL,0AH

JBA4

ADDAL,07H

A4:

ADDAL,30H

MOVDL,AL

MOVAH,02H

INT21H

MOVAL,BL

LOOPA3

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.运行Tddebug软件,选择Edit菜单编写实验程序

3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。

4.使用Rmrun菜单中的Run运行程序,观察运行结果。

5.使用Rmrun菜单中的Debug调试程序。

观察构成分支、循环条件的各标志的变化情况及相关寄存器内容。

6.更改数据区中的数据,考察程序的正确性。

要求三从键盘输入一字符串,搜索该字符串中是否有字符“A”,若有请输出其在串中的位置。

DATASSEGMENT

cap1db"pleaseinputastring",0dh,0ah,"$"

cap2db"plesaeinputtheletteryousearch",0dh,0ah,"$"

str0db40,?

40dup(0)

str1db40dup(0)

DATASENDS

STACKSSEGMENT

dw40hdup(?

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

movdx,offsetcap1;输出提示“pleaseinputastring"

movah,09h

int21h

movdx,offsetstr0;输入一行字符串

;movdh,0ah;此处错误

movah,0ah

int21h

movdl,0ah;以下三行是实现换行功能

movah,02

int21h

movdl,13;以下三行是实现回车功能

movah,02

int21h

movdx,offsetcap2

movah,09h

int21h

movah,01h

int21h

leasi,str0

leadi,str1

;movdh,dl;此处错误,输入放在al中

movdh,al

callsearch

xordh,dh

movcx,dx

;leadi,str0;以下几句是实现依次输入找到的字符串的位置

leadi,str1;

l4:

;loopzl5

;movcl,[di]

movdl,byteptr[di]

cmpdl,0

jzl5

adddl,30h

movah,02h

int21h

movdl,'.'

movah,02h

int21h

incdi

jmpl4

l5:

MOVAH,4CH

INT21H

searchproc;子程序

pushf

pushax

;movcx,[si+1];此处修改

xorcx,cx

movcl,byteptr[si+1]

movdl,0

movax,1

l3:

cmp[si+2],dh

jnzl1

incdl

mov[di],al

incdi

l1:

incax

cmpax,cx

jal2

incsi

jmpl3

l2:

popax

popf

ret

searchendp

CODESENDS

ENDSTART\

五、心得体会:

在上一次实验的基础上,熟悉了比较指令和转移指令,着重学习了循环指令及循环指令的使用方法和循环结构程序的组成,并初步了解了循环程序的设计、调试方法。

循环程序的设计对于我是,在课后还需要巩固加深。

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

当前位置:首页 > 经管营销 > 经济市场

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

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