北京理工大学汇编语言实验六磁盘文件存取实验报告
北京理工大学汇编语言实验报告一
![北京理工大学汇编语言实验报告一](https://img.taocdn.com/s3/m/404d6d3c5a8102d276a22f3f.png)
汇编语言实验报告实验一 DOS环境下的汇编语言编程环境使用(基础与验证型)班级:05211002姓名:张宁学号:1120102310实验日期:2012.9.7晚6:00~9:00汇编语言实验报告实验一 DOS 环境下的汇编语言编程环境使用(基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识汇编语言程序设计上机开发过程如图1.1 所示。
四、实验内容与步骤1、汇编、链接并调试给出的简单程序,找出程序中的错误。
(一)录入并建立汇编语言源程序文件(ASM 文件)(二)用汇编程序MASM 将ASM 文件汇编成目标程序文件(OBJ 文件)(三)用连接程序LINK 生成可执行程序文件(EXE 文件)(四)程序的调试2、完成程序设计:分类统计字数组data 中正数、负数和零的个数,并分别存入内存字变量Positive、Negative 和Zero 中,数组元素个数保存在其第一个字中。
使用Debug 查看Positive、Negative 和Zero 三个变量的数据。
五、实验过程及结果:实验一:1.输入给出的程序2.运行输入的程序,发现了三处错误:根据错误提示,发现错误为ADDITION后未打冒号,CMP错打为COM。
修改原代码:改为:3.代码编译成功,生成OBJ文件,再生成EXE文件,可成功运行。
4.在原程序代码后添加两行代码,以验证ADDITION的逻辑正确性,改动如下:现实在DATA1中添加字节型sum ,再将ADDITION的运行结果,从AX送到sum中去。
5.调试发现ADDITION并没用正确运行。
检查语句逻辑性发现,应将JAE改成JB,才能实现累加并终结。
汇编语言实验报告
![汇编语言实验报告](https://img.taocdn.com/s3/m/eec89200a22d7375a417866fb84ae45c3a35c24e.png)
汇编语言实验报告在计算机科学中,汇编语言是一种底层的编程语言,直接使用计算机的指令集来写程序。
与高级语言(如C ++或Java)不同,汇编程序被编写为显式的机器代码,它们可以直接在计算机上执行。
在本次实验中,我们学习了汇编语言的基础知识,并设计了一个简单的程序来演示操作系统,此程序可以打印字符串、读入字符和执行其他一些简单的操作。
我们了解了汇编语言的基本概念,例如寄存器、指令和标志位。
寄存器是CPU内部的存储空间,可用于存储数据或执行算术操作。
指令是CPU执行的单个操作,例如将数据移动到寄存器中,从寄存器中加载数据,或将数据存储到内存中。
标志位是CPU中的一些标志,用于指示例如进位或溢出等特定条件的发生情况。
之后,我们学习了如何使用汇编语言来执行简单的操作。
我们使用了mov指令将数据移动到寄存器中,使用int指令调用中断,以及使用jmp指令跳转到不同的程序行。
我们设计了一个简单的操作系统,它通过汇编程序来控制计算机的操作。
该操作系统具有以下主要功能:1. 打印字符串。
我们使用了mov指令将字符串中的数据加载到寄存器中,并使用int 指令调用中断来打印字符串。
2. 读入字符。
我们使用了int指令调用中断来读取用户输入的字符,然后将其存储在寄存器或内存中。
3. 执行简单的操作。
我们使用了jmp指令和标志位来执行条件分支,或使用算术指令来进行加减等操作。
在实验中,我们还学习了如何在调试模式下运行程序,以及如何使用汇编编译器将汇编代码转换为机器代码。
我们还使用了调试器来跟踪程序运行时的寄存器和内存内容,以及使用断点来在程序执行时停止并检查状态。
本次实验使我们更深入地了解了汇编语言的工作原理,并学习了如何设计和实现简单的操作系统。
通过了解和理解汇编语言,我们的编程能力将得到提高,帮助我们更好地理解计算机的内部工作原理。
《汇编语言》实验报告
![《汇编语言》实验报告](https://img.taocdn.com/s3/m/aa4544f764ce0508763231126edb6f1aff00712d.png)
《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。
实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。
汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。
本实验通过编写汇编语言程序,加深对汇编语言的理解。
二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。
2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。
3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。
b.设置段寄存器,将数据段地址加载到DS寄存器中。
c.设置显示模式和光标位置。
d.将字符串逐个字符输出到屏幕上。
e.关闭显示模式。
4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。
5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。
三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。
通过程序分析和调试过程,加深了对汇编语言的理解和掌握。
四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。
通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。
同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。
在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。
总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。
北京理工大学实验六 实验报告
![北京理工大学实验六 实验报告](https://img.taocdn.com/s3/m/0291e399d0d233d4b14e6913.png)
鲁迅-朝花夕ቤተ መጻሕፍቲ ባይዱ.doc
D:\文档\鲁迅-朝花夕拾.doc
13
13 14 15 16
实验报告表6 -3删除文件过程实验记录表
删除的文件名
是否删除文件目录项
是否删除文件索引序列
flowers
是
是
D:\多媒体\音乐\命运交响曲.mp3
9
9 1 12 25
第3次操作
flowers.png
D:\多媒体\图片\flowers.png
7
7 21 22
第4次操作
野生动物.wmv
D:\多媒体\有声读物\野生动物.wmv
4
4 10 23
实验报告表6 -2创建文件过程演示实验记录表
创建的文件名
文件路径
分配的物理首地址
实验六实验报告表
实验名称:
学号**********姓名史逸帆班级:********实验时间:2015年12月4日
实验报告表6 -1打开文件过程演示实验记录表
操作序号
文件名
文件路径
物理首地址
文件索引序列
第1次操作
朱自清-匆匆.doc
D:\文档\朱自清-匆匆.doc
19
19 8 2 27
第2次操作
命运交响曲.mp3
北理工汇编语言实验讲义-2016
![北理工汇编语言实验讲义-2016](https://img.taocdn.com/s3/m/3c22c72eee06eff9aef807f8.png)
CPU与汇编语言实验讲义张芨高平信息系统及安全对抗实验中心2016第一部分汇编语言设计中使用的系统软件简介 (3)第一章 MASM for Windows 集成实验环境 (4)第二章调试程序DEBUG的使用 (9)第二部分宏汇编语言程序设计 (17)实验一 MASM for Windows 环境下的汇编语言编程环境使用 (17)实验二算术运算实验 (19)实验三字符串操作实验 (22)实验四分支和循环实验 (25)实验五子程序与模块化程序设计实验 (28)实验六磁盘文件读写实验 (32)第一部分汇编语言设计中使用的系统软件简介汇编语言实验操作流程图如图1所示。
图1汇编语言实验操作过程在实验室上机时,计算机有教师机统一开启,学生不要随意关机。
1)严禁带电操作;2)带上理论课教材、实验指导书及准备的实验程序;3)调试实验程序,记录实验结果;4)实验结束后,关闭所有应用程序。
第一章 MASM for Windows 集成实验环境1.熟悉MASM for Windows 集成实验环境运行实验室计算机的MASM for Windows 软件,如图2所示。
图 2 MASM for Windows运行环境2.编写运行第一个汇编程序1)输入汇编程序打开MASM for Windows 集成实验环境,在“程序输入区”编写一个显示“Hello World!”的程序。
如图3所示。
图3输入汇编程序红色方框内是需要输入的汇编程序代码,而其它的汇编程序代码该软件自动生成汇编程序框架。
说明:输入的内容分别是:红色框1内的代码:STRING DB 'Hello World',13,10,'$'红色框2内的代码:LEA DX,STRINGMOV AH,9INT 21H2)保存汇编程序点击“工具栏”中的“保存”按钮(或“文件/另存为”或“文件/保存”),弹出“另存为”对话框,键入文件名,如“我的第一个汇编程序”,然后点击“保存”即可。
汇编语言实验报告_6
![汇编语言实验报告_6](https://img.taocdn.com/s3/m/1d5bf56ebb1aa8114431b90d6c85ec3a87c28ba0.png)
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。
然后在显示器输出排好序的数据, 中间用’,’隔开。
2.输出数据使用子程序方式。
算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。
(5)循环进入子程序, 输出原始数据。
(6)在子程序内循环输出每一位的十进制数字。
(7)主程序进行内外循环, 进行冒泡排序。
(8)再一次调用子程序输出排序后的结果。
调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。
所以前面必须加上MOV DX,OFFSET NOTE1。
(4)汇编语言是不会再输出汉字的。
(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。
调试结果:。
汇编语言实验报告
![汇编语言实验报告](https://img.taocdn.com/s3/m/de34c191250c844769eae009581b6bd97f19bcc5.png)
汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。
2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。
4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。
4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。
4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。
5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。
希望对你有所帮助!。
文件存储实验报告
![文件存储实验报告](https://img.taocdn.com/s3/m/33169801302b3169a45177232f60ddccdb38e64e.png)
实验目的:通过本次实验,了解文件存储的基本原理,掌握文件存储系统的组成和功能,熟悉不同文件存储方式的优缺点,并能够对文件存储系统进行性能测试和优化。
实验时间:2023年3月15日实验地点:计算机实验室实验器材:1. 计算机(配备Windows操作系统)2. 文件存储设备(如硬盘、固态硬盘、U盘等)3. 文件存储管理软件(如Windows资源管理器、Disk Management等)4. 文件压缩软件(如WinRAR等)实验内容:一、文件存储系统组成及功能1. 文件存储系统组成:(1)硬件:硬盘、固态硬盘、U盘等存储设备;(2)软件:操作系统中的文件系统、文件存储管理软件等。
2. 文件存储系统功能:(1)存储:将文件数据存储在存储设备上;(2)管理:对存储在设备上的文件进行分类、排序、检索、备份等操作;(3)保护:防止文件数据丢失、损坏,确保数据安全;(4)优化:提高文件存储系统的性能。
二、文件存储方式1. 磁盘存储方式:(1)优点:容量大、读写速度快、易于扩展;(2)缺点:存储速度受磁盘转速、寻道时间等因素影响。
2. 固态硬盘存储方式:(1)优点:读写速度快、无机械磨损、功耗低、体积小;(2)缺点:容量相对较小、价格较高。
3. U盘存储方式:(1)优点:携带方便、容量适中、易于扩展;(2)缺点:读写速度较慢、容量有限。
三、文件存储性能测试1. 测试工具:使用CrystalDiskMark软件进行测试。
2. 测试方法:(1)将测试文件复制到硬盘、固态硬盘、U盘中;(2)使用CrystalDiskMark软件分别对三种存储方式进行读写速度测试;(3)记录测试结果。
3. 测试结果分析:(1)硬盘:读写速度约为100MB/s;(2)固态硬盘:读写速度约为500MB/s;(3)U盘:读写速度约为20MB/s。
四、文件存储优化1. 合理分配磁盘空间:根据文件类型和用途,合理分配磁盘空间,提高磁盘利用率。
2. 定期整理磁盘:删除无用的文件,清理磁盘碎片,提高文件访问速度。
北京理工大学汇编实验报告
![北京理工大学汇编实验报告](https://img.taocdn.com/s3/m/4717266b1a37f111f0855b48.png)
本科实验报告实验名称:实验二算术运算实验课程名称:课程设计Ⅰ(CPU与汇编)(实验)实验时间:第5-10周周五下午任课教师:聂青实验地点:10-102实验教师:京霞实验类型:☑原理验证□综合设计□自主创新学生:罗逸雨学号/班级:1120141208 05211401 组号:3学院:信息与电子学院同组搭档:专业:通信工程成绩:一、实验目的1) 掌握MASM for Windows 环境下的汇编语言编程环境使用;2) 掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD码的表示形式;3) 掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志位的影响及测试方法;4) 掌握无符号数和有符号数运算区别及编程方法;二、实验环境与原理1.实验软硬件环境1) 硬件环境:惠普64 位一体化计算机及局域网;2) 软件环境:Windows 8,红蜘蛛管理系统,MASM for Windows。
2.实验原理算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。
1) 标志位在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。
2) 加减法指令ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。
3) 乘除法指令MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV表示带符号数除法指令。
4) 符号位扩展指令CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。
5) BCD码的调整指令在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD 码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD 码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。
组合的BCD码加法调整指令DAA;组合的BCD码减法调整指令DAS;非组合的BCD码加法调整指令AAA;非组合的BCD码减法调整指令AAS;乘法的非组合BCD码调整指令AAM;除法的非组合BCD码调整指令AAD。
汇编语言实验报告6
![汇编语言实验报告6](https://img.taocdn.com/s3/m/1bb5a85a336c1eb91a375ddb.png)
成绩评定教师签名嘉应学院计算机学院实验报告课程名称:汇编语言程序设计开课学期:2016-2017学年第1学期班级:1402指导老师:实验题目:转移指令原理学号:姓名:实验8分析一个奇怪的程序程序从start开始,将ax设置为0,然后设置2个字节的空空间将s2指向的内容放入s指向的内存中s的内容EBF6指s的地址相对于s1,跳转6个单位程序继续执行(机器指令为 JMP 0008),跳转到s(0b75:0008)的位置,s的内容为 EBF6,向低地址跳转6个单位(机器指令为 JMP 0000),即退出程序实验9 根据材料编程编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串’welcome to masm!’。
对程序进行编译、链接、用debug跟踪程结果如图在data数据段中存放要显示的字符串及其属性,02h表示绿色,24表示绿底红字、71表示白底蓝字先初始化各寄存器,把ds寄存器指向data段,ss指向stack段,sp指向栈底因为要输出三个字符串,要循环三次,执行循环前把cx,ax等入栈,防止数据被意外改变输出的每个字符串有16(10h)个字符,每个字符占两个字节“属性+内容”,在偶地址中存放要输出的字符,存放在es段中在奇地址存放字符的表现属性,将一行字符串存进内存中,开始准备输出下一行字符串如果用t、p、g指令分步追踪程序的执行,可以看到字符串的存储过程,表现出单个的字符和属性,如图:。
实验10 编写子程序1、显示字符串子程序描述名称:show_str功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79)(cl)=颜色,ds:si指向字符串的首地址返回:无应用举例:在屏幕的8行3列,用绿色显示data段中的字符串assume cs:codedata segmentdb 'Welcome to masm!',0data endscode segmentstart: mov dh,8 ;dh装行号(范围:1--25)mov dl,3 ;dl装列号(范围:1--80)[注:每超过80等于行号自动加1]mov cl,0cah ;cl中存放颜色属性(0cah为红底高亮闪烁绿色属性) mov ax,datamov ds,axmov si,0call show_strmov ax,4c00hint 21hshow_str:code endsend start对程序进行编译、链接、用debug跟踪程执行结果如图:show_str子程序的分析:bx=行号*每行的大小(a0h)=显示区所在的行号首地址的偏移地址每个字符占两个字节“属性+内容”,bx=bx+相对于显示行的列偏移量*2es存放显存的位置cx存放data段中的内容,如果为0则结束程序如果结果不为0,就把data段中对应的字符及其属性存到显存中。
北理工汇编语言实验报告6
![北理工汇编语言实验报告6](https://img.taocdn.com/s3/m/4248743590c69ec3d4bb7523.png)
汇编语言实验报告
第六章 磁盘文件存取实验(设计性实 验)
班级:05611102 姓名:肖枫
学号:1120111431 实验日期:2013.9.14下午
第六章磁盘文件存取实验(设计性实验) 一、实验要求和目的
1. 理解文件、目录的概念; 2. 了解 FCB(文件控制块)方式文件管理方法; 3. 掌握文件代号式文件存取方式; 4. 学习使用文件指针读取文件
2、编写一个创建文件的程序,其要求如下: 1)用键盘输入文件名(可包含路径),若输入的字符串为空,则程序运行 结束; 2) 若目录创建成功,显示成功信息,否则,显示创建失败信息; 3) 从键盘输入20 个字符存放到新建立的文件中。 代码及流程图如下:
data segment handle dw ? msg1 db 'Please input the file route:', 0dh, 0ah, '$' msg2 db 0dh, 0ah, 'Error: create file failed!', 0dh, 0ah, '$' msg3 db 0dh, 0ah, 'Create file successful!', 0dh, 0ah, '$' msg4 db 0dh, 0ah, 'Error: write file failed!', 0dh, 0ah, '$' msg5 db 0dh, 0ah, 'Please input 20 characters:', 0dh, 0ah, '$' fn_buf db 64 db ? fn_str db 64 dup(0) wf_buf db 64
操作系统实验(六) 读写磁盘
![操作系统实验(六) 读写磁盘](https://img.taocdn.com/s3/m/d276b41b6bd97f192279e985.png)
实验六读/写磁盘指定位置信息实验目的:1)了解磁盘的物理组织。
2)掌握windows系统提供的有关对磁盘操作API。
3)根据输入的扇区号读/写指定扇区。
实验准备知识:1) 设置读写操作的位置:函数SetFilepointer()用于移动一个打开文件中的读/写指针,这里磁盘设备被当作文件处理,因此用于移动文件读/写指针在磁盘上的位置。
2) 读文件:用函数ReadFile()读取磁盘指定区域的内容(从文件指针指示的位置开始读取文件中的数据)。
3)写文件:用函数Write File()将数据写入磁盘指定区域。
函数在文件指针所指的位置完成写操作,写操作完成后,文件指针按实际写入的字节数来调整。
实验内容:在实验五的基础上,继续完成该试验。
编写两个函数,分别完成如下功能。
1)对给定的扇区号读取该扇区的内容。
2)将用户输入的数据写入指定的扇区。
实验要求:深入理解操作系统设备当作文件处理的特性,理解函数SetFilepointer()、ReadFile()及Write File()中每个参数的实际意义并能在本实验中正确应用。
实验指导:在主程序中让用户选择:R、W、Q或,若用户选择R,则调用函数BOOL SectorRead (HANDLEHandle),完成读给指定扇区的功能;若用户选择W,则调用函数BOOL SectorWrite(HANDLEHandle),完成对给定扇区号写入信息的功能,若用户选择Q,则程序退出。
参考源代码:// 操作系统实验六.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "操作系统实验六.h"#include "winioctl.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS__FILE[]=__FILE__;#endifDISK_GEOMETRY disk_info;HANDLE GetDiskInformation(char drivername);BOOL SectorRead(HANDLE Handle);BOOL SectorWrite(HANDLE Handle);///////////////////////////////////////////////////////The one and only application objectCWinApp theApp;using namespace std;int _tmain(int argc,TCHAR* argv[],TCHAR* envp[]){int nRetCode=0;HANDLE Handle;char Choice;Handle=GetDiskInformation('C');while(TRUE){printf("Please Select Read or Write!Input 'R' ro read,'W' to Write,'Q' to quit!\n"); Choice=getchar();printf("\n");switch(Choice){case 'W':{if(!SectorWrite(Handle)) printf("Write Sector Fail!\n");getchar();break;}case 'R':{if(!SectorRead(Handle)) printf("Read Sector Fail!\n");getchar();break;}case 'Q':{exit(0);break;}default:{printf("Input Error!,Try again please!\n");getchar();}}}return nRetCode;}HANDLE GetDiskInformation(char drivername) // GetDiskInformation获取磁盘信息{char device[]="\\\\.\\";device[4]=drivername;HANDLE FloopyDisk;DWORD ReturnSize;// DWORD双字节值DWORD Sector;double DiskSize;FloopyDisk=CreateFile(device,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS|FILE_FLAG_NO_BUFFERING,NULL);if(FloopyDisk==INV ALID_HANDLE_V ALUE)printf("INV ALID_HANDLE_V ALUE!\n");if(GetLastError()==ERROR_ALREADY_EXISTS)printf("Can not Open Disk!%d\n",GetLastError());if(!DeviceIoControl(FloopyDisk,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&disk_info,50,&ReturnSize,(LPOVERLAPPED)NULL))printf("Open Disk Error!%d\n",GetLastError());printf("Disk Information:\n");printf("\t BytePerSector:%d\n",disk_info.BytesPerSector);printf("\t SectorPerTrack:%d\n",disk_info.SectorsPerTrack);printf("\t TracksPerCylider:%d\n",disk_info.TracksPerCylinder);printf("\t Cylider:%d\n",disk_info.Cylinders);Sector=disk_info.Cylinders.QuadPart*disk_info.TracksPerCylinder*disk_info.SectorsPerTrack;printf("\t There is %d Sectors!\n",Sector);DiskSize=Sector*disk_info.BytesPerSector;printf("\t Size of Disk:%4.2f KB\n",(DiskSize)/(1024*1024));return FloopyDisk;}BOOL SectorRead(HANDLE Handle){char ReadBuffer[1024*16];DWORD SectorNumber;DWORD BytestoRead;DWORD Sector;DWORD rc;int i;if(Handle==NULL){printf("There is No disk!\n");return FALSE;}printf("Please Input the Sector Number to Read Form:\n");scanf("%d",&SectorNumber);printf("\n");Sector=disk_info.Cylinders.QuadPart*disk_info.TracksPerCylinder*disk_info.SectorsPerTrack;if(SectorNumber>Sector) printf("There is not this Sector!\n");printf("Content:\n");BytestoRead=SectorNumber*(disk_info.BytesPerSector);rc=SetFilePointer(Handle,BytestoRead,NULL,FILE_BEGIN);if(!ReadFile(Handle,ReadBuffer,BytestoRead,&BytestoRead,NULL)) {printf("Read File Error:%d\n",GetLastError());return FALSE;}printf("\t Text Content:\n");for(i=0;i<512;i++){printf("%c",ReadBuffer[i]);}printf("\n");printf("\t Hex Text Content:\n");for(i=0;i<512;i++){printf("%x",ReadBuffer[i]);printf(" ");}printf("\n");return TRUE;}BOOL SectorWrite(HANDLE Handle){char WriteBuffer[1024];DWORD SectorNumber,SectorMove;DWORD BytestoWrite;DWORD Sector;DWORD rc;if(Handle==NULL){printf("There is No disk!\n");return FALSE;}printf("Please Input the Sector Number to Write to:\n");scanf("%d",&SectorNumber);printf("\n");Sector=disk_info.Cylinders.QuadPart*disk_info.TracksPerCylinder*disk_info.SectorsPerTrack;if(SectorNumber>Sector)printf("There is not this Sector!\n");printf("Please Input the Content to Write to Disk A:\n");scanf("%s",&WriteBuffer);// WriteBuffer指的是写缓冲区SectorMove=SectorNumber*(disk_info.BytesPerSector);rc=SetFilePointer(Handle,SectorMove,NULL,FILE_BEGIN);if(!WriteFile(Handle,WriteBuffer,512,&BytestoWrite,NULL)){printf("Read File Error:%d\n",GetLastError());return FALSE;}printf("Write Complete!\n");return TRUE;}实验步骤:1)根据实验五的实验步骤首先新建一个工程文件以及把参考代码输进去,还要在参考代码中需要手动输入头文件包含命令#include "winioctl.h"。
北京理工大学微机原理实验报告
![北京理工大学微机原理实验报告](https://img.taocdn.com/s3/m/4c0ded5bccbff121dc36832f.png)
微机原理与接口技术实验报告实验内容:汇编语言程序设计实验组别:12姓名:班级:学号:一、实验目的1、熟悉IDE86集成开发环境的使用。
2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。
3、熟悉DOS命令调用,以达到输入输出、返回DOS系统等目的。
4、掌握利用汇编实现求和与求最值的方法。
5、掌握利用汇编实现数制转换的方法。
6、巩固理论知识,锻炼动手编程,独立思考的能力。
二、实验内容(具体内容)1、求从TABLE开始的10个无符号字节数的和,并将结果放在SUM字单元中。
并查看前5个,前8个数之和以及各寄存器和内存的状态。
2、在1的基础上修改程序,求出10个数中的最大值和最小值,最后将最大最小值分别赋给MAX及MIN。
3、求1到 100 的累加和,并用十进制形式将结果显示在屏幕上。
要求实现数据显示,并返回DOS状态。
三、实验方法1、设计思路(1)实验1的设计思路:先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环结构依次取出数值放在AL中并累加,若有进位则加到AH中直至循环10次累加结束,将累加的结果放在SUM中并返回DOS状态。
(2)实验2的设计思路:先将10个要比较的数放在以TABLE为首的10个连续的存储单元中。
将第一个数首先赋给AL和AH(分别存储相对最小和最大值)在利用LOOP循环结构,依次和下面的数进行比较,每次把相对的最大值与最小值存储到AH和AL中直至循环9次比较结束,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态(3)实验3的设计思路:先在内存中定义COUNT=100,表示1-100求和,若相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。
先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进行数值转化,AX 依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。
汇编语言实验报告
![汇编语言实验报告](https://img.taocdn.com/s3/m/946b5a230a1c59eef8c75fbfc77da26925c596d6.png)
汇编语言实验报告引言:汇编语言作为低级语言之一,在计算机科学领域具有重要的地位。
本篇文章将围绕汇编语言的实验进行讨论,重点探索汇编语言在计算机编程中的应用和优势。
通过实际的实验过程,我们能够更加深入地认识汇编语言的特点和使用方法。
本报告将从实验的准备工作、实验的步骤、实验结果以及实验心得等方面进行论述。
实验准备:在开始实验之前,准备工作是非常重要的。
首先,我们需要下载安装合适的汇编语言开发环境,比如MASM或者NASM。
接着,我们需要理解汇编语言的基本知识,包括寄存器、内存和指令等的概念。
此外,我们还需要掌握一些基本的汇编语言指令,比如MOV、ADD、SUB等。
这些准备工作对于我们能够顺利进行实验具有关键性的作用。
实验步骤:在实验过程中,我们经历了一系列的步骤,下面将一一进行介绍。
1. 确定实验目标:在进行实验之前,我们需要明确实验的目标和要达到的结果。
比如,我们可以选择实现一个简单的计算器程序,能够实现基本的加减乘除运算。
这样的目标可以帮助我们更好地理解汇编语言的使用方法和语法规则。
2. 编写代码:在明确了实验目标之后,我们开始编写汇编语言代码。
首先,我们需要定义一些变量和常量,以便在程序中使用。
然后,我们根据实验目标,逐步编写实现相应功能的代码段。
在这个过程中,我们需要注意汇编语言的特点,比如大小写敏感、指令的书写格式等。
3. 调试程序:编写完代码后,我们需要对程序进行调试,以确保其功能的正确性。
在调试过程中,我们会使用一些调试工具,比如调试器,帮助我们找出代码中的错误并进行修复。
通过调试,我们能够提高代码的质量和效率。
4. 运行程序:在完成调试之后,我们开始运行程序,观察程序的运行结果。
通过不断运行和测试,我们可以检验程序的正确性和可靠性。
如果程序能够输出我们预期的结果,那么说明我们的实验成功了。
实验结果:在我们进行实验的过程中,我们获得了一些令人满意的结果。
通过编写汇编语言代码,我们成功实现了一个简单的计算器程序。
北京理工大学汇编实验报告
![北京理工大学汇编实验报告](https://img.taocdn.com/s3/m/7ed46056ddccda38366baf28.png)
本科实验报告实验名称:实验三字符串操作实验一、实验目的1) 熟悉串操作指令的功能与应用;2) 掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3) 了解汇编语言字符串处理基本流程;二、实验环境与原理1.实验软硬件环境1) 硬件环境:惠普 64 位一体化计算机及局域网;2) 软件环境:Windows 8,红蜘蛛管理系统,MASM for Windows。
2.实验原理1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;CLD指令使DF=0在执行串处理指令时可使地址自动增量;STD 使 DF=1,在执行串处理指令时可使地址自动减量。
2)重复前缀指令CX 中存放的值决定,指令每重复执行一次,计数器 CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。
REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。
经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。
REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。
可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。
REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。
可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。
3)字符串操作指令lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI;stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI;movsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI;scasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;cmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;rep:重复其后的串操作指令。
操作系统实习报告(磁盘文件操作)
![操作系统实习报告(磁盘文件操作)](https://img.taocdn.com/s3/m/ade6122add88d0d233d46ace.png)
大学操作系统课程综合实践题目:磁盘文件操作班级:姓名:学号:指导教师:2011年 12 月 23日磁盘文件操作摘要:为了正确地实现文件的存取,文件系统设计了一组与存取文件有关的功能模块,用户可以用“访问指令”调用这些功能模块,以实现文件的存取要求。
我们把文件系统设计的这一组功能模块称为“文件操作“,实验就是要模拟实现一些文件操作。
文件操作不是独立的,它和文件系统的其他部分密切相关,若要实现文件操作就离不开文件的目录结构、文件的组织结构和磁盘空间的管理。
因此,这个实习虽然是文件操作的模拟实现,但还是必须模拟一部分文件的组织结构、目录结构和磁盘空间管理的实现。
关键字:磁盘、文件、目录、分配表。
一、实验内容:设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区,要求实现;1.支持多级目录结构,支持文件的绝对路径;2.文件的逻辑结构采用流式结构,物理结构采用链接结构中的显示链接方式;3.采用文件分配表;4.实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件(追加方式)、关闭文件、改变文件属性。
最后编写主函数对所做工作进行测试。
二、实验目的:1、文件的操作。
2、文件的逻辑结构和物理结构3、磁盘空间的管理4、磁盘目录结构三、实验环境:Windows XP、VC++四、程序运行结果(详图):程序运行的主界面:用户运行命令7-建立目录用户运行命令1-建立文件:显示目录内容:打开文件:写文件:关闭文件:再次显示目录内容:以上为程序的运行的部分截图。
五、程序清单:#define false 0#define true 1#include ""ame,name)!=0)/*依次查找已打开文件表*/i++;if(i>=return(-1);return(i);}/*查找sopen函数结束*/void dopen(char *name)/*在已打开文件表中删除文件name*/64L64L64L-64L64Llag==1){printf("文件以写方式打开,不能读\n");return 0;}t=0;fseek(fc,[i].*64L,SEEK_SET);fread(buffer1,64,1,fc);while(t<length&&buffer1[[i].]!='#'){putchar(buffer1[[i].]);/*读出一个字符(这里是在屏幕上显示)*/if((t+1)%64==0)putchar('\n');/*修改读指针*/[i].++;if[i].>=64)/*一块读完,读取下一个盘块*/{fseek(fc,[i].64*64, SEEK_SET);fread(buffer1,64,1,fc);[i].=buffer1[[i].%64];/*修改读指针*/[i].=0;fseek(fc,[i].*64L,SEEK_SET);fread(buffer1,64,1,fc);/*读取下一个*/}t++;}}/*读函数结束*/int write_file(char *name,char *buff,int length) lag==0){printf("文件以读方式打开,不能写\n");return (false);}t=0;fseek(fc,[i].*64L, SEEK_SET);fread(buffer1,64,1,fc);while(t<length){buffer1[[i].]=buff[t];[i].++;[i].length++;if[i].>=64){fseek(fc, [i].*64L, SEEK_SET);fwrite(buffer1,64,1,fc);/*一块写完,写回磁盘*/if((dd=allocate())==false){[i].;[i].length--;printf("无磁盘空间,部分信息丢失,写失败\n");return (false);}/*if*/fseek(fc,[i].64*64L, SEEK_SET);fread(buffer1,64,1,fc);buffer1[[i].%64]=dd;fseek(fc,[i].64*64L, SEEK_SET);fwrite(buffer1,64,1,fc);[i].=dd;[i].=0;}/*if*/t++;}/*while*/fseek(fc, [i].*64L, SEEK_SET);fwrite(buffer1,64,1,fc);/*一块写完,写回磁盘*/}/*写函数结束*/int search(char *name,int flag,int *dnum,int *bnum)/*查找路径名为name的文件或目录,返回该目录的起始盘块号 */&&name[k]!='/'&&s<3&&name[k]!='\0';s++,k++)pna[s]=name[k];for(;s<3;s++)/*用空格补全名字长度*/pna[s]=' ';while(name[k]!='.'&&name[k]!='\0'&&name[k]!='/')/*除去多余字符*/k++;type[0]=type[1]=' ';if(name[k]=='.')/*取文件类型名type*/if(flag==8){printf("目录不应该有有类型名,查找失败\n");return(false);}else{/*文件遇到类型名认为结束,后面的字符作废*/k++;if(name[k]!='\0')type[0]=name[k];k++;if(name[k]!='\0')type[1]=name[k];if(name[k]!='\0'&&name[k+1]!='\0'){printf("文件名错误\n");return(false);}last=1;}elseif(name[k]!='\0')k++;if(name[k]=='\0')last=1;/*查找目录且名字等于pna的目录项*/fseek(fc,i*64L,SEEK_SET);fread(buffer2,64L,1,fc);j=0;if(last==1&&flag!=8)while(j<8&&!(buffer2[j].attribute!=8&&buffer2[j].name[0]==pna[0]& &buffer2[j].name[1]==pna[1]&&buffer2[j].name[2]==pna[2]&&buffer2[j].type[0]==type[0]&&buffer2[j].type[1]==type[1]))j++;elsewhile(j<8&&!(buffer2[j].attribute==8&&buffer2[j].name[0]==pna[0]&&buffer2[j].name[1]==pna[1]&&buffer2[j].name[2]==pna[2]))j++;if(j<8)/*找到该目录或文件*/if(last==1)/*查找结束*/{*dnum=i;*bnum=j;return(buffer2[j].address);} ddress;/*读取下一个盘块*/elsereturn(false);}/*while 查找结束*/}/*search()结束*/int create_file(char *name,int attribute)/*建立文件函数,路径名name,文件属性attribute*/;j++,k++)dname[k]=name[j];if(k==0){printf("错误文件名或目录名\n");return(false);}for(;k<3;k++)dname[k]=' ';k=0;if(name[j++]=='.')/*分离类型名*/{for(;name[j]!='\0'&&k<2&&name[j]!='.';j++,k++)tname[k]=name[j];}for(;k<2;k++)tname[k]=' ';if((d=search(pathname,8,&dn,&bn))==false)/*找到目录路径,返回该目录所在块号dn和项数bn*/{printf("目录不存在,不能建立");return(false);}/*确认该目录不存在的同时查找空目录项*/b=-1; 64L64Lame[0]==dname[0]&&buffer2[t].name[1]==dname[1]&&buffer2[t].name[2]==dname[2]&&buffer2[t].type[0]==tname[0]&&buffer2[t].type[1]==tname[1]){/*找到名字dname的文件,建立失败*/printf("文件已经存在,不能建立\n");return(false);}if(buffer2[t].name[0]=='$'&&b==-1)b=t;}/*for*/if(b==-1)/*没有空目录项,建立失败*/{printf("目录无空间\n");return(false);}if((dd=allocate( ))==false)/*分配给建立目录的磁盘盘块dd*/{printf("建立文件失败\n");return(false);}for(i=0;i<3;i++)buffer2[b].name[i]=dname[i];for(i=0;i<2;i++)buffer2[b].type[i]=tname[i];buffer2[b].attribute=attribute;buffer2[b].address=dd;buffer2[b].length=0;fseek(fc,d*64L,SEEK_SET);fwrite(buffer2,64L,1,fc);/*填写已打开文件表*/strcpy,name);=attribute;=dd;=0;=1;64Lttribute%2==1)&& attribute==1)/*对只读文件要求写*/{printf("文件不能写,打开失败");return(false);}strcpy,name);=buffer2[bnum].attribute;=buffer2[bnum].address;=attribute;if(attribute==1){while(d!='\xff')/*寻找文件末尾*/{fseek(fc, d/64*64L, SEEK_SET);fread(buffer1,64L,1,fc);/*读出dnum项所在FAT*/last=d;d=buffer1[d%64];/*读出dnum块下一块内容赋给dnum*/ }/*while*/fseek(fc, last*64L, SEEK_SET);fread(buffer1,64L,1,fc);for(i=0;i<64&&buffer1[i]!='#';i++);=(buffer2[bnum].length-1)*64+i;}iopen(&x);/*填写已打开文件表*/}int close_file(char *name)/*关闭文件函数*/lag==1)/*写文件的追加文件结束符*/{fseek(fc,[i].*64L, SEEK_SET);fread(buffer1,64,1,fc);buffer1[[i].]='#';fseek(fc,[i].*64L, SEEK_SET);fwrite(buffer1,64,1,fc);fputc('#',fc);search(name,4,&dnum,&bnum);/*查找该文件目录位置*//*修改目录中的文件长度*/fseek(fc,dnum*64L, SEEK_SET);fread(buffer2,64,1,fc);buffer2[bnum].length=[i].length/64+1;fseek(fc, dnum*64L, SEEK_SET);fwrite(buffer2,64,1,fc);}/*在已打开文件表中删除该文件的登记项*/if>1) 64Lame[0]='$';/*将该文件的目录置成空目录*/fseek(fc,dnum*64L, SEEK_SET);fwrite(buffer2,64,1,fc);while(t!='\xff')/*通过FAT查找每一个盘块号,并依次删除*/{dnum=t;fseek(fc, dnum/64*64, SEEK_SET);fread(buffer1,64,1,fc);t=buffer1[dnum%64];buffer1[dnum%64]=0;fseek(fc, dnum/64*64L, SEEK_SET);fwrite(buffer1,64,1,fc);}}/*文件删除结束*/int md(char *name)/*建立目录函数,目录路径名name*/;j++,k++)dname[k]=name[j];if(k==0){printf("错误文件名或目录名\n");return(false); 64L64Lame[0]==dname[0]&&buffer2[t].name[1]==dname[1]&&buffer2[t].name[2]==dname[2]&&buffer2[t].attribute==8){/*找到名字dname的目录,建立失败*/printf("目录已经存在,不能建立\n");return(false);}if(buffer2[t].name[0]=='$'&&b==-1)b=t;}/*for*/if(b==-1)/*没有空目录项,不能建立*/{printf("目录无空间\n");return(false);}if((dd=allocate( ))==false)/*分配给建立目录的磁盘盘块dd*/{printf("目录不能建立\n");return(false);}/*填写目录项*/for(i=0;i<3;i++)buffer2[b].name[i]=dname[i];buffer2[b].type[0]=buffer2[b].type[1]=' ';buffer2[b].attribute=8;buffer2[b].address=dd;buffer2[b].length=0;fseek(fc,d*64L,SEEK_SET);fwrite(buffer2,64L,1,fc);/*分给新建目录的盘块初始化*/for(t=0;t<8;t++)buffer2[t].name[0]='$';fseek(fc, dd*64L, SEEK_SET);fwrite(buffer2,64L,1,fc);}/*建立目录结束*/int dir(char *name)/*显示目录内容*/64L64Lame[0]!='$')printf(" %c%c%c %c%c %4d%7d\n", buffer2[t].name[0], buffer2[t].name[1],buffer2[t].name[2], buffer2[t].type[0], buffer2[t].type[1],buffer2[t].address, buffer2[t].length);}/*显示目录函数结束*/char typefile(char *name)/*显示文件内容*/64L64L64Lttribute=attribute;/*修改属性*/fseek(fc,dnum*64L,SEEK_SET);fwrite(buffer2,64,1,fc);/*写回磁盘*/}/*改变文件属性函数结束*/int main( ){char name[20];64L64Lame[0]='$';/*若目录项的第一个字符为“$”表示该目录项为空*/ fwrite(buffer2,64L,1,fc);/*初始化已打开文件表*/while(1){printf("\n 0 - 结束\n");printf(" 1 - 建立文件\n");printf(" 2 - 打开文件\n");printf(" 3 - 读文件\n");printf(" 4 - 写文件\n");printf(" 5 - 关闭文件\n");printf(" 6 - 删除文件\n");printf(" 7 - 建立目录\n");printf(" 8 - 显示目录内容\n");printf(" 9 - 显示文件内容\n");printf(" 10 - 改变文件属性\n");printf(" 选择功能项(0~9):");scanf("%d",&a);switch(a){case 0: /*a=0程序结束*/fclose(fc);exit(0);case 1: /*a=1建立文件*/printf("输入文件路径名和文件属性(1-只读文件,3-只读系统文件,4-普通文件):");scanf("%s%d",name,&attribute);create_file(name,attribute); /*建立文件*/break;case 2: /*a=2打开文件*/printf("输入文件路径名和操作类型(0-读文件,1-写文件):");scanf("%s%d",name,&type);open_file(name,type); /*打开文件*/break;case 3: /*a=3读文件*/printf("输入文件路径名和读长度");scanf("%s%d",name,&length);read_file(name,length); /*读文件*/break;case 4: /*a=4写文件*/printf("输入文件路径名:");scanf("%s",name);printf("输入写的内容和和写长度");scanf("%s%d",buffer,&length);write_file(name,buffer,length); /*写文件*/break;case 5: /*a=5关闭文件*/ 算机操作系统(实验指导书),哈尔滨工业大学出版社.2008年9月[2] 张明等编.操作系统习题解答与实验指导(第二版).中国铁道出版社.2007年12月[3] 张丽芬等编.操作系统实验教程.清华大学出版社.2006年[4] 张献忠等编.操作系统学习辅导.清华大学出版社.2004年[5] 汤小丹等编.计算机操作系统.西安电子科技大学出版社.2006年9月。
汇编实验报告6
![汇编实验报告6](https://img.taocdn.com/s3/m/2931978edb38376baf1ffc4ffe4733687e21fcc2.png)
汇编实验报告6汇编实验报告6引言:汇编语言是一种底层编程语言,它直接操作计算机硬件,提供了对计算机底层资源的更精确控制。
在本次实验中,我们将继续学习和实践汇编语言的相关知识,探索其在计算机系统中的作用和应用。
一、实验目的本次实验旨在加深我们对汇编语言的理解,并通过实践进一步掌握汇编语言的基本概念、语法和应用。
具体目标如下:1. 掌握汇编语言的基本指令和寻址方式;2. 理解和实现简单的汇编程序;3. 学会使用调试工具调试汇编程序。
二、实验环境本次实验使用的环境为Windows操作系统和MASM汇编器。
在实验开始前,我们需要确保已经正确安装了MASM汇编器,并配置好了相关环境变量。
三、实验过程1. 编写程序本次实验我们将编写一个简单的汇编程序,实现两个数相加并输出结果的功能。
首先,我们需要使用文本编辑器打开一个新的文件,并保存为.asm格式。
接下来,我们将按照汇编语言的语法规则,逐步编写程序。
2. 汇编程序的结构一个标准的汇编程序由三个部分组成:数据段、代码段和堆栈段。
在数据段中,我们定义了需要使用的变量和常量;在代码段中,我们编写了实际的汇编指令;而堆栈段则用于存储程序执行过程中的临时数据。
3. 汇编指令的使用在本次实验中,我们将使用一些常见的汇编指令,如MOV、ADD、SUB等。
这些指令用于操作寄存器、内存和立即数,实现数据的传输、运算和比较等功能。
4. 调试程序编写完汇编程序后,我们需要使用调试工具对程序进行调试,以确保程序的正确性。
调试工具可以帮助我们逐条执行程序,并查看寄存器和内存的变化,从而找出程序中的错误。
四、实验结果与分析经过编写和调试,我们成功地实现了两个数相加并输出结果的功能。
我们可以通过调试工具查看程序执行过程中寄存器和内存的变化,以验证程序的正确性。
同时,我们还可以对程序进行性能分析,了解其在不同输入情况下的执行效率。
五、实验总结通过本次实验,我们深入学习了汇编语言的基本概念和应用。
汇编语言实验六磁盘文件存取实验报告
![汇编语言实验六磁盘文件存取实验报告](https://img.taocdn.com/s3/m/8e839830f02d2af90242a8956bec0975f465a4ed.png)
汇编语言实验六磁盘文件存取实验报告预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制第六章磁盘文件存取实验(设计性实验)一、实验要求和目的1.理解文件、目录的概念;2.了解 FCB(文件控制块)方式文件管理方法;3.掌握文件代号式文件存取方式;4.学习使用文件指针读取文件二、软硬件环境1.硬件环境:计算机系统 windows;2.软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识单元DOS功能调用中断(INT 21H)提供了两类磁盘文件管理功能,一类是FCB(文件控制块)方式,另一类是文件代号式存取方式。
对于文件的管理,实际上是对文件的读写管理, DOS 设计了四种存取文件方式:顺序存取方式、随机存取方式、随机分块存取方式和代号法存取方式。
文件的处理步骤A)写之前必须先建立文件、读之前必须先打开文件。
B)写文件之后一定要关闭文件。
通过关闭文件,使操作系统确认此文件放在磁盘哪一部分,写后不关闭会导致写入文件不完整。
1、文件代号式存取方式:当用户需要打开或建立一个文件时,必须提供文件标识符。
文件标识符用ASCII Z 字符串表示。
ASCII Z 字符串是指文件标识符的ASCII 字符串后面再加1 个“0”字符。
文件标识符的字符串包括驱动器名、路径名和文件名。
其格式为[d:][path]filename[.exe]其中d 为驱动器名,path 为路径名,.exe 为文件名后缀。
中断 21H 提供了许多有关目录和文件操作的功能,其中文件代号式存取方式常用的功能如下:2、操作目录的常用功能39H——创建目录 3BH——设置当前目录3AH——删除目录 47H——读取当前目录有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅相关资料之目录控制功能。
3、用文件句柄操作文件的常用功能3CH——创建文件 4EH——查找到第一个文件3DH——打开文件 4FH——查找下一个文件3EH——关闭文件 56H——文件换名3FH——读文件或设备 57H——读取/设置文件的日期和时间40H——写文件或设备 5AH——创建临时文件41H——删除文件 5BH——创建新文件42H——设置文件指针 67H——设置文件句柄数(最多文件数)43H——读取/设置文件属性 6CH——扩展的打开文件功能有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅相关资料之文件操作功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章磁盘文件存取实验(设计性实验)一、实验要求和目的1.理解文件、目录的概念;2.了解FCB(文件控制块)方式文件管理方法;3.掌握文件代号式文件存取方式;4.学习使用文件指针读取文件二、软硬件环境1.硬件环境:计算机系统windows;2.软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识单元DOS功能调用中断(INT 21H)提供了两类磁盘文件管理功能,一类是FCB(文件控制块)方式,另一类是文件代号式存取方式。
对于文件的管理,实际上是对文件的读写管理,DOS 设计了四种存取文件方式:顺序存取方式、随机存取方式、随机分块存取方式和代号法存取方式。
文件的处理步骤A)写之前必须先建立文件、读之前必须先打开文件。
B)写文件之后一定要关闭文件。
通过关闭文件,使操作系统确认此文件放在磁盘哪一部分,写后不关闭会导致写入文件不完整。
1、文件代号式存取方式:当用户需要打开或建立一个文件时,必须提供文件标识符。
文件标识符用ASCII Z 字符串表示。
ASCII Z 字符串是指文件标识符的ASCII 字符串后面再加1 个“0”字符。
文件标识符的字符串包括驱动器名、路径名和文件名。
其格式为[d:][path]filename[.exe]其中d 为驱动器名,path 为路径名,.exe 为文件名后缀。
中断 21H 提供了许多有关目录和文件操作的功能,其中文件代号式存取方式常用的功能如下:2、操作目录的常用功能39H——创建目录 3BH——设置当前目录3AH——删除目录 47H——读取当前目录有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅相关资料之目录控制功能。
3、用文件句柄操作文件的常用功能3CH——创建文件 4EH——查找到第一个文件3DH——打开文件 4FH——查找下一个文件3EH——关闭文件 56H——文件换名3FH——读文件或设备 57H——读取/设置文件的日期和时间40H——写文件或设备 5AH——创建临时文件41H——删除文件 5BH——创建新文件42H——设置文件指针 67H——设置文件句柄数(最多文件数)43H——读取/设置文件属性 6CH——扩展的打开文件功能有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅相关资料之文件操作功能。
下面简单介绍几种常用的功能:(1).建立文件(3CH)功能:按指定文件名建立文件。
入口参数:(AH)=3CH,DS:DX 指向ASCII Z 字符串的段地址和偏移地址,(CX)=文件属性。
出口参数:若操作成功,则CF=0,(AX)=文件代号;若操作失败,则CF=1,(AX)=错误代码。
(2).打开文件(3DH)功能:打开由ASCII Z 串指定的文件。
入口参数:(AH)=3DH,DS:DX 指向ASCII Z 字符串的段地址和偏移地址,(AL)=存取方式代码(0:读文件,1:写文件,2:读、写文件)。
出口参数:若操作成功,则CF=0,(AX)=文件代号;若操作失败,则CF=1,(AX)=错误代码。
(3).关闭文件(3EH)功能:关闭文件代号指定的文件。
入口参数:(AH)=3EH,(BX)=文件代号。
出口参数:若操作成功,则CF=0;若操作失败,则CF=1,(AX)=错误代码。
(4).读文件(3FH)功能:按文件代号读取文件。
入口参数:(AH)=3FH,(BX)=文件代号,(CX)=要读取的字节数;DS:DX 指向接收数据缓冲区的段地址和偏移地址。
出口参数:若操作成功,则CF=0,(AX)=实际读入字节数,(AX)=0,文件结束;若操作失败,则CF=1,(AX)=错误代码。
(5).写文件(40H)功能:按文件代号写文件。
入口参数:(AH)=40H,(BX)=文件代号,(CX)=要写入的字节数;DS:DX 指向存放写入信息数据缓冲区的段地址和偏移地址。
出口参数:若操作成功,则CF=0,(AX)=写入字节数;若操作失败,则CF=1,(AX)=错误代码。
(6).移动文件指针(42H)功能:移动由文件代号标志的文件读写指针的位置入口参数:在bx 预置文件代号,在cx:dx 双字中预置移动位移量,在 al 中预置移动方式移动方式:00h 移动后文件指针值=0+移动位移量01h 移动后文件指针值=当前文件指针值+移动位移量02h 移动后文件指针值=文件尾值+移动位移量出口参数:CF=0 表示移动成功,此时CX:DX 双字中返回移动后文件指针值;CF=1 表示移动失败,此时AX 中返回值为1 表示移动方式无效,为6 表示无效的文件代号。
(7).取/置文件属性(43H)功能:按文件代号写文件。
入口参数:(AH)=43H,DS:DX 指向ASCII Z 串的段地址和偏移地址。
(AL)=0,取文件属性,(AL)=1,置文件属性;置文件属性时,(CX)=新文件属性(低字节)。
出口参数:若操作成功,则CF=0,若为取属性,(CX)=文件属性;若操作失败,则CF=1,(AX)=错误代码。
用FCB 操作文件的常用功能和磁盘绝对读写中断请参阅相关资料,不作要求。
四、实验内容与步骤(文件代号式存取方式)1、编写一个创建子目录的程序,具体要求如下:1)用键盘输入一个目录路径名,若输入的字符串为空,则程序运行结束;2)若目录创建成功,显示成功信息,否则,显示创建失败信息。
·流程图如下:·源代码如下:data segmenthandle dw ?msg1 db 'Please input the directory route:', 0dh, 0ah, '$'msg2 db 0dh, 0ah, 'Error: create directory failed!', 0dh, 0ah, '$' msg3 db 0dh, 0ah, 'Create directory successful!', 0dh, 0ah, '$' dirn_buf db 64db ?dirn_str db 64 dup(0)data endscode segmentassume cs:code, ds:datastart:mov ax, datamov ds, axlea dx, msg1mov ah, 09hint 21h ;;输出提示信息lea dx, dirn_bufmov ah, 0ahint 21hmov bl, [dirn_buf+1]mov bh, 0mov dirn_str[bx], 0 ;;输入目录路径,将串尾回车更换为00cmp byte ptr [dirn_buf+1], 0jz exit ;;输入为空,直接退出lea dx, dirn_strmov cx, 00hmov ah, 39hint 21h ;;创建目录jc error ;;错误mov handle, ax ;;保存文件代号lea dx, msg3mov ah, 09hint 21h ;;输出成功信息mov bx, handlemov ah, 3ehint 21h ;;关闭文件jmp exiterror:lea dx, msg2 ;;输出错误信息mov ah, 09hint 21hexit:mov ax, 4c00hint 21hcode endsend start此时已经成功在G盘下创建abc文件夹2、编写一个创建文件的程序,其要求如下:1)用键盘输入文件名(可包含路径),若输入的字符串为空,则程序运行结束;2)若目录创建成功,显示成功信息,否则,显示创建失败信息;·流程图如下:data segmenthandle dw ?msg1 db 'Please input the file route:', 0dh, 0ah, '$'msg2 db 0dh, 0ah, 'Error: create file failed!', 0dh, 0ah, '$' msg3 db 0dh, 0ah, 'Create file successful!', 0dh, 0ah, '$' msg4 db 0dh, 0ah, 'Error: write file failed!', 0dh, 0ah, '$' msg5 db 0dh, 0ah, 'Please input 20 characters:', 0dh, 0ah, '$' fn_buf db 64db ?fn_str db 64 dup(0)wf_buf db 64db ?wf_str db 64 dup(0)data endscode segmentassume cs:code, ds:datastart:mov ax, datamov ds, axlea dx, msg1mov ah, 09hint 21h ;;输出提示信息lea dx, fn_bufmov ah, 0ahint 21hmov bl, [fn_buf+1]mov bh, 0mov fn_str[bx], 0 ;;输入文件路径,串尾回车用00代换cmp byte ptr [fn_buf+1], 0jz exit ;;输入为空,直接退出lea dx, fn_strmov cx, 00hmov ah, 3chint 21h ;;创建文件jc error ;;失败,退出mov handle, axlea dx, msg3mov ah, 09hint 21h ;;保存文件代号,输出成功信息lea dx, msg5mov ah, 09hint 21h ;;输出提示信息lea dx, wf_bufmov ah, 0ahint 21h ;;从键盘输入串lea dx, wf_strmov bx, handlemov cl, byte ptr [wf_buf+1]mov ch, 0mov ah, 40hint 21h ;;将串写入到刚创建的文件jc wf_errormov bx, handlemov ah, 3ehint 21h ;;关闭文件jmp exiterror:lea dx, msg2mov ah, 09hint 21hjmp exit ;;创建失败wf_error:lea dx, msg4mov ah, 09hint 21h ;;写文件失败exit:mov ax, 4c00hint 21hcode endsend start·运行结果如下:在磁盘路径下搜索,可以看见如下内容:证明程序代码正确3)从键盘输入20 个字符存放到新建立的文件中。