微机实验二报告模板.docx

上传人:b****6 文档编号:6852434 上传时间:2023-01-11 格式:DOCX 页数:20 大小:76.18KB
下载 相关 举报
微机实验二报告模板.docx_第1页
第1页 / 共20页
微机实验二报告模板.docx_第2页
第2页 / 共20页
微机实验二报告模板.docx_第3页
第3页 / 共20页
微机实验二报告模板.docx_第4页
第4页 / 共20页
微机实验二报告模板.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

微机实验二报告模板.docx

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

微机实验二报告模板.docx

微机实验二报告模板

广州大学学生实验报告

开课学院及实验室:

教育学院电子信息楼5032012年11月05日

学院

教育学院

年级、专业、班级

教育技术学

姓名

陈庆华

学号

1008200029

实验课程名称

计算机组成原理

成绩

实验项目名称

实验二汇编语言程序设计实验

指导

老师

孔维宏

实验二汇编语言程序设计实验

一、汇编常用软件的使用

一、实验目的

1、熟悉要用到一些DOS命令(CD,DIR,COPY,TYPE,EXIT,RENAME等);

2、熟悉汇编语言的上机过程;

3、熟悉伪指令:

SEGMENT,ENDS,ASSUME,END,OFFSET;

4、常用DEBUG命令的使用

5、了解字符、字符串输出的方法和返回DOS系统的方法。

二、实验器材

计算机,汇编相关程序,WAVE6000实验仿真器

三、实验原理

1、运行汇编语言源程序必备的条件:

当前盘上必须包括如下文件:

MASM汇编程序文件

LINK连接程序文件

EDIT全屏幕文本编辑程序文件(或其他文本编辑文件)

DEBUG调试工具文件

2、汇编语言上机的四个步骤:

(1)编辑源程序:

建立或编辑一个扩展名为ASM源程序文件;

(2)汇编程序:

源程序经过汇编后可产生机器码的目标文件,扩展名为OBJ。

如果在编程序中有任何语法错误,汇编程序将会给出错误信息。

经过汇编程序汇编后,实际可产生三个文件,即:

目标文件OBJ,列表文件LST和交叉文件CRF。

3、连接程序:

汇编后产生的目标文件必须经过连接,形成可执行文件EXE,然后就可以在DOS状态下执行程序。

4、调试程序:

DEBUG是调试汇编语言程序的工具,它具有跟踪程序的运行、显示修改内存与寄存器的内容等功能,因此在调试中可以寻找错误和修改错误,可以对小段程序进行汇编,是调试各种应用程序的极其方便的工具。

经过DEBUG调试后的程序,必须重新进行编辑、汇编和连接后才可执行。

5、DEBUG的主要特点:

(1)能够在最小环境下运行汇编程序;

(2)提供简单的修改手段;

(3)提供用户和计算机内部联系的窗口;

四、实验步骤

(一)常用软件的使用

1、在系统盘下建立一个文件夹MASM,将MASM、EDIT、LINK和DEBUG四个文件复制到此目录下;

2、点击“开始”菜单——“程序”----“附件”--------“DOS命令提示符”,进入到DOS状态;

3、利用CD命令进入到MASM文件夹中

CD\

CDMASM

4、利用DIR命令查看是否有这些文件,如果无则要重新复制

5、进入EDIT程序,输入下列内容:

datasegment

notedb'hello,world!

','$'

dataends

codesegment

assumecs:

code,ds:

data

begin:

movax,data

movds,ax

movdx,offsetnote

movah,09h

int21h

movah,4ch

int21h

codeends

endbegin

保存文件名为你的学号_01.ASM

6、汇编程序:

masm汇编源程序文件名

7、连接程序:

LINK目标文件名

8、执行可执行文件,查看结果

9、按如上方法(5-8步骤),输入下列内容:

codesegment

assumecs:

code

start:

moval,32h

movdl,37h

adddl,al

subdl,30h

movah,2

int21h

movah,4ch

int21h

codeends

endstart

保存文件名为你的学号_02.ASM

10、用EXIT退出DOS系统

(二)DEBUG常用命令的使用

1、通过DEBUG编写和运行汇编程序

(1)进入到DEBUG状态:

进入到MASM目录中,输入DEBUG执行DEBUG调试程序。

进入DEBUG状态的标志是:

屏幕显示“—”

(2)输入程序并汇编:

用DEBUG的A命令送入程序。

在DEBUG状态,输入A,然后回车。

当输入A命令时会自动产生程序所送内容单元的段地址和偏移地址,通过偏移地址可以看到每条指令站内存单元的字节数。

当程序段送完时,只键入回车键,就退出汇编状态(A状态)回到DEBUG状态“—”。

