太原理工大学 微型计算机实验,太原理工大学微机原理实验报告

41528d3028836879cd698677c3999917.gif太原理工大学微机原理实验报告

本科实验报告 课程名称: 微机原理及应用 实验项目: 实验地点: 专业班级:机械 xxx班 学号:xxxxxxxxxx 学生姓名: xx 指导教师: 2016年 12月 28日 实验一 汇编语言程序开发环境与程序调试 一、实验要求和目的 1.熟悉在微机上编辑、汇编、连接、调试和运行汇编语言程序的过程,掌握 PC 环境 下命令行方式的特点。 2.熟悉汇编过程中一些常见出错信息。 3.熟悉程序调试的方法, DOS命令窗口的 debug 的常用命令。 二、实验内容 1、项目要求:在屏幕上显示字符串‘Hello,world!’ 。 2、程序设计思想: 运用 DOS 系统功能调用(INT 21H)的 9号功能。DOS 系统功能调用的 9号功能是显 示字符串,它调用的参数 DS:DX=串地址,且字符串以“$”结束。程序流程图如图 1-1: 图 1-1 程序流程图 3、程序清单: 完整指令代码如下(简化段定义格式): 程序开始 段的初始化 设置显示字符串的段地址 设置字符串的偏移地址 DOS 系统功能调用 返回 DOS 程序结束.model small ;定义程序的存储模式 .486 ;说明使用的 80 x86微处理器指令 .stack ;定义堆栈段 .data ;定义数据段 String db Hello, world! , $ .code ;定义代码段 .startup ;程序执行开始 Mov ax, seg String ;把 String 的段地址送 ax Mov ds,ax ;ax送 ds,ds 取得 string的段地址 mov dx,offset String ;String 的偏移地址送 dx mov ah,9 ;字符串显示功能 int 21h ;DOS 功能调用 mov ax,4c00h int 21h ;返回 DOS .exit end 三、结果与分析 指导教师: 年 月 实验二 内存数据的移动 一、实验要求与目的: 1、实验要求:编写程序实现把数据段的字符串数据移动到附加段中。 2、实验目的:通过项目学习汇编的数据传送指令和串处理类指令,巩固寻址方式,学 习汇编程序设计。 二、实验内容: 1、项目要求:把数据段中以 dstring 地址标号为开始地址的“hello world!”字符串移动 到附加段以 sstring 地址标号为开始地址中去。 2、设计思想:从源串中取一个字符到 AL 中,然后把刚取到的字符放到目的串指定位 置,重复这样的过程,把源串的字符取完为止。程序流程如图 2-1 所示。 图 2-1 程序流程图 3、程序设计清单:实现这样功能的程序方法很多,下面给出了实现这一功能的完整程 序清单(完整段定义格式) 。 方案一(无聊版): 采用的是 loop 指令,CX 为循环次数,当 CX 为 0时退出循环。 加入了换行指令。 用字符串常量’$’改变字符串,提前终止字符串的输出。 程序如下: DSEG SEGMENT dstring DB HELLO,WORLD! ,33,33, $ ;15 个字节 HELLO,WORLD!!! dstring_1 db 数据段的字符串: , $ ;一定要加 $ ,表示一个字符串的结束dstring_2 db 附加段的字符串: , $ ;在屏幕上显示的字符串 DSEG ENDS ESEG SEGMENT sstring DB 15 DUP(?) ;附加段预留 15个字节空间 ESEG ENDS CODE SEGMENT ASSUME CS:CODE, DS:DSEG, ES:ESEG start: MOV AX, DSEG ;程序开始执行的地方MOV DS, AX ;将 DSEG 的段地址给 dsMOV AX, ESEG MOV ES, AX ;将 SSEG 的段地址给 es LEA SI, dstring ;将 dstring 的首地址给 siLEA DI, sstring ;将 sstring 的首地址给 di MOV CX, 15 ;CX 存放 loop 指令的循环次数 S: MOV AL, [SI] MOV ES:[DI], AL INC DI INC SI LOOP S mov dX,offset dstring_1 MOV AH,09h INT 21H ;输出字符串‘数据段的字符串:’ MOV DL,0AH ;输出换行 MOV AH,02H INT 21H mov dX,offset dstring MOV AH,09h INT 21H ;输出字符串:HELLO,WORLD!!! MOV DL,0AH MOV AH,02H INT 21H ;输出换行 mov dX,offset dstring_2 MOV AH,09h INT 21H ;输出字符串 dstring_2 MOV DL,0AH MOV AH,02H INT 21H ;输出换行 mov al, $ mov es:[di-3],al ;将第二个 ! 改成 $ 以终止字符串的继续输出 MOV AX,ES MOV DS,AX ;将附加段的段地址附给数据段 mov dX,offset sstring MOV AH,09h INT 21H ;显示字符串 HELLO,WORLD!注意不是!!!MOV AX, 4C00H INT 21H ;返回 DOS CODE ENDS ;代码段结束 END start ;程序结束 方案二:采用字符串操作指令 movsb,执行[di]=[si]。 Si 与 di 自动地址改变方向,由 std,cld 控制。 Cx 作为计数器,前面应用 rep 指令重复。 程序如下: DSEG SEGMENT dstring DB HELLO,WORLD! , $ ;13 个字节 HELLO,WORLD!!! DSEG ENDS ESEG SEGMENT sstring DB 13 DUP(?) ;附加段留 13个字节空间 ESEG ENDS CODE SEGMENTASSUME CS:CODE, DS:DSEG, ES:ESEG start: MOV AX, DSEG ;程序开始执行的地方MOV DS, AX ;将 DSEG 的段地址给 dsMOV AX, ESEGMOV ES, AX ;将 SSEG 的段地址给 es LEA SI, dstring ;将 dstring 的首地址给 siLEA DI, sstring ;将 sstring 的首地址给 diMOV CX, 13 ;CX 存放 rep 指令的重复次数cld ;将 DF 位清零,则 di 与 si 自增rep movsb ;执行[di]=[si]MOV AX,ESMOV DS,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值