微型计算机原理与接口技术实验课讲义.docx

上传人:b****4 文档编号:5462488 上传时间:2022-12-16 格式:DOCX 页数:63 大小:886.32KB
下载 相关 举报
微型计算机原理与接口技术实验课讲义.docx_第1页
第1页 / 共63页
微型计算机原理与接口技术实验课讲义.docx_第2页
第2页 / 共63页
微型计算机原理与接口技术实验课讲义.docx_第3页
第3页 / 共63页
微型计算机原理与接口技术实验课讲义.docx_第4页
第4页 / 共63页
微型计算机原理与接口技术实验课讲义.docx_第5页
第5页 / 共63页
点击查看更多>>
下载资源
资源描述

微型计算机原理与接口技术实验课讲义.docx

《微型计算机原理与接口技术实验课讲义.docx》由会员分享,可在线阅读,更多相关《微型计算机原理与接口技术实验课讲义.docx(63页珍藏版)》请在冰豆网上搜索。

微型计算机原理与接口技术实验课讲义.docx

微型计算机原理与接口技术实验课讲义

实验一汇编语言编辑环境与调试命令的认识

一、实验目的

1、熟悉EDIT编写汇编程序的环境;

2、学习debug调试命令。

二、实验仪器

TDN86/51教学实验系统,计算机

三、实验内容与步骤

(1)、用记事本或EDIT进行汇编程序编辑

可编辑汇编程序的环境很多,记事本和EDIT是其中常用的两种方法。

进入记事本很简单,这里不再介绍。

进入EDIT的方法:

开始→运行→command→进入DOS界面→edit回车→进入EDIT编辑环境→编辑汇编程序→程序完成后以“文件名.asm”(文件名不能是中文,一定要是字母,而字母不能超过8个,asm是扩展名)存盘。

.asm文件是不能运行的,需要把它变成可执行文件(.exe)。

它的变化过程是:

Masmlink

.asm→→→.obj→→→.exe

练习1:

在EDIT中编写一个程序,实现数据段中的两个32位数X、Y相加,结果存到数据段Z中。

并以dadd.asm文件名保存。

(2)、目标文件(.obj)、可执行文件(.exe)的产生

运行masm程序,产生.obj文件,并且检查程序是否有语法错误。

如果有语法错误,会有提示,在哪一行有什么样的错误(是英文提示)。

根据提示,再进入EDIT中,打开源文件进行修改,直到没有语法错误为止。

运行link程序,产生.exe可执行文件。

通过运行可执行文件,观察该程序是否能实现相应的功能。

如若不能,进入debug进行调试。

(3)、debug调试工具

debug是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。

1、debug程序的调用

在DOS的提示符下,可键入命令:

C>debug路径\文件名.exe(回车)

其中,文件名是被调试文件的名字(注意:

该文件一定要是.exe文件)。

如用户键入文件名,则debug将指定的文件装入存储器中,用户可对其进行调试。

如果未键入文件名,则用户可以用debug命令N和L把需要的文件装入存储器后在进行调试。

在debug程序调入后,将出现提示符-,此时就可用debug命令来调试程序。

2、debug的主要命令

1显示存储单元的命令D,格式为:

-D地址从指定地址起显示80个字节的内容;

-D范围显示所指定范围内的内容,指定范围为起始地址和终止地址;

-D显示从上一个D命令的最后一个单元后面的80个字节的内容,或者在D未使用过的情况下,显示DS:

0100为起始的内容。

例如,按指定范围显示存储单元内容的方法为:

-d100120

其中100120给出显示存储单元的范围。

这里没有指定段地址,D命令自动显示DS段的内容。

2修改存储单元内容的命令

输入命令E,有两种格式如下:

-E地址[内容表]用指定的内容表去修改指定地址开始的存储器中内容

例如

-EDS:

120F3A5’XYZ’96

表示用F3、A5、’X’、’Y’、’Z’、96共6个字节代替了DS:

120至DS:

125中的内容

-E地址逐个单元修改内容

例如

-ECS:

100屏幕显示为:

18E4:

010089.-

用户可以键入’78’,修改次内容,再键入空格键显示下一个内容,不修改时可用空格键跳过,逐个修改存储器内容,直到回车键结束。

3填入命令格式F

-F范围(内容表)将内容表中内容填入所指定的范围。

例如

-F18E4:

0200L1000

