太原理工大学微机原理实验报告课案(共22页).doc
《太原理工大学微机原理实验报告课案(共22页).doc》由会员分享,可在线阅读,更多相关《太原理工大学微机原理实验报告课案(共22页).doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 本科实验报告课程名称: 微机原理及应用 实验项目: 实验地点: 专业班级:机械xxx班 学号:xxxxxxxxxx 学生姓名: xx 指导教师: 2016年 12月 28日 实验一 汇编语言程序开发环境与程序调试一、实验要求和目的1熟悉在微机上编辑、汇编、连接、调试和运行汇编语言程序的过程,掌握PC 环境下命令行方式的特点。2熟悉汇编过程中一些常见出错信息。3熟悉程序调试的方法, DOS命令窗口的debug的常用命令。二、实验内容1、项目要求:在屏幕上显示字符串Hello,world!。2、程序设计思想:运用DOS系统功能调用(INT 21H)的9号功能。DOS系统
2、功能调用的9号功能是显示字符串,它调用的参数DS:DX=串地址,且字符串以“$”结束。程序流程图如图1-1:程序开始段的初始化设置显示字符串的段地址设置字符串的偏移地址DOS系统功能调用返回DOS程序结束图1-1 程序流程图3、程序清单:完整指令代码如下(简化段定义格式):.model small;定义程序的存储模式.486;说明使用的80x86微处理器指令.stack;定义堆栈段.data;定义数据段String db Hello, world!,$.code ;定义代码段.startup;程序执行开始Mov ax, seg String ;把String的段地址送axMov ds,ax;a
3、x送ds,ds取得string的段地址mov dx,offset String;String的偏移地址送dxmov ah,9;字符串显示功能int 21h;DOS功能调用mov ax,4c00hint 21h;返回DOS.exitend三、结果与分析指导教师:年 月 实验二 内存数据的移动一、实验要求与目的:1、实验要求:编写程序实现把数据段的字符串数据移动到附加段中。2、实验目的:通过项目学习汇编的数据传送指令和串处理类指令,巩固寻址方式,学习汇编程序设计。二、实验内容:1、项目要求:把数据段中以dstring地址标号为开始地址的“hello world!”字符串移动到附加段以sstring
4、地址标号为开始地址中去。2、设计思想:从源串中取一个字符到AL中,然后把刚取到的字符放到目的串指定位置,重复这样的过程,把源串的字符取完为止。程序流程如图2-1所示。图2-1 程序流程图3、程序设计清单:实现这样功能的程序方法很多,下面给出了实现这一功能的完整程序清单(完整段定义格式)。方案一(无聊版):采用的是loop指令,CX为循环次数,当CX为0时退出循环。加入了换行指令。用字符串常量$改变字符串,提前终止字符串的输出。程序如下:DSEG SEGMENTdstring DB HELLO,WORLD!,33,33, $;15个字节HELLO,WORLD!dstring_1 db 数据段的字
5、符串: , $;一定要加$,表示一个字符串的结束dstring_2 db 附加段的字符串: , $;在屏幕上显示的字符串DSEG ENDSESEG SEGMENTsstring DB 15 DUP(?);附加段预留15个字节空间ESEG ENDSCODE SEGMENTASSUME CS:CODE, DS:DSEG, ES:ESEGstart: MOV AX, DSEG;程序开始执行的地方 MOV DS, AX;将DSEG的段地址给ds MOV AX, ESEGMOV ES, AX;将SSEG的段地址给esLEA SI, dstring;将dstring的首地址给si LEA DI, sstr
6、ing;将sstring的首地址给diMOV CX, 15;CX存放loop指令的循环次数S: MOV AL, SIMOV ES:DI, ALINC DIINC SILOOP Smov dX,offset dstring_1MOV AH,09hINT 21H ;输出字符串数据段的字符串:MOV DL,0AH ;输出换行MOV AH,02HINT 21Hmov dX,offset dstringMOV AH,09hINT 21H ;输出字符串:HELLO,WORLD!MOV DL,0AH MOV AH,02HINT 21H;输出换行mov dX,offset dstring_2MOV AH,09
7、hINT 21H ;输出字符串dstring_2MOV DL,0AH MOV AH,02HINT 21H ;输出换行mov al,$mov es:di-3,al ;将第二个!改成$以终止字符串的继续输出MOV AX,ESMOV DS,AX;将附加段的段地址附给数据段mov dX,offset sstringMOV AH,09hINT 21H;显示字符串HELLO,WORLD!注意不是!MOV AX, 4C00HINT 21H;返回DOSCODE ENDS;代码段结束END start;程序结束方案二:采用字符串操作指令movsb,执行di=si。Si与di自动地址改变方向,由std,cld控制
8、。Cx作为计数器,前面应用rep指令重复。程序如下:DSEG SEGMENTdstring DB HELLO,WORLD!,$;13个字节HELLO,WORLD!DSEG ENDSESEG SEGMENTsstring DB 13 DUP(?);附加段留13个字节空间ESEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DSEG, ES:ESEGstart: MOV AX, DSEG;程序开始执行的地方 MOV DS, AX;将DSEG的段地址给ds MOV AX, ESEG MOV ES, AX;将SSEG的段地址给es LEA SI, dstring;将dstr
9、ing的首地址给si LEA DI, sstring;将sstring的首地址给di MOV CX, 13;CX存放rep指令的重复次数 cld;将DF位清零,则di与si自增 rep movsb;执行di=si MOV AX,ES MOV DS,AX;将附加段的段地址附给数据段 mov dX,offset sstring MOV AH,09h INT 21H;显示字符串HELLO,WORLD! MOV AX, 4C00H INT 21H;返回DOSCODE ENDS;代码段结束END start;程序结束方案三:采用是cmp与ja跳转指令来实现数据的移动。程序如下:DSEG SEGMENTd
10、string DB HELLO,WORLD!, $;13个字节HELLO,WORLD!DSEG ENDSESEG SEGMENTsstring DB 15 DUP(?);附加段留13个字节空间ESEG ENDSCODE SEGMENTASSUME CS:CODE, DS:DSEG, ES:ESEGstart: MOV AX, DSEG;程序开始执行的地方 MOV DS, AX;将DSEG的段地址给ds MOV AX, ESEG MOV ES, AX;将SSEG的段地址给es LEA SI, dstring;将dstring的首地址给si LEA DI, sstring;将sstring的首地址
11、给di MOV CX, 13;CX存放循环次数S: MOV AL, SI MOV ES:DI, AL INC DI INC SI DEC CX CMP CX,0 JA SMOV AX,ESMOV DS,AX;将附加段的段地址附给数据段mov dX,offset sstringMOV AH,09hINT 21H;显示字符串HELLO,WORLD!MOV AX, 4C00HINT 21H;返回DOSCODE ENDS;代码段结束END start;程序结束附简化段定义格式如下:.model small ;定义程序的存储模式.486;说明使用的80X86微处理指令.data;定义数据段开始dstri
12、ng db hello,world!,$sstring db 13 dup(0);使用的同一个数据段.code ;定义代码段.startup;程序开始执行的地方mov ax,seg dstring;=mov ax,data mov ds,ax;将dstring的段地址附给dsmov es,ax;为了使用movsb指令,由于两个字符串都在数据段,所以令es=ds lea si,dstringlea di,sstringmov cx,13;循环次数cldrep movsbmov dx,offset sstring mov ah,9 int 21h mov ax,4c00h int 21h.exit
13、End4、调试过程:(在win7x32下调试的方案二)第1步:进入debug:命令debug+file.exe。第2步:用r命令查看cpu寄存器内容,这一步基本没用。看注意点即可注意:此时并未给ds,es赋值,在ds,es赋值之前有ds=es,cs=ds+10h。第3步:用U命令查看汇编指令。直接暴力输入g 001a 也可,但只适用本程序。 第四步:用T命令执行一条机器指令。这里了执行四次。 此时可以看到ds和es已经赋值了,此时来查看内存的内容。注意cs没变。第五步:用d命令查看内存的内容。即查看DS:0 和ES:0输入d 0bc6:0和d 0bc7:0。可以看出已经完成移动了。三、结果与分
14、析没仔细去看为什么0bc6:0010处也有hello,world。我调试过了发现还有,猜测可能与ss的栈有关。四、拓展用q命令退出debug。用p命令一次执行完循环。用g+偏移地址(ip),可以直接执行到上一条指令,即此时IP=ip。教师点评:指导教师:年 月 日实验三 分支程序结构一、实验要求与目的:1、实验要求:掌握分支结构程序设计的基本方法;掌握无条件转移指令和条件转移指令的使用;掌握分支结构程序设计的两种基本结构的使用。2、实验目的:通过分支程序的设计掌握结构化程序设计方法和常用算法设计。二、实验内容:1、项目要求:编写程序实现:在数据段中,有一个按从小到大顺序排列的无符号数组,其首地
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原 理工大学 微机 原理 实验 报告 22
限制150内