实验报告Word文档下载推荐.docx
- 文档编号:16316754
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:29
- 大小:154.18KB
实验报告Word文档下载推荐.docx
《实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验报告Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。
此外,为了便于统一管理硬盘中的文件,要求实验者按以下形式命名实验文件:
字母学号后4位.asm
其中字母取a~z中的一个字母,按实验顺序从a至z排列。
如学号为0431学生的第二个实验程序所对应的文件名应为b0431.asm。
3.程序调试完后,须由实验指导教师在机器上检查运行结果。
每个实验完成后,应写出实验报告。
四、实验环境(包括软、硬件平台)
DOS环境,计算机
五、实验步骤或程序(注:
硬件实验包括电路原理图)
(一)、用编辑程序建立扩展名为asm源程序文件
DATASEGMENT
BUFDB47H,6AH
SUMDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,BUF
ADDAL,BUF+1
MOVSUM,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(二)、用汇编程序对源文件汇编产生扩展名为obj目标文件
C:
\MASM>
masmabc↙
(三)、用连接程序link.exe产生扩展名为exe执行文件
C:
linkabc↙
(四)、运行程序
abc↙
(五)、程序调试及结果查看
(如不够,请另附纸)
六、实验结果
1.把程序装入内存,并显示程序清单
debugabc.exe↙
-
此时,debug已将执行程序装入内存,可键入debug的有关命令调试程序。
-U↙用反汇编命令U列出程序清单
13E3:
0000B8E213MOVAX,13E2
00038ED8MOVDS,AX
0005A00000MOVAL,[0000]
000802060100ADDAL,[0001]
000CA20200MOV[0002],AL
000FB44CMOVAH,4CH
0011CD21INT21
……
2.查看数据段内容或查看寄存器内容
-D13E2:
0000↙用D命令查看数据段内容
13E2:
0000476A000000000000-0000000000000000Gj..............
可见0000、0001单元内容为数据段定义的内容,分别为47H、6AH。
DEBUG状态下,缺省数制为十六进制数。
-R↙用R命令查看寄存器内容
AX=13E2BX=0000CX=0023DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13D2ES=13D2SS=13E2CS=13E3IP=0003NVUPEIPLNZNAPONC
若查看指定寄存器内容,在R命令后跟上寄存器名,例:
-RAX↙用R命令查看寄存器AX的内容
AX13E2
:
↙
若需修改AX的值,则键入新值;
若无需更改,按回车。
3.用G命令连续运行程序,查看结果
-G=0000,000F↙运行程序,0000为运行程序起始地址,000F为断点地址
-DDS:
0000↙用D命令查看数据段内存结果
0000476AB100000000000000000000000000
可见0002单元中内容已变为0000和0001两单元内容之和。
4.如果连续得不到正确结果,需分步跟踪运行
-T=0000↙0000这所需要运行指令的地址
显示单步执行后寄存器和标志状态之后,停在下一条指令开始处。
-T↙顺序运行下一条指令
5.退出DEBUG
-Q↙
七、实验存在问题和解决办法
存在问题:
运行程序时程序能够运行但不能得到预期结果。
解决办法:
静态查错即检查源程序,并对源程序进行修改,然后再汇编、连接、运行。
如果静态检查无法发现错误,则需动态查错。
八、实验心得和建议
学习了程序设计的基本方法和技能。
进一步加深对微机接口芯片原理及工作过程的理解。
学习了用汇编语言设计、编写、调试和运行程序的方法。
九、教师评语及成绩
教师签字:
年月日
循环程序设计
1.熟悉汇编语言运行、调试环境及方法。
2.掌握循环程序的设计方法。
3.掌握DOS功能调用显示输出的使用方法。
4.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
三、实验内容及要求
(一)、在数据段中有从STRING单元开始存放的100个字节数据,编写程序要求将字符串中的大写字母转换为小写字母,并显示到屏幕上。
(二)、用表格形式显示字符:
按15行×
16列的表格形式显示ASCII码为10H~FFH的所有字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII码为0)分隔。
<
一>
DATASEGMENT
STRDB'
ABCDEFGhijkLMNopQRSTUVWxyZ$'
DATAENDS
CODESEGMENT
START:
MOVAX,DATA
LEABX,STR
A1:
MOVAL,[BX]
CMPAL,'
$'
JESHOW
A'
JBNEXT
Z'
JANEXT
ADDAL,20H
MOV[BX],AL
NEXT:
INCBX
JMPA1
SHOW:
LEADX,STR
MOVAH,9
MOVAX,4C00H
CODEENDS
二>
CODESEGMENT
CODE
START:
MOVCL,15
MOVCH,16
MOVBL,10H
A1:
MOVDL,BL
INCBL
MOVAH,02H
MOVDL,0
MOVAH,02H
INT21H
DECCH
JNZA1
MOVDL,0DH
INT21H
MOVDL,0AH
MOVCH,16
CMPBL,0FFH
DECCL
JNZA1
MOVAH,4CH
INT21H
ENDSTART*
程序一:
检查发现第16行的“ADDAL,20H”将数字0写成了大写字母O,排除错误后可正常运行。
字符串后忘了加$,导致转换为小写字母后出现如下乱码:
字符串后加结束符$后乱码消除。
程序二:
分析表明第28行“CMPBL,0FFH”中FFH前要加0
编写程序时要养成良好的习惯,如0和O注意区分,注意搞清、搞懂程序的细节如$等的作用,多动手调试、找出错误的原因
分支程序设计
1、掌握分支程序的设计方法。
2、掌握键盘输入DOS功能调用的使用方法。
3.掌握二进制转换为十进制的方法
(一)、通过键盘输入一行字节数据并存入BUFF缓冲区中,编写程序分别统计BUFF中正数和负数的个数,并分别存放到PLUS和MINUS单元中。
(二)、程序接收用户键入的一行字符(个数<
80,字符串以回车结束),按字母、数字及其它字符分类统计,并以十进制数形式显示统计结果。
DATASEGMENT
BUFFDB80
DB?
DB80DUP(?
)
COUNTEQU$-(BUFF+2)
LETTERDB0
DIGITDB0
OTHERDB0
TISHIDB'
Pleaseinputstring:
A1DB'
Letter:
A2DB'
Digit:
A3DB'
Other:
A4DB'
Sum:
ASSUMEDS:
DATA,CS:
LEADX,TISHI
INT21H;
显示提示语句Pleaseinputstring:
LEADX,BUFF
MOVAH,0AH
等待输入一串字符
LEADI,BUFF+2
MOVCL,BUFF+1
LEABX,LETTER
LOOP1:
CMPBYTEPTR[DI],'
0'
;
分支程序判断是字符、数字,还是其它。
JAENEXT1
INCBYTEPTR[BX+2]
INCDI
DECCX
JNZLOOP1
JMPSHOW
NEXT1:
9'
JANEXT2
INCBYTEPTR[BX+1]
NEXT2:
JGENEXT3
INCBYTEPTR[BX+2]
NEXT3:
JGNEXT4
INCBYTEPTR[BX]
NEXT4:
a'
JGENEXT5
INCBYTEPTR[BX+2]
NEXT5:
z'
JGNEXT6
INCBYTEPTR[BX]
NEXT6:
MOVAH,2
MOVAH,2
显示换行和回车
LEADX,A1
显示提示符Letter
MOVAL,BYTEPTR[BX]
ANDAX,00FFH
MOVCL,10
DIVCL
MOVCH,AH
ADDAL,30H
MOVDL,AL
取出Letter的十位,转换为ASCII吗并显示
MOVAL,CH
取出Letter的个位,转换为ASCII吗并显示
MOVDL,0AH;
取出Digit的十、个位,转换为ASCII吗并显示,具体同上
LEADX,A2
MOVAH,9
INT21H
MOVAL,BYTEPTR[BX+1]
ANDAX,00FFH
MOVCL,10
DIVCL
MOVCH,AH
ADDAL,30H
MOVDL,AL;
//
MOVAH,2
INT21H
MOVAL,CH
MOVDL,AL;
INT21H
MOVDL,0AH;
取出Other的十、个位,转换为ASCII吗并显示,具体同上
LEADX,A3
MOVAL,BYTEPTR[BX+2]
取出Sum的十、个位,转换为ASCII吗并显示,具体同上
LEADX,A4
MOVAL,BUFF+1
MOVCL,10
DIVCL
MOVDL,AL
MOVAL,CH
分析表明错误原因如下:
(1)O写成0;
(2)相对寻址只限于用SI、DI、BX、BP,而程序中却用了其它寄存器。
修改后仍有错误如下:
错误原因:
使用“INCBYTEPTR[BX+2]”忘了加BYTEPTR
修改后仍得不到正确结果,错误如下:
“CMP[DI],'
”应改成“CMPBYTEPTR[DI],'
”
错误全部修改后得到所要的结果
很多知识的细节只有在编程实践中才能发现,这次的程序较长,发了好长时间才将错误全部排出,但从中也学会了很多东西。
子程序设计
1.掌握子程序的设计方法。
2.掌握十六进制转换二进制、二进制转换为十进制的方法
(一)、用子程序调用的形式,编写程序从键盘键入0~FFFFH之间的十六进制数,并存放到存储器中。
(二)、从键盘键入0~FFFFH之间的十六进制数,并转换成十进制在屏幕上显示出来。
DB0
A0DW16
Pleaseinputhexnumber:
decnumber:
ANDCX,00FFH
CALLHEXIBIN
CALLCRLF
CALLBINIDEC
;
------------------------------------------------将ASCII码转换为数值
HEXIBINPROC
MOVBX,0
MOVAX,0
MULA0;
不能为立即数。
SUBBYTEPTR[DI],30H
ADDAL,[DI]
LOOPLOOP1
MOVBX,AX
RET
HEXIBINENDP
-----------------------------------------------
------------------------------------------------输出换行、空格
CRLFPROC
CRLFENDP
-----------------------------------------------将二进制转换为十进制并显示
BINIDECPROC
LEADX,A1;
输出提示符decnumber
MOVDX,0;
万位
MOVAX,BX
MOVCX,10000
DIVCX
MOVBX,DX
千位
MOVCX,1000
百位
MOVCX,100
MOVAL,BL;
十位
MOVAL,CH;
个位
BINIDECENDP
MOVCL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告