将0200H单元开始的16个字节全部填入0。

若内容表中字节数超过指定范围,则忽略超过项,若内容表中字节数小于指定范围,则反复填入,直到填满所有单元为止。

4检查和修改寄存器命令R

格式有三种:

-R显示CPU内所有寄存器内容和标志位状态

-R寄存器名显示和修改某一个寄存器内容

例如

-RAX屏幕显示:

AX1200

;AX当前内容为1200,若不修改则按回车键,否则键入要修改的内容。

如:

-RBX

BX0369

059F

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

RF显示和修改标志位内容

例如-RF屏幕显示:

OVDNEINGZRACPECY—

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

OVDNEINGZRACPECY—PONZDINV

即可,可见键入的顺序可以是任意的。

5运行命令G

格式为:

-G[=地址1][地址2[地址3…]]

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

IP开始运行。

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

6跟踪命令T

格式有两种:

-T=地址单条指令跟踪,执行指定地址的一条指令,并显示CPU所有寄存器内容,标志位的状态,及下条指令的地址和内容。

若命令中没有指定地址,则从当前CS:

IP开始执行。

-T=地址N,N为多条指令跟踪,从指定地址开始执行指令,共执行指定的N条后停止,每执行一条就显示CPU中所有寄存器内容,标志位的状态及下条指令的地址和内容。

⑦汇编命令A

格式为:

-A地址

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

debug把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明。

⑧反汇编命令U

有两种格式:

-U地址从指定地址开始,反汇编32个字节,若没有指定地址,则接着上一个U命令继续向下反汇编,若没有用过U命令,则从CS:

0100开始反汇编。

-U范围对指定范围的存储单元反汇编,可指定起始地址,结束地址,也可指定起始地址及长度。

例如:

–U1CE2:

0110011A或–U1CE2:

0110L0B效果是一样的。

⑨命名命令N

命名命令N常与装入命令L一起使用

如:

–N路径\文件名.exe

–L

可把文件名.exe装入存储器。

⑩退出debug命令Q

格式为:

–Q

它退出debug,返回DOS。

例:

在debug中,汇编一段程序,实现两个32位数的加法,12345678H+3456789AH=?

用E命令在DS:

0120存储单元开始存放78H、56H、34H、12H、9AH、78H、56H、34H,

用汇编命令A编写一段程序如下:

Movax,[0120h]

Movdx,[0122h]

Addax,[0124h]

Adcdx,[0126h]

Mov[0128h],ax

Mov[012ah],dx

然后用G命令运行该程序段

G=起始地址终止地址

最后用D命令查看结果

DDS:

0120012C

练习2:

在debug中,汇编一段程序,实现两个32位数的减法,3456789Ah-12345678h=?

实验二汇编语言程序的编辑与调试实验

一、实验目的

1、学会用EDIT编写汇编语言程序;

2、学会使用MASM产生目标文件和可执行文件;

3、掌握在DEBUG下汇编程序的调试。

二、实验仪器

TDN86/51教学实验系统,计算机

三、实验内容与步骤

1、内容

在BCD1单元中,压缩存放着两个BCD码。

现编写一程序,将压缩的BCD码转变成两个非压缩的BCD码,分别存放到result和result+1单元中。

2、步骤

①在EDIT环境下编写能实现上述功能的汇编源程序,并以文件名为BCD1.ASM保存。

②执行MASM.EXE文件,检查程序中是否有语法错误;若有错,则返回到EDIT中,打开源程序进行修改,直到无语法错误为止,同时产生相应的目标文件。

③执行LINK.EXE文件,产生相应的可执行文件;

④打开DEBUG调试环境,装入相应的可执行文件,并用反汇编命令检查可执行文件是否已装入;

⑤单步运行每条指令,观察运行结果;

⑥整个程序运行完成后,到指定的存储单元中观察运行结果是否符合要求。

四、思考题

1、执行MASM.EXE文件的主要作用是什么?

2、在实验中,你用了哪些DEBUG命令,目的是什么?

 

实验三综合程序的设计、编制及调试

一、实验目的

1、掌握分支、循环、子程序调用等基本的程序结构;

2、学习综合程序的设计、编制及调试。

二、实验仪器

TDN86/51教学实验系统,计算机

三、实验内容与步骤

1、内容

在数据段的buffer字单元中存放着一个16位二进制数,编写一个程序把buffer中的内容用十六进制显示出来。