其中输入数据为16进制,DEBUG状态下程序中的数据都按16进制来处理,不需要键入H来表示。

输入以下程序:

MOVAL,32

MOVDL,37

ADDDL,AL

SUBDL,30

MOVAH,2

INT21

INT20

(3)执行程序:

用DEBUG的G命令执行刚刚汇编的程序。

在DEBUG状态下直接输入G,回车,查看结果。

(4)反汇编:

可以用反汇编U命令将键入的程序调出,并可以得到每条汇编指令的机器码。

在DEBUG状态输入:

U10010D

(5)退出DEBUG返回DOS状态:

用Q命令退出。

2、DEBUG常用命令的使用

(1)汇编命令A

  格式:

A[段寄存器名]:

[偏移地址]

A[段寄存器地址]:

[偏移地址]

A[偏移地址]

A

功能:

该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。

其中最后一个格式的偏移地址为0100H。

(2)检查和修改寄存器命令R

∙显示CPU内所有寄存器内容和标志位状态,其格式为:

   -R

   例如:

   -r

   AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000

   DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100    NVUPDIPLNZNAPONC

   18E4:

0100 C70604023801   MOV   WORDPTR[0204],0138   DS:

0204=0000

   其中标志位状态的含义可见下表:

标 志 名

标志为1

标志为0

OF

DF

IF

SF

ZF

AF

PF

CF

溢出(是/否)

方向(减量/增量)

中断(允许/关闭)

符号(负/正)

零(是/否)

辅助进位(是/否)

奇偶(偶/奇)

