微机原理与应用实验报告48121.docx
- 文档编号:13078235
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:22
- 大小:216.12KB
微机原理与应用实验报告48121.docx
《微机原理与应用实验报告48121.docx》由会员分享,可在线阅读,更多相关《微机原理与应用实验报告48121.docx(22页珍藏版)》请在冰点文库上搜索。
微机原理与应用实验报告48121
微机原理及其应用上机实验报告
实验一程序调试实验(顺序结构程序设计)
一、实验目的:
1.学习及掌握汇编语言源程序的基本结构,明确程序中各段的功能和相互之间的关系。
2.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
3、熟悉和掌握DEBUG常用命令的使用
二、实验要求:
1、上机前,要认真阅读前言和课本相关章节
2、上机前,画好流程图,编写好程序
3、上机时,注意出现的错误,记录下出错信息,翻译之
4、完成好实验报告
三、实验容:
在存TAB开始的16个单元连续存放了0-15的平方值(0-225),任给一个数X(0≤X≤15),求X的平方值,并把结果存放在Y单元中。
(2).分析
X平方的值是tab为首地址且x的值为有效地址中的值。
datasegment
tabdb0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225
xdb8
ydb?
dataends
stacksegmentpara'stack'
db100dup(0)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
xorax,ax
moval,x
leasi,tab
addsi,ax
moval,[si]
movy,al
movah,4ch
int21h
codeends
endstart
(3).程序调试:
4.心得体会
了解了顺序结构,掌握了程序的运行,调试。
实验二分支程序设计
一、实验目的:
熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法;掌握条件转移、无条件转移指令的使用方法。
掌握分支程序设计、编写、调试和运行的方法。
二、实验要求:
1、上机前认真分析题意,找出算法,画出流程图,依据流程图,编好程序。
2、认真调试程序,对程序可能存在的所有分支都要进行运行,只有这样才能证明程序的正确性。
二、实验容
1.判断X单元数据的奇偶性,若为奇数,将Y单元设置为0FFH,若为偶数,将Y单元清0。
(2).分析
开始
取x值赋给al
AL与01h与运算
结果是否为0
Yes
No
将0赋给y
将0ffh赋给y
结束
将x值给寄存器al,al和1相与,判断最低位是0或1,若为0,x为偶数,否则为奇数。
datasegment
xdw69h
ydb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movax,x
andax,01h
jznext1
movy,0ffh
jmpnext
next1:
movy,0
next:
movah,4ch
int21h
codeends
endstart
(3).程序调试
(4).心得体会
掌握了add指令的用法,熟悉了分支结构。
2.设计—个比较两个8位无符号数的大小、并把较小的数存人MIN单元的程序。
假设这两个数分别存放在FIRST和SECOND单元中。
(2).分析
将first值赋给al,判断al与second的大小,将小的值给min。
datasegment
开始
取first值给al
判断
al是否大于second
将al值给min
将second值给min
结束
是
否
firstdb32h
seconddb56h
mindb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
moval,first
cmpal,second
jcnext
movbl,second
movmin,bl
jmpnext1
next:
movmin,al
next1:
movah,4ch
int21h
codeends
endstart
(3).程序调试
(4).心得体会
掌握了cmp指令的用法,加深了对分支结构的了解。
实验三循环程序设计
一、实验目的
掌握循环指令的使用方法;掌握实现单重、多重循环程序设计、编写、调试和运行的方法。
二、实验要求:
1、上机前认真分析题意,找出算法,画出流程图,依据流程图,编好程序
2、在调试程序的过程中,对出现的错误应记录它的英文提示,进行翻译,把更正的指令用其它颜色的笔记录的原程序清单的右边,便于比较。
三、实验容:
1、从自然数1开始累加,直到累加和大于1000为止,统计被累加的自然数的个数,并把统计的个数送入n单元,将累加和送入sum单元。
datasegment
ndw?
sumdw?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movax,0
movbx,0
next:
incbx
addax,bx
cmpax,1000
jbnext
movn,bx
movax,sum
movah,4ch
int21h
codeends
endstart
2.存地址BUFFER开始存放着10个带符号字节数组,编写程序求数组中正数、零和负数的个数,并分别将它们存于PLUS开始的单元。
(2).分析
将寄存器al,bx初始化,取buffer首地址给si,设置循环次数给cx,判断[si]的值正负还是零,
将正数个数值送给al,负数个数值送给bh,零的个数给bl,再将三个值存放在以plus为首地址的地址中。
datasegment
bufferdb10h,78h,23h,00h,56h,46h,86h,0efh,0bch,65h
cntequ$-buffer
plusdb3
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movbx,0
moval,0
leasi,buffer
movcx,cnt
lop1:
test[si],80h
jzzero
incbh
jmpnext
zero:
cmpbyteptr[si],0
jznext2
incal
jmpnext
next2:
incbl
next:
incsi
looplop1
leadi,plus
mov[di],al
incdi
mov[di],bl
incdi
mov[di],bh
movah,4ch
int21h
codeends
endstart
(3).程序调试
(4).心得体会
学习了循环结构,了解了循环指令的用法。
3、存中有一串以“$”结尾的字符串,统计其中“A”出现的次数。
2).分析
初始化寄存器,取字符串首地址,首先判断[si]容是否为‘$‘,若是则结束程序,否则再判断[si]是否为’A‘,若是则bl加1记录’A’的个数,否则判断下一个字符。
datasegment
stringdb'jAnsAhAenA$'
cntequ$-string
jindb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movbl,0
leasi,string
movcx,cnt
next2:
moval,[si]
cmpal,'$'
jznext3
cmpal,'A'
JZnext
jmpnext1
next:
incbl
next1:
incsi
loopnext2
next3:
movjin,bl
movah,4ch
int21h
codeends
endstart
3).程序调试
4).心得体会
加深了对循环结构的了解,强化了对循环指令的运用。
实验四字符串的输入和输出
一、实验目的:
掌握字符串输入和输出的方法,掌握基本的I/O功能调用,学习对存变量进行处理的方法。
二、实验要求:
1、分析题意,写出算法,画出流程图,再编程
2、认真调试程序,对程序可能存在的所有情况都要进行运行,只有这样才能证明程序的正确性。
三、实验容:
1、在存单元中存放了两个字符串STRINGl和STRING2(设其长度相同),试编写—程序,比较它们所含的字符是否相同。
若相同,则显示'Match';否则,显示'Nomatch'。
2).分析
取string1和string2的首地址给si和di,设置循环次数给cx,比较[si]和[di]容是否相同,若全部相同则显示器输出mantch,若不相同,则输出nomantch.
datasegment
string1db'jinsheng'
cntequ$-string1
string2db'jinshenr'
buff1db'match$'
buff2db'nomatch$'
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leasi,string1
leadi,string2
movcx,cnt
next:
moval,[si]
movbl,[di]
cmpal,bl
jznext1
leadx,buff2
movah,9
int21h
jmpnext2
next1:
incsi
incdi
loopnext
leadx,buff1
movah,9
int21h
next2:
movah,4ch
int21h
codeends
endstart
3).程序调试
4).心得体会
了解了字符串比较的指令和字符串输出的指令。
实验五程序设计综合应用
一、实验目的:
通过本实验,深入掌握汇编语言程序设计的方法与技巧。
二.实验容:
2、存单元MEM开始存放了一个长度为10的无符号字节数组,编写程序找出其中的最大值和最小值并存于MAX和MIN单元。
2).分析
取men的手首址给si,将首址中的数值给al、bl,再将其他数值逐个与al、bl比较,最小值给bl,最大值给al。
CX-1
SI+1
开始
取men首地址给si
设置循环次数给cx
再取men的一个数据
将men第一个数据给al,bl
和al,bl比较
CX=0
最小值给bl最大值给al
结束
BL给min,al给max
datasegment
memdb23h,45h,98h,24h,03h,15h,16h,65h,48h,35h
mindb?
maxdb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leasi,mem
moval,[si]
movbl,al
movcx,9
next:
incsi
cmp[si],al
jncda
cmp[si],bl
jcxiao
jmpagain
da:
moval,[si]
jmpagain
xiao:
movbl,[si]
again:
deccx
jnznext
movmax,al
movmin,bl
movah,4ch
int21h
codeends
endstart
3).程序调试
4).心得体会
深入掌握汇编语言程序设计的方法与技巧,加深了对循环指令的用法。
3.将字符串转换成大写字母字符串。
设字符串的首地址为STRING,字符串的长度在LENGTH单元。
数据段可定义如下:
DATASEGMENT
STRINGDB‘Iamastudent!
’
LENGTHDB15
DATAENDS
程序在循环体逐个取出字符,判断是否在小写字母‘a’和‘z’之间,若在就将其转换成大写字母并放回原处,若不在则保持原字符不变。
2).分析取string首地址给si,设置循环次数给cx,用循环指令依次判断[si]中字符并作出相应的操作,将string中的小写字母改成大写。
datasegment
stringdb'Iamastudent!
'
lenth1db15
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leasi,string
movcx,15
next:
moval,[si]
cmpal,'a'
jcnext1
cmpal,'z'
jncnext1
subal,32
mov[si],al
next1:
incsi
判断al是否小于‘a’或大于‘z’
al-32结果给al
Al赋给[si]
Cx是否为零
cx-1
si+1
开始
取string首地址给si
设置循环次数给cx
[si]赋给al
是
否
否
是
结束
loopnext
movah,4ch
int21h
codeends
endstart
3.程序调试
4.心得体会
加深了对汇编语言的了解,熟悉了一些操作指令,强化了对一些常用指令的用法,但还有许多值得深入了解的容。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 应用 实验 报告 48121