《计算机输入输出系统》汇编实验指导书17页word文档
- 格式:doc
- 大小:71.00 KB
- 文档页数:17
目录第一部分汇编语言程序的上机过程 (1)一、建立汇编语言的工作环境 (1)二、在计算机上运行汇编语言的步骤 (1)三、建立ASM文件 (1)四、用MASM程序产生OBJ文件 (3)五、用LINK程序产生EXE文件 (3)六、程序的执行 (3)七、举例 (3)第二部分汇编语言上机调试 (4)一、为何需要调试? (4)二、如何进行调试? (5)第三部分汇编语言上机内容 (8)实验一输出字符串 (8)实验二算术指令综合编程 (8)实验三查找子字符串 (9)实验四字符串正向、反向输出 (9)实验五信息检索 (9)实验六格式化输出 (9)实验七数组合并 (10)实验八字符统计 (10)实验九数制转换 (10)第四部分汇编语言实验参考代码 (11)实验一输出字符串 (11)实验二算术指令综合编程 (11)实验三查找子字符串 (12)实验四字符串正向、反向输出 (13)实验五信息检索 (14)实验六格式化输出 (17)实验七数组合并 (18)实验八字符统计 (20)实验九数制转换 (22)第一部分汇编语言程序的上机过程一、建立汇编语言的工作环境为运行汇编语言程序至少要在磁盘上建立以下文件:1、编辑程序,如EDIT.EXE2、汇编程序,如MASM.EXE3、连接程序,如LINK.EXE4、调试程序,如必要时,还可建立如CREF.EXE,EXE2BIN.EXE等文件。
二、在计算机上运行汇编语言的步骤1、用编辑程序建立ASM源文件,以ASM作为扩展名2、用汇编程序把ASM文件转换成OBJ文件3、用连接程序把OBJ文件转换成可执行文件4、在DOS提示符下直接键入可执行文件名即可执行该程序三、建立ASM文件建立ASM文件的编辑程序可以是DOS自身带的编辑程序EDIT.EXE,在DOS提示符下键入EDIT命令即可出现EDIT界面,其操作如下:D:\>edit源程序输入完后,以ASM作为扩展名进行保存,假设所保存的文件名为:ex.asm。
实验一:汇编上机指导及例示一、实验目的●了解汇编语言程序的运行环境和所需的系统程序;二、实验要求●掌握如何编辑、汇编、连接和运行汇编程序;●掌握常用的DEBUG命令。
三、实验原理题:在屏幕上显示一条'THIS IS A SAMPLE PROGRAM OF KEYBOARD AND DISPLAY'提示信息,如从键盘上输入ESC键,则结束程序,如输入的不是大写字母,则在显示器上显示出来,如输入的是大写字母,则转换为小写字母输出。
四、实验设备计算机五、实验步骤1、用用文字编辑工具(常用EDIT或记事本)将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3、用TYPE命令显示产生的.LST文件。
4、用LINK将.OBJ文件连接成可执行的.EXE文件。
5、在DOS状态下运行LINK产生的.EXE文件。
用于调试程序时的输入格式:DEBUG FILENAME.??? 回车其中FILENAME是主文件名,???是扩展文件名,例如我们在此前已编译好了一个文件,它的名字为:djx.exe 要对它进行调试时就在DOS提示符下打:DEBUG djx.exe 回车,便可见到 '-' 提示符,如无任何提示说明正确,可进行调试按ESC键可返回DOS。
若未出现预期结果,用DEBUG检查程序。
附: 基本debug操作1、显示内存单元的内容:-d [地址] 或 [范围]2、修改内存单元的内容:-e 地址内容表或-e 地址3、显示CPU内部寄存器和标志位状态:-r4、显示和修改某个寄存器的内容:-r 寄存器名5、汇编命令:-a 地址6、逐条指令追踪:-t [=地址] (无地址则执行IP所指示的指令)7、退出debug:-g8、多条指令追踪:-t [=地址] [n]注:该指令从指定地址起执行n条命令后停下来9、运行命令:-g [=地址1] [地址2 [地址3...]]地址1规定了运行起始地址,后面的地址均为若干断点地址10、反汇编命令:(1)-u [地址]该命令从指定地址开始,反汇编32个字节,若省略地址,则从上一个u命令的最后一条指令的下一单元开始显示32个字节(2)-u 范围该命令对指定范围的内存单元进行反汇编如:-u 04ba:0100 0108等价于:-u 04ba:0100 L9下面给出一些常见出错信息,以便查对:1、Register already defined 汇编内部出现逻辑错误2、Unknown symbol type 在符号语句的类型中,有些不能识别的东西3、Symbol is multi-defined 重复定义一个符号4、Symbol not defined 符号没有定义5、Syntax error 语句的语法与任何可识别的语法不匹配6、Symbol is reserved word 企图非法使用一个汇编程序的保留字(例:定义add为一变量)7、Not proper align/combine type SEGMENT参数不正确8、One operand must be const 这是加法指令的非法使用9、Operands must be same or 1 abs 这是减法指令的非法使用10、Already have base register 试图重复基地址11、Illegal size for item 引用的项的长度是非法的,(如:双字移位)12、Illegal register value 指定的寄存器值不能放入“reg”字段13、Must be AX or AL 某些指令只能用AX或AL14、Improper use of segment reg 段寄存器使用不合法(如:mov ds,0)15、Division by 0 or overflow 给出一个用0作除数的表达式16、Value is out of range 数值大于需要使用的17、CS register illeal usage 试图非法使用CS寄存器18、DUP is too large for linker DUP嵌套太长,以至于从连接程序不能得到所要的记录。
实验一汇编语言程序的上机过程一、实验目的掌握汇编语言源程序的编辑、汇编、连接及运行过程,为以后的实验打下基础。
二、实验内容1、输入下列完整的程序STACK SEGMENT STACKDB 200 DUP(?)STACK ENDSDATA SEGMENTBUF DB‘HOW ARE YOU!$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXLEA DX,BUFMOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START(本程序的正确运行结果是在屏幕显示“HOW ARE YOU!”)2、完成课本P193习题5.1。
三、实验步骤(1)利用EDIT编辑源程序;(2)汇编源程序;(3)连接目标程序文件;(4)运行可执行文件。
四、实验报告要求写出以上两个实验内容的题目、源码、具体实验步骤和实验结果。
1.在屏幕上打印字符串”How are you?”。
(1)源代码:;打印字符串"How are you?"STACK SEGMENT STACKDB 200 DUP(?)STACK ENDSDATA SEGMENTBUF DB 'How are you?$'DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART: MOV AX, DATAMOV DS, AXMOV AX, STACKMOV SS, AX;在屏幕上打印字符串LEA DX, BUFMOV AH, 9HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND START(2)具体实验步骤:编辑→保存→masm→link→运行(3)结果截图:2.编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
《计算机操作系统》实验指导书(适合于计算机科学与技术专业)湖南工业大学计算机与通信学院二O一四年十月前言计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
计算机操作系统的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下调用一些常用的函数编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。
要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux用户界面;掌握操作系统中进程的概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想。
同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。
为了收到良好的实验效果,编写了这本实验指导书。
在指导书中,每一个实验均按照该课程实验大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式完成实验任务,最终引导学生有目的、有方向地完成实验任务,得出实验结果。
任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有准备地上机。
进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。
实验完毕后,学生应根据实验数据及结果,完成实验报告,由学习委员统一收齐后交指导教师审阅评定。
实验成绩考核:实验成绩占计算机操作系统课程总评成绩的20%。
指导教师每次实验对学生进行出勤考核,对实验效果作记录,并及时批改实验报告,综合评定每一次的实验成绩,在学期终了以平均成绩作为该生的实验成绩。
一、实验目的1. 熟悉计算机输入输出设备的基本概念和作用。
2. 掌握常用输入输出设备的使用方法。
3. 了解输入输出设备的性能指标及其对计算机系统的影响。
二、实验环境1. 实验室:计算机实验室2. 硬件设备:计算机、键盘、鼠标、显示器、打印机、U盘等3. 软件:Windows操作系统三、实验内容1. 输入设备实验(1)键盘输入实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 连接键盘,确保键盘正常工作;③ 打开记事本,输入一段文字;2)实验结果:成功输入文字,观察键盘布局,了解各个键位的含义;3)实验总结:熟练掌握键盘布局,提高输入速度。
(2)鼠标输入实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 连接鼠标,确保鼠标正常工作;③ 使用鼠标在桌面进行拖动、点击等操作;2)实验结果:成功进行鼠标操作,熟悉鼠标的使用方法;3)实验总结:熟练掌握鼠标操作,提高操作效率。
2. 输出设备实验(1)显示器输出实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 观察显示器显示的桌面背景、图标等信息;2)实验结果:显示器正常工作,显示计算机信息;3)实验总结:了解显示器的作用,熟悉显示器的性能指标。
(2)打印机输出实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 将打印机连接到计算机;③ 打开文档,进行打印设置;④ 点击打印按钮,将文档打印到纸上;2)实验结果:成功将文档打印到纸上;3)实验总结:了解打印机的工作原理,熟悉打印机的性能指标。
3. 存储设备实验(1)U盘存储实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 将U盘插入USB接口;③ 在文件资源管理器中找到U盘,进行文件读写操作;2)实验结果:成功将文件存入U盘,从U盘中读取文件;3)实验总结:了解U盘的工作原理,熟悉U盘的容量、读写速度等性能指标。
四、实验结果与分析1. 输入设备实验通过键盘输入实验,掌握了键盘布局和输入方法,提高了输入速度。
实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为ABC。
DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV CX,CNDEC CXMOV AL,[BX]INC BXLP: CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕的显示状态如图1所示。
图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。
实验目的与要求一、实验目的学习程序设计的基本发方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
为后续课程打下坚实的基础。
二、实验要求1、上机前要作好充分准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。
2、上机时要遵守实验室的规章制度、爱护实验设备。
要熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在程序的调试过程中,有意识地学习及掌握debug程序的各种操作命令、以便掌握程序的调试方法和技巧。
3、每个实验完成后,应写出实验报告。
实验报告的要求如下:①实验目的②实验内容③算法分析及详细的寄存器和变量分配④流程图⑤程序代码⑥实验结果⑦分析总结(心得体会)实验一、汇编语言上机操作过程一、实验目的1、熟悉汇编语言程序的调试环境2、掌握部分DEBUG命令二、实验内容编写一个汇编语言程序,计算1+2+3+…+99+100,并将结果存入SUM字单元。
通过调试程序熟悉汇编语言的上机操作过程及部分命令。
三、上机操作过程1、建立ASM文件(编辑源程序)使用编辑程序EDIT在磁盘上建立源程序EX.ASM例如:D:\MASM>EDIT EX.ASM2、用MASM程序产生OBJ文件源文件建立后,就要用汇编程序对源文件汇编,汇编后产生二进制的目标文件(OBJ 文件)例如:D:\MASM>MASM EX3 、用LINK程序产生EXE文件汇编程序已产生出二进制的目标文件(OBJ),但OBJ文件并不是可执行文件,还必须使用连接程序(LINK)把目标文件转换为可执行的EXE文件例如:D:\MASM>LINK EX4、调试运行在建立了EXE文件后,就可以直接从DOS执行程序。
如果用户程序有错误或者没有直接将结果在终端上显示出来,程序执行完之后无法看见正确的结果。
那么怎么知道程序执行的结果是正确的呢?此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,得到正确的结果。
实验六输入输出程序设计学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1) 掌握输入输出程序的编写方法。
2) 熟悉系统功能调用的方法。
3) 熟悉动画程序的编写方法。
二、实验内容1)在CRT上每隔一秒连续显示字符0-9。
编程提示2)用系统功能调用将‘HELLO’由键盘输入,再从屏幕输出‘***HELLO***’。
三.实验设计及步骤为了使输出的字符之间有空格,在每一个循环中输出一个0-9的字符和一个空格。
为了输出0-9,置寄存器BL初值为0,每循环一次使其增量。
为了保证输出是十进制,增量后用DAA调整指令。
由于输出为一位十进制数,用AND 0FH指令屏蔽高4位。
1)在CRT上每隔一秒连续显示字符0-9。
2)用系统功能调用将‘HELLO’由键盘输入,再从屏幕输出‘***HELLO***’。
3)编制在屏幕上画线的子程序,调用该子程序画一矩形。
4)编制字母下落一行的子程序,调用该子程序使字母从屏幕顶部下落到底部。
5)创建一磁盘文件,保存从键盘输入的字符串。
6)编写程序用设置系统时间,首先从键盘以十进制数形式输入时间,然后修改系统时间,并重新以十进制形式显示时间。
7)编写程序将屏幕分割成格状,每一格涂上不同颜色,格数从键盘输入。
8)编写程序在屏幕上显示菜单,输入相应菜单的序号后,选种该菜单项。
四.实验结果执行程序EXAM5-1·EXE,屏幕上依次循环显示一个数字一个空格:0 1 2 3 4 5 6 7 8 9 ……执行程序EXAM5-2·EXE,输入HELLO↙屏幕上显示结果:*** HELLO ***五.实验心得:通过这次的实验又进一步加深了对汇编的理解以及它的整个运行过程,能熟练掌握它的运行过程,也能够看懂一些基本的顺序设计的汇编程序,能设计出简单的顺序汇编。
刚上机时只想按照老师给出的提纲,把缺省的部分照上面给出的提示简单修改后拷贝,可是当程序出错时便不知道哪里的问题也不会修改,最后静下心仔细看程序后理解了,很快就做出来了。
实验指导一.上机实验的一般步骤和要求:1.上机前对选定的实验题应有所了解,并写好程序。
2.上机过程中对重要方法和步骤、问题和结果应有记录。
3.所有程序原则上都要通过调试手段运行。
4.实验后进行分析和总结,给出实验报告。
二.实验报告的内容一般有:1.实验题的内容及要求。
2.思路和方法、算法描述及有注释和说明的程序清单。
3.程序调试和运行的重要步骤、问题和结果。
4.分析和总结。
三.实验环境的建立参看第二章第一节。
通常在WINDOWS XP系统下。
如果其他操作系统(如WIN 7),不支持汇编程序工作,可安装Masm for Windows集成实验环境asm20125(支持Win2000、WinXP、WinVISTA、WIN7等操作系统)。
/实验1 上机过程及程序调试实验目的:1.通过第二章两个简单实例认识汇编语言程序,初步了解程序格式;段定义;标号;DOS系统功能;操作数;指令;说明语句等作用。
2.掌握汇编语言程序从设计到形成可执行程序文件的方法和步骤。
即编辑、汇编、连接。
了解汇编语言的系统工作文件和工作环境。
理解汇编程序和连接程序的作用。
理解列表文件内容。
3.初步了解程序的运行和调试方法。
学会使用DEBUG主要命令和常用的DOS命令。
实验内容:【1】编辑第二章两个简单实例,通过汇编、连接。
【2】用DEBUG对hello程序进行调试。
问题:(1) 该程序在内存中的起始地址是多少?结束地址是多少?共占几个字节?(2) 0B63:0008表示什么意思?(3) 程序中定义的串‘HELLO, WORLD !$’在内存中的起始地址是多少?请用DEBUG命令显示该串。
(4) 如果用带有断点的G命令运行该程序,写出命令。
(5) 用P命令单步执行程序。
(6) 用T命令跟踪程序,在跟踪执行INT 21时出现什么问题?(7) 用A命令在偏移地址100H处建立该段程序,并运行。
(8) 用W命令把该段程序写成文件,再调入。
实验2 算术及位串处理程序实验目的:掌握多数位的算术运算、移位操作、字符串操作等程序的设计,学习使用分支与循环等基本编程方法,熟练使用DEBUG。
汇编语言程序设计实验指导手册班级:_______________学号:_______________姓名:杨天啸电子与信息工程学院计算机科学系写在最前面的话这个文档在网上到处都是,这也体现了我们工大人大公无私的精神~\(≧▽≦)/~ 但是!答案是没有滴~~~因此老杨我作为一个伪学霸,特地整理了一下我自己编的程序,有些加以极其详细备注,这要特地感谢我的→_→战友←_← 啊,没有她的鸡蛋里挑骨头的询问,我也不会打得如此详细,我发表这个文档的目的不是让大家大肆抄袭,而是仅仅为大家提供一个汇编上的编程思路,当然我的程序肯定有不足之处啦,毕竟是伪学霸╮(╯▽╰)╭,所以大家一定要小心哦,不要踩雷,祝大家学习进步,心想事成,成为学霸,走上人生巅峰,抱得美人归*^_^*第一部分上机实验的目的和要求一、课程性质、目的与任务“汇编语言程序设计实验”课程是计算机科学与技术及其他相关专业学生的一门核心必修课程。
通过本课程的学习与实验,可以加深学生对汇编语言的理解,进一步掌握CPU、存储器及外设的性能和他们的基本使用方法,提高学生运用所学知识,独立分析问题与解决问题的能力。
二、教学基本要求本课为设计性实验课,学生试验前应按实验内容要求编制程序,学生在实验期间输入和调试程序,观察程序运行结果,课后写出试验报告。
指导教师在实验前概述实验程序算法,在实验期间做针对性的指导、检查实验结果,实验后批改实验报告。
三、上机实验前的准备工作在上机实验前应事先做好准备工作,以提高上机实验的效率,准备工作至少应包括:(1)了解所用的计算机系统的性能和使用方法;(2)复习和掌握与本实验有关的教学内容;(3)准备好上机所需的程序。
由于计算机实验室给每个学生安排的时间是有限的,要珍惜时间,充分利用。
应当在上机前按指定的题目编写好程序。
手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率。
初学者切忌不编程序或抄别人程序去上机,应从一开始就养成严谨的科学作风;(4)对运行中可能出现的问题事先作出估计,对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意;(5)准备好调试和运行时所需的数据。
一、实验目的和内容1. 掌握输入输出指令的使用;2. 上网查3相步进电机的工作原理;3. 用emu8086工具运行步进电机程序;4. 对步进电机程序进行改进,精确控制其转速。
二、实验原理及基本技术路线图(方框原理图)步进电机的工作原理:三、所用仪器、材料(设备名称、型号、规格等)1. 操作系统平台:Windows 72. 汇编环境:emu8086四、实验方法、步骤1. 打开emu8086汇编开发环境;2. 打开emu8086例子程序中的步进电机的源程序:D:\emu8086\examples\stepper_motor.asm3. 运行该程序,观察运行情况,并结合步进电机的工作原理,阅读并理解程序的执行逻辑,读懂程序中的注释;4. 尝试修改该程序,以精确控制步进电机的转速;5. 运行修改后的程序,观察运行结果,并分析;6. 记录实验过程,并完成实验报告。
五、实验过程原始记录(数据、图表、计算等)1. 打开步进电机的控制程序:2. 运行调试该程序,观察结果:3. 阅读该程序,并添加注释(下面为了保存原版程序,打开程序的一个副本进行修改):添加注释后的源代码如下:; 这是一个输出控制的例子; 它向虚拟的I/O端口输出值; 以控制步进电机; d:\emu8086\devices\stepper_motor.exe 在7号端口#start=stepper_motor.exe#name "stepper"#make_bin#steps_before_direction_change = 20h ; 十进制的32jmp start; ========= 数据 ===============; 二进制的数据用以控制步进电机; 顺时针以半步循环方式(半个步距角)转动:datcw db 0000_0110b ;BC-->C-->AB-->B-->BCdb 0000_0100bdb 0000_0011bdb 0000_0010b; 二进制的数据用以控制步进电机; 逆时针以半步循环方式(半个步距角)转动:datccw db 0000_0011b ;AB-->A-->BC-->B-->ABdb 0000_0001bdb 0000_0110bdb 0000_0010b; 二进制的数据用以控制步进电机; 顺时针以整步循环方式(一个步距角)转动:datcw_fs db 0000_0001b ;A-->AB-->BC-->0-->Adb 0000_0011bdb 0000_0110bdb 0000_0000b; 二进制的数据用以控制步进电机; 逆时针以整步循环方式(一个步距角)转动:datccw_fs db 0000_0100b ;C-->BC-->AB-->0-->C db 0000_0110bdb 0000_0011bdb 0000_0000bstart:mov bx, offset datcw ; 开始以顺时针半步循环方式执行mov si, 0mov cx, 0 ; 初始化计数器next_step:; 获取步进电机控制信号最高位, 若为1, 则表示就绪wait: in al, 7test al, 10000000bjz waitmov al, [bx][si]out 7, alinc sicmp si, 4jb next_stepmov si, 0inc cxcmp cx, steps_before_direction_changejb next_stepmov cx, 0add bx, 4 ; 下一组控制数据cmp bx, offset datccw_fsjbe next_stepmov bx, offset datcw ; 返回顺时针半步循环方式执行jmp next_step4. 尝试修改该程序,以精确控制步进电机的转速:修改说明:在原程序的OUT 7, AL一句后面加入如上图所示的代码,试图通过调用DOS系统中的INT 15H的86H号功能,即延时功能来控制步进电机每一步转动的时间,这里为了观察方便,设置每一秒转动一步(半步或整步)。
《计算机输入输出系统》实验指导书第一部分80X86汇编语言实验杨全胜编东南大学计算机科学与工程学院、软件学院第一章 x86 16位汇编语言程序调试工具—DebugDEBUG是为汇编语言设计的一种调试工具,它通过单步和设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
在DOS的提示符下,可键入命令:C>DEBUG [d:][path][filename[.ext]][parml][parm2]其中,文件名是被调试文件的名字。
如用户键入文件名,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。
如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。
命令中的d指定驱动器,Path为路径,parml和parm2则为运行被调试文件时所需要的命令参数。
在DEBUG程序调入后,将出现提示符“-”,此时就可用DEBUG命令来调试程序。
下面介绍DEBUG的主要命令。
1. 显示存储单元的命令D(DUMP)格式为:-D[address]或-D[range]例如,按指定范围显示存储单元内容的方法为:-d100 11F1636:0100 00 8B 36 EB D8 8B 0E E9-D8 8B D6 E3 42 51 565B ..6.........BQV[1636:0110 2B DE 59 03 CB 8B D6 C6-06 CD DC 00 34 00 25 16 +.Y.........4.%.其中,0100H至011FH是DEBUG显示的单元内容。
左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,.表示不可显示的字符。
这里没有指定段地址,D命令自动显示DS段的内容。
如果只指定首地址,则显示从首地址开始的128个字节的内容。
如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。
以上命令也可写为-D100L20,其中L表示长度。
注意:在DEBUG中,与汇编语言不同,所有数默认为16进制数。
2. 修改存储单元内容的命令E(Enter)输入命令E有两种格式。
第一种格式可以用给定的内容表来替代指定范围的存储单元内容。
命令格式为:-E address [list]例如,-EDS∶100 F3'XYZ'8D其中F3,'X','Y','Z'和8D各占一个字节,该命令可以用这五个字节来替代存储单元DS∶0100H到0104H的原先的内容。
第二种格式则是采用逐个单元相继修改的方法。
命令格式为:-E address例如,-ECS∶100则可能显示为:14A0∶0100 00.如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键可接着显示下一个单元的内容,如下:14A0∶0100 00.78 8B.这样,用户可以不断修改相继单元的内容,直到用Enter键结束该命令为止。
3. 检查和修改寄存器内容的命令R(Register)它有三种格式。
第一,显示CPU内所有寄存器内容和标志位状态,其格式为:-R。
例如:-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=14A0 ES=14A0 SS=14A0 CS=14A0 IP=0100 NV UP EI PL NZ NA PO NC14A0∶0100 F3 REPZ14A0∶0101 7879 JS 017C第二,显示和修改某个寄存器内容,其格式为:-R register。
例如,键入-rAX,系统将响应如下:AX 0000即AX寄存器的当前内容为0000H,如不修改则按Enter键,否则,可键入欲修改的内容,如:-rbxBX 0000:369则把BX寄存器的内容修改为0369H。
第三,显示和修改标志位状态,命令格式为:-RF。
系统将响应如:NV UP EI PL NZ NA PO NC -此时,如不修改其内容可按Enter键,否则,可键入欲修改的内容。
如:NV UP EI NG NZ NA PO NC -ngovdnpo即可,可见键入的顺序可以是任意的。
但必须按照标志位的置复位表示方法书写。
4. 运行命令G(Go)其格式为:-G[=address1][address2][address3...]]其中,地址l指定了运行的起始地址,如不指定则从当前的CS∶IP开始运行。
后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容和下一条将要执行的指令。
5. 跟踪命令T(Trace)有两种格式。
第一,逐条指令跟踪,其格式为:-T[=address]从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。
如未指定地址,则从当前的CS∶IP开始执行。
第二,多条指令跟踪,其格式为:-T[=address][value]从指定地址起执行n条指令后停下来,n由value指定。
6. 汇编命令A(Assemble)其格式为:-A [address]该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。
7. 反汇编命令U(Unassemble)①从指定地址开始,反汇编32个字节,其格式为:-u[address]例如:-U100如果地址被省略,则从上一个u命令的最后一条指令的下一个单元开始显示32个字节。
②对指定范围内的存储单元进行反汇编,格式为:-u[range]例如:-U100 10C或U100LD8. 命名命令N(Name)其格式为:-N filespecs [filespecs]命令把两个文件标识符格式化在CS∶5CH和CS∶6CH的两个文件控制块中,以便在其后用L或W命令把文件装入或存盘。
filespecs的格式可以是:[d:][path]filename[.ext]例如,-N myprogL-L可把文件myprogL装入存储器。
9. 装入命令L(Load)①把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。
其格式为:-L[address][drive sector number]②装入指定文件,其格式为:-L[address]此命令装入已在CS∶5CH中格式化了的文件控制块所指定的文件。
如未指定地址,则装入CS∶0000H 开始的存储区中。
10. 写命令W(write)①把数据写入磁盘的指定扇区。
其格式为:-W address drive sector number②把数据写入指定的文件中。
其格式为:-W[address]此命令把指定的存储区中的数据写入由CS∶5CH处的文件控制块所指定的文件中。
如未指定地址则数据从CS∶0100H开始。
要写入文件的字节数应先放入BX 和CX中。
CX中为低16位,若数据长度大于64K,则使用BX记录高16位。
11. 帮助命令格式为-?显示DEBUG所有命令简明列表。
12. 退出DEBUG命令Q(Quit)其格式为:-Q它退出DEBUG,返回DOS。
本命令并无存盘功能,如需存盘应先使用W命令。
第二章汇编实验实验一汇编语言程序上机过程一)实验目的学会安装“16位汇编程序开发软件”的安装,完成将汇编语言源程序录入进计算机、利用ml.exe进行汇编,LINK进行链接,并用DEBUG调试16位程序的全部过程。
本实验大家不必了解程序细节,只是为了熟悉开发环境和上机过程。
二)实验内容1. 按照安装说明中所述,安装好16位汇编开发环境。
配置好相关的BAT 文件。
(本文假设大家是按照安装手册建议的路径安装的)2. 熟悉16位汇编程序的上机过程。
参照《汇编语言上机过程(自学)》PPT中“16位汇编语言上机过程”的内容,输入,汇编和调试下面的程序(命名为sample.asm, 程序功能是将BUFF 中的值(3C6DH)以十六进制的形式打印到屏幕上).8086.MODEL SMALL.STACK.DATABUFF WORD 3C6DHSTRING BYTE 'PRINT HEX.',0AH,0DH,'$'.CODESTART: MOV AX,@DATAMOV DS,AXMOV DX, OFFSET STRING MOV AH, 09HINT 21HLEA SI,BUFFMOV BX,[SI] MOV CH,4A1: MOV CL,4ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL A2 ADD AL,7H A2: MOV DL,AL MOV AH,2 INT 21HDEC CHJNZ A1MOV AH,4CH INT 21H END START注:执行文件后,用DEBUG SAMPLE16.EXE命令将该程序调入到DEBUG环境中调试。
1)用U命令察看源代码2)用D命令察看数据段的数据3)用R命令察看寄存器状态4)用T命令单步跟踪程序执行5)用G命令设置断点,调试软件中断指令(int 21h)(不要用T)3. 写16位汇编程序,从键盘输入一个字符串,然后换行后将该字符串输出到屏幕。
实验二顺序程序设计一)实验要求通过这一部分的实验,进一步熟悉汇编过程和DEBUG调试过程;掌握用汇编语言编写顺序程序。
二)实验内容1. x,y,z,v均为16位带符号数,用16位汇编计算(v-(x*y+z-540))/x,用Debug调试并看结果, AX中是否为-2(FFFEH),DX中是余数-5(FFFBH)。
.8086.MODEL SMALL.DATAX WORD 30Y WORD 20Z WORD 40V WORD 35.CODESTART: MOV AX,@DATAMOV DS,AXMOV AX, XIMUL Y ; x*yMOV CX, AXMOV BX, DXMOV AX, ZCWDADD CX, AXADC BX, DX ; x*y+zSUB CX, 540SBB BX, 0 ;x*y+z-540MOV AX, VCWDSUB AX, CXSBB DX, BX ; v-(x*y+z-540)IDIV X ; (v-(x*y+z-540))/x.STACKEND START2. 写完整程序16位程序,在内存中从Table开始的10个单元中连续存放0到9的平方值,任给一个0到9的数X,该数存放在内存单元XX中,用XLAT 指令查表求X的平方值,并将结果存于内存YY单元中。
编写程序,并在DEBUG 中进行调试和验证结果。
3 . 假设CX:BX中放了4位非压缩的BCD码表示的十进制数4386,请编写完整程序将这个数转成2进制数放到DI寄存器中,并用DEBUG调试和验证之。