进位(是/否

OV

DN

EI

NG

ZR

AC

PE

CY

NV

UP

DI

PL

NZ

NA

PO

NC

∙显示和修改某个寄存器内容,其格式为:

   -R registername

   例如,键入

   -r ax

   系统将响应如下:

   AX F1F4

  :

   即AX寄存器的当前内容为F1F4,如不修改则按Enter键,否则,键入欲修改的内容如:

   -r bx

   BX 0369

   :

059F

   则把BX寄存器的当前内容修改为059F。

∙显示和修改标志位状态,命令格式为:

   -RF

   系统将响应,如:

   OVDNEINGZRACPECY-

   此时如不修改其内容可按Enter键,否则,建入欲修改的内容,如:

   OVDNEINGZRACPECY–PONZDINV即可,键入的顺序是任意的。

(3)追踪与显示命令T

   T[=address]

   从指定地址起执行一条指令后停下来,显示所有寄存器内空及标志位的值。

如未指定则从当前的CS:

IP开始执行。

(4)反汇编命令U

从指定地址开始,反汇编32个字节,其格式为:

   U[range]

   例如:

 -u100

   如果地址被省略则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。

(5)运行命令G

   -G [=address1][address2[address3 ...]]

   其中,地址1指定了运行的起始地址,如不指定则从当前的CS:

IP开始运行。

后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。

(6)结束命令Q

-Q

它退出DEBUG,返回DOS。

3、利用DEBUG调试EXE文件

(1)通过EDIT编辑源程序;

(2)用MASM程序汇编源程序;

(3)用连接程序形成可执行文件

(4)用DEBUG调试可执行文件

●用DEBUG调入可执行文件;

●用U命令查看程序是否进入内存;

●用R、T命令跟踪程序的执行的过程并察看CPU内部寄存器的内容。

(5)DOS状态下查看程序清单和执行结果

五、实验数据

两个源程序。

程序一:

datasegment

notedb'hello,world!

','$'

dataends

codesegment

assumecs:

code,ds:

data

begin:

movax,data

movds,ax

movdx,offsetnote

movah,09h

int21h

movah,4ch

int21h

codeends

endbegin

程序二:

codesegment

assumecs:

code

start:

moval,32h

movdl,37h

adddl,al

subdl,30h

movah,2

int21h

movah,4ch

int21h

codeends

endstart

 

六、实验结果分析

1、指出寄存器发生的变化和写出结果。

寄存器发生的变化:

①AX=0032IP从0100变为0102

②DX=0037IP从0102变为0104

③DX=0069IP从0104变为0106

④DX=0039IP从0106变为0109

⑤DX=0232IP从0109变为010B

2、写出实验结果。

试验结果:

程序一:

hello,world!

程序二:

9

二、字符及字符串的输入输出程序的编写与调试

一、实验目的

1、通过实验掌握基本的寻址方式;

2、理解指令的功能,熟悉DEBUG的调试命令;

3、掌握字符输入输出的方法;

4、掌握字符串输入输出的方法;

5、进一步了解DOS系统功能调用。

二、实验器材

计算机,汇编相关程序,WAVE6000实验仿真器

三、实验原理

1、单字符输入(1号调用)

格式:

MOVAH,01H

 INT21H

功能:

从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示

2、单字符显示(2号调用)

格式:

MOVDL,待显示字符的ASCII码

 MOVAH,02H

 INT21H

功能:

将DL寄存器中的字符送显示器显示

3、结束调用(4C号调用)

格式:

MOVAH,4CH

 INT21H

功能:

终止当前程序并返回调用程序

4、INT20H,在DEBUG下正常结束程序

5、字符串的输入(10号功能调用):

其作用是从键盘输入字符串。

在调用前首先要建立一个输入缓冲区,规定缓冲区的第一个字节用来存放输入字符串的最大长度,可以由用户根据需要设定,第二个字节用来存放实际输入的字符数,在DOS返回时自动赋值,从第三个字节开始存放实际输入的字符串,串的输入以回车作为结束符。

格式:

LEADX,缓冲区首偏移地址

MOVAH,0ah

INT21H

功能:

从键盘上输入一字符串到用户定义的输入缓冲区中,并送显示器显示

6、字符串显示(9号功能调用)

格式:

LEADX,待显示字符串首偏移地址

 MOVAH,09H

 INT21H

功能:

将当前数据区中以‘$’结尾的字符串送显示器显示

四、实验步骤

1、假设DS=2000H,ES=2100H,SS=1500H,请通过实验指出下列指令的寻址方式:

MOVAX,1234

MOVBX,1002

MOVDL,39

ADDAX,BX

INCBX

DECDL

MOVSI,3

Int20

注意:

本步骤实验只要求在DEBUG状态下进行。

(1)、首先进入DEBUG状态,用R命令修改各寄存器的内容,以满足题目的要求;

(2)、用A命令写入要实验的8条语句;

(3)、用T命令单步执行,观察并记录运行的结果;

2、编写汇编语言程序,要求将键盘输入的一个大写字母用小写字母显示出来。

要求用两种方法调试出结果,即DEBUG方法和编辑、汇编和连接的方法。

参考程序如下:

codesegment

assumecs:

code

start:

movah,01h

int21h

addal,20h

movdl,al

movah,02h

int21h

movah,4ch

int21h

codeends

endstart

3、编写汇编语言程序,要求先提示用户输入,然后将用户的输入直接显示出来。

datasegment//DATA段定义开始

msgdb'whatisyourname:

$'//给变量msg定义存储单元,db表示定义字节数据

bufdb30,?

30dup(?

)//给变量buf定义存储单元,db表示定义字节数据,?

只分配存储单元,不定义初值。

带DUP的表达式,定义重复数据。

dataends//DATA段定义结束

codesegment//CODE段定义开始

assumecs:

code,ds:

data//运行程序时,需要通过段寄存器访问存储单元,ASSUME指令就是用来建立段寄存器与段之间关系

begin:

movax,data//begin为程序的起始标号;将data段的起始地址传送给ax

movds,ax//将ax的内容传送给ds,完成数据段寄存器的加载

movdx,offsetmsg//offset计算变量或标号的段内偏移地址,也可以用leadx,msg来实现以下3句为9号调用

movah,09h

int21h

movdx,offsetbuf

movah,0ah

int21h

movah,4ch

int21h

codeends//CODE段结束

endbegin//用结束伪指令END加载程序的起始地址。

五、实验数据

写出编写的程序清单。

程序一:

MOVAX,1234

MOVBX,1002

MOVDL,39

ADDAX,BX

INCBX

DECDL

MOVSI,3

Int20

程序二:

datasegment

msgdb'whatisyourname:

$'

bufdb30,?

30dup(?

dataends

codesegment

assumecs:

code,ds:

data

begin:

movax,data

movds,ax

movdx,offsetmsg

movah,09h

int21h

movdx,offsetbuf

movah,0ah

int21h

movah,4ch

int21h

codeends

endbegin

六、实验结果分析

1、分析程序调试过程中出现的错误,是如何解决的。

程序出现错误通过查书本和询问同学,细心调查解决。

2、写出程序运行的结果。

程序一运行的结果:

输入一个大写字母用小写字母显示出来,例如输入大写字母A,则屏幕显示的结果为Aa。

程序二运行的结果:

提示用户输入,然后将用户的输入直接显示出来。

例如输入zhaoyanjiao,则屏幕显示的结果为:

whatisyourname:

zhaoyanjiao

3、分析执行每个命令后相应寄存器的变化。

程序一的变化:

①BX从0000变为1002IP从0103变为0106

②BX从0000变为1002IP从0103变为0106

③DX变为0039IP从0106变为0108

④AX变为2236BX=1002IP从0108变为010A

⑤BX=1003IP从010A变为010B

⑥DX=0038IP从010B变为010D

⑦IP从0108变为0110

IP从0110变为0172

4、写出寻址方式。

MOVAX,1234是立即寻址

MOVBX,1002是寄存器间寻址

MOVDL,39是立即寻址

ADDAX,BX是寄存器间寻址

MOVSI,3是立即寻址

movax,data是直接寻址

Movds,ax是寄存器寻址

movdx,offsetmsg是寄存器间接寻址

movah,09h是立即寻址

movdx,offsetbuf是寄存器间接寻址

movah,0ah是立即寻址

movah,4ch是立即寻址

三、存储器块清零

一、实验要求

指定存储器中某块的起始地址和长度,要求能将其内容清零。

二、实验目的

1.掌握存储器读写方法

2.了解存储器的块操作方法

三、实验说明

通过本实验,学生可以了解读写存储器的读写方法,同时也可以了解单片机编程,调试方法。

如何将存储器块的内容置成某固定值(例全填充为0FFH)?

请学生修改程序,完成此操作。

四、参考程序

1、参考程序

datasegment

Blockdb256dup(55h)

dataends

codesegment

assumecs:

code,ds:

data

startprocnear

movax,data

movds,ax

movbx,offsetBlock;起始地址

movcx,256;清256字节

Again:

mov[bx],byteptr0

incbx

LoopAgain;记数减一

jmp$

codeends

endstart

五、实验步骤

(1)进入Wave6000,输入程序并检查,保存程序。

(2)“编译”程序。

(3)“全速执行”程序。

(4)“暂停”程序运行,在“数据窗口(MEMOREY)”查看0400H起始的单元内容,并记录。

(5)在指令“jmp$”处设断点。

(6)“全速执行”程序。

(7)在“数据窗口(MEMOREY)”查看0400H起始的单元内容,记录并分析实验结果。

六、实验结果分析

 

四、内存块移动

一、实验要求

将指定源地址和长度的存储块移到指定目标位置

二、实验目的

1.了解内存的移动方法。

2.加深对存储器读写的认识。

三、实验说明

块移动是计算机常用操作之一,多用于大量的数据复制和图象操作。

本程序是给出起始地址,用地址加一方法移动块,请思考给出块结束地址,用地址减一方法移动块的算法。

另外,若源块地址和目标块地址有重叠,该如何避免?

四、程序框图

;移动256字节

datasegment

Sourcedb256dup(055h)

Targetdb256dup(0aah)

dataends

codesegment

assumecs:

code,ds:

data,es:

data

startprocnear

movax,data

movds,ax

moves,ax

movsi,offsetSource

movdi,offsetTarget

movcx,256

repmovsb

jmp$

codeends

endstart

五、实验步骤

(1)进入Wave6000,输入程序并检查,保存程序。

(2)“编译”程序。

(3)在指令“jmp$”处设断点。

(4)“全速执行”程序。

(5)在“数据窗口(MEMOREY)”分别查看0400H、0500H开始256个单元的内容,记录并分析实验结果。

六、实验结果分析

1、实验结果:

256个aah全部被256个55h所代替。

2、用地址减一方法移动块的算法程序如下:

datasegment

Sourcedb256dup(055h)

Targetdb256dup(0aah)

dataends

codesegment

assumecs:

code,ds:

data,es:

data

startprocnear

movax,data

movds,ax

moves,ax

movsi,offsetSource

movdi,offsetTarget

Addsi:

255

Adddi:

255

std

movcx,256

repmovsb

jmp$

codeends

endstart

3、如果出现源块地址与目标地址有重叠可以采用一下的办法来避免:

把源块地址的第一个块移动到目标地址的最后一个块,把源块地址的第二个块移动到目标地址的倒数第二个块,依次类推就可以避免出现源块地址与目标地址有重叠的情况。

五、数据排序

一、实验要求

给出一组随机数,将此组数据排序,使之成为有序数列

二、实验目的

了解数据排序的简单算法。

三、实验说明

有序的数列更有利于查找。

本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在

数列的最后面。

再进行下一轮比较,找出第二大数据,直到全部数据有序。

四、程序框图

Lenequ10

datasegment

Arraydb5,2,1,0,2,3,8,6,5,9

Changedb0

dataends

codesegment

assumecs:

code,ds:

data

startprocnear

movax,data

movds,ax

Sort:

movbx,offsetArray

movcx,Len-1

movChange,0

Goon:

moval,byteptr[bx]

incbx

cmpal,byteptr[bx]

jngNext;前小后大,不交换

movChange,1;前大后小,置交换标志

movah,[bx]

mov[bx],al;交换

mov[bx-1],ah

Next:

loopGoon

cmpChange,0

jneSort

jmp$

codeends

endstart

五、实验步骤

(1)进入Wave6000,输入程序并检查,保存程序。

(2)“

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

当前位置:首页 > 高等教育 > 农学

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

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