2、步骤

①程序流程图

 

②按流程图编写程序

③上机调试,实现题目要求的功能

四、思考题

编程显示F000:

0000存储单元的内容,显示形式为:

“F000:

000090”。

画出流程图,写出源代码,上机调试通过,实现相应功能。

 

附件1:

实验源程序

datasegment

string1db0dh,0ah,'pleaseinput16-bitbinarynumber',0dh,0ah,'$'

string2db0dh,0ah,'yourinputhasmistake.'

string3db0dh,0ah,'doyouwanttoinputagain(Y/N)?

',0dh,0ah,'$'

string4db'binarytohexadecimal:

',0dh,0ah,'$'

dataends

stacksegmentstack

dw256dup(?

toplabelword

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movax,stack

movss,ax

movsp,offsettop

next:

movdx,offsetstring1

movah,09h

int21h

movcx,16

xorbx,bx

rota:

shlbx,1

movah,01h

int21h

andal,0fh

jzrota1

cmpal,1

jnzagain

orbx,01h

rota1:

looprota

movdl,'B'

movah,02h

int21h

movdl,0dh

int21h

movdl,0ah

int21h

jmpl4

again:

movdx,offsetstring2

movah,09h

int21h

l5:

movah,08h

int21h

andal,0dfh

cmpal,'Y'

jznext

jmpexit

l4:

callhtodis

movdx,offsetstring3

movah,09h

int21h

jmpl5

exit:

movah,4ch

int21h

htodisproc

movdx,offsetstring4

movah,09h

int21h

movch,4

l2:

movcl,4

rolbx,cl

moval,bl

andal,0fh

addal,30h

cmpal,39h

jbel1

addal,07h

l1:

calldisplay

decch

jnzl2

movdl,'H'

movah,2

int21h

ret

htodisendp

displayproc

movdl,al

movah,2

int21h

ret

displayendp

codeends

endstart

附件2:

思考题源程序

datasegment

stringdb0dh,0ah,'pleaseinputaddress',0dh,0ah,'$'

string1db0dh,0ah,0dh,0ah,'doyouwanttoinputagain(y/n)?

',0dh,0ah,'$'

dataends

stacksegmentstack

dw256dup(?

toplabelword

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movax,stack

movss,ax

movsp,offsettop

next:

movdx,offsetstring

movah,9

int21h

callreci

moves,bx

movdl,':

'

movah,2

int21h

callreci

movsi,bx

movdl,''

movah,2

int21h

movdi,8

l5:

movbl,es:

[si]

callhtodisb

incsi

decdi

jnzl5

movdl,'-'

movah,2

int21h

movdl,''

int21h

movdi,8

l6:

movbl,es:

[si]

callhtodisb

incsi

decdi

jnzl6

movdx,offsetstring1

movah,9

int21h

movah,8

int21h

andal,0dfh

cmpal,'Y'

jnzexit

jmpnext

exit:

movah,4ch

int21h

htodisbproc

movch,2

movcl,4

l3:

rolbl,cl

moval,bl

andal,0fh

addal,30h

cmpal,39h

jbel4

addal,07h

l4:

movdl,al

movah,2

int21h

decch

jnzl3

movdl,''

movah,2

int21h

ret

htodisbendp

reciproc

xorbx,bx

movch,4

movcl,4

l8:

shlbx,cl

movah,1

int21h

subal,30h

cmpal,9h

jbel7

andal,0dfh

subal,7

l7:

orbl,al

decch

jnzl8

ret

reciendp

codeends

endstart

 

实验四DOS系统功能调用实验

一、实验目的

1、学习DOS系统功能调用的使用方法;

2、重点掌握键盘输入和输出显示的DOS系统功能调用的方法。

二、实验仪器

TDN86/51教学实验系统,计算机

三、实验内容和步骤

无论是用户程序还是DOS系统本身,都离不开输入/输出操作,为了方便用户,PCDOS系统将输入/输出管理程序编成一系列子程序,不仅系统可以使用,用户也可以像调子程序一样方便地使用它们。

调用系统提供的子程序,通常称为系统功能调用。

DOS系统功能调用的方式是通过执行一条软中断指令INT21H实现的。

当寄存器AH中设置不同的值时,该指令将完成不同的功能,我们称AH中设置的内容为功能号。

通过下面的编程练习,学会DOS系统功能1、2、7、8、9、A的调用方法。

1、内容

从键盘上输入一组字符串,将其送入输入缓冲区,把字符串中小写的字符转换成大写后,再显示这组字符串。

流程图如下:

2、步骤

①按流程图编写程序

②上机调试,实现题目要求的功能

思考题:

把上题中输入字符串中的最小字符和最大字符分别显示出来。

附件:

datasegment

string1db0dh,0ah,'pleaseinputstring',0ah,0dh,'$'

string2db0dh,0ah,'doyouwanttoinputstringagain(Y/N)?

',0ah,0dh,'$'

bufferdb40h,?

buffer1db40hdup(?

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

again:

movdx,offsetstring1

movah,9

int21h

movdx,offsetbuffer

movah,0ah

int21h

moval,buffer+1

cbw

movbx,offsetbuffer1

addbx,ax

movcx,ax

movbyteptr[bx],'$'

movdx,offsetbuffer1

movah,9

int21h

movbx,offsetbuffer1

l1:

moval,[bx]

cmpal,'a'

jbl2

cmpal,'z'

jal2

subal,20h

movbyteptr[bx],al

l2:

incbx

loopl1

movdl,0ah

movah,2

int21h

movdl,0dh

movah,2

int21h

movdx,offsetbuffer1

movah,9

int21h

movdx,offsetstring2

movah,9

int21h

movah,1

int21h

andal,0dfh

cmpal,'Y'

jzagain

movah,4ch

int21h

codeends

endstart

 

实验五综合编程练习

一、实验目的

综合运用分支、循环、子程序和DOS系统功能调用编写程序;

二、实验仪器

TDN86/51教学实验系统,计算机

三、实验内容和步骤

1、内容

从键盘输入一个夹带有若干个空格的字符串,显示第一个空格的位置(thefirstblankpositionis:

)和字符串长度(thelengthofthestringis:

),开始的空格不计算在字符串长度内。

若输入的字符串中没有空格,显示“thereisn’tanyblankinthestring”提示,同时显示该字符串的长度。

完成后提示是否还要继续(doyouwanttoinputstringagain(Y/N)?

),按Y继续,其他退出。

编写一程序实现上述功能。

2、步骤

自己画出流程图,写出符合要求的程序,上机调试通过。

四、思考题

如若要显示字符串中空格的个数,上述程序如何修改。

假定有一最大长度为80个字符的字符串已定义为字节变量STRING,试编写一程序段,找出第一个空格的位置(00H至4FH表示),并显示出来。

统计该串不包括前导空的实际长度(不包括回车符),统计结果显示出来。

datasegment

string1db0dh,0ah,'pleaseinputstring',0dh,0ah,'$'

string2db80

db?

string3db80dup(?

string4db0dh,0ah,'thestringhasnotblank',0dh,0ah,'$'

string5db0dh,0ah,'doyouwanttoinputstringagain(Y/N)?

',0dh,0ah,'$'

string6db0dh,0ah,'thefirstblankpositionis:

$'

string7db0dh,0ah,'thelengthofthestringis:

$'

dataends

stacksegmentstack

dw256dup(?

toplabelword

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movax,stack

movss,ax

movsp,offsettop

again:

movdx,offsetstring1

movah,9

int21h

movdx,offsetstring2

movah,0ah

int21h

moval,string2+1

cbw

movcx,ax

moval,''

xorbx,bx

next:

cmpal,string3[bx]

jzl1

incbx

loopnext

movdx,offsetstring4

movah,9

int21h

jmpl4

;*************************************

l1:

movdx,offsetstring6

movah,9

int21h

calldisplay

;************************************

l4:

movdx,offsetstring7

movah,9

int21h

calllength1

movdx,offsetstring5

movah,9

int21h

movah,1

int21h

andal,0dfh

cmpal,'Y'

jzagain

exit:

movah,4ch

int21h

;***********************************

displayproc

pushcx

movch,2

l3:

movcl,4

rolbl,cl

movdl,bl

anddl,0fh

cmpdl,9

jal2

adddl,30h

jmpdis1

l2:

adddl,37h

dis1:

movah,2

int21h

decch

jnzl3

movdl,'H'

movah,2

int21h

popcx

ret

displayendp

length1proc

pushbx

pushsi

pushax

movbl,string2+1

movsi,offsetstring3

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

当前位置:首页 > PPT模板 > 其它模板

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

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