实验四 DOS功能调用

合集下载

华南理工大学微机与接口实验报告(四实验,题目原理流程图代码截图完整版)

华南理工大学微机与接口实验报告(四实验,题目原理流程图代码截图完整版)

微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。

命令运行调试。

二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。

是对目标文件进行调试,验证它的正确性。

2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。

《微机原理与接口》实验报告模板

《微机原理与接口》实验报告模板

《微机原理与接口》实验报告学院:信息学院专业:班级学号:学生姓名:实验日期:指导老师:五邑大学信息学院接口与通信实验室实验一一、实验名称:微机原理实验平台操作及汇编程序设计二、实验目的:1、了解MFID实验平台组成结构及使用方法;2、熟悉MFID实验平台的工作原理和MF2K编程环境;3、熟悉80X86的汇编语言程序设计方法;4、掌握BCD码转换为二进制的的原理及汇编程序设计;5、理解INT 21H DOS 字串显示功能的调用。

三、实验内容:1、MFID实验平台MF2K编程环境的熟悉2、屏幕输出字串的简单汇编程序设计3、进行汇编语言程序的编辑、汇编、连接和运行实验;4、编制16进制转换为ASCII码的子程序HEX_ASCII;5、编制BCD转换为二进制的子程序BCD_B;6、调用BCD_B和HEX_ASCII子程序完成十进制数转换为二进制数四、实验设备:MFID 微型计算机与接口技术实验平台五、实验步骤:1、进入MF2K汇编语言开发环境,开始汇编程序设计;2、设计主程序框架:堆栈段、数据段和代码段;3、设计“字符串显示程序”,调试并在屏幕自己的“班级”、“学号”及“名字”的拼音字母;4、设计“十六进制转换为ASCII码子程序”HEX_ASCII,调试并通过5、设计“BCD码转换为二进制子程序”BCD_B;6、在主程序中将自己的“班级号+学号”定义成4位BCD码然后调用BCD_B子程序转换为二进制;7、调用HEX_ASCII在屏幕上显示学号转换的运行结果。

六、实验结果1、调试通过的汇编实验程序源代码如下:[将源代码粘帖到下面]2、班号学号屏幕输出结果:3、四位BCD班号+学号:5123 转换结果:七、分析讨论(不少于200字)八、本次实验成绩。

从键盘输入数据并显示实验报告

从键盘输入数据并显示实验报告

从键盘输入数据并显示实验报告一、实验目的与内容1、实验目的掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理,并在程序中设置错误出口。

2、实验内容编写程序,将键盘接收到的四位十六进制数按“Enter”回车键转化为二进制数,再显示在屏幕上, 按“空格键”结束!。

若输入的不是0-F间的数字,则显示出错信息,并要求重新输入。

二、实验设备(环境)1、实验设备(含芯片名称、功能简介)微型计算机一台2、实验环境TPC-ZK-II集成环境3、使用语言汇编语言三、实验原理(实验所用到的知识点及相关内容)1.在TPC-ZK-II集成环境下输入汇编程序,编译、连接,生成.exe文件。

2.按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。

3.输入不同的数据,可得到不同的结果。

4、参考流程图四、实验步骤(包括步骤、代码、实验截图及其必要说明)编写程序,将键盘接收到的 4 位 16 进制数转换为等值的二进制数,再显示在荧光屏上。

分析:整个程序分为 3 个部分:键盘输入、转换、显示,可以分别用子程序来完成。

1. 输入。

输入可以利用字符串输入。

这时需要在主程序中先开辟一段输入缓冲区。

字符串输入 ( 0AH 功能 ),入口参数 DS : DX = 缓冲区的首地址,( DS :DX ) = 限制最多输入的字符数,功能号 AH = 0AH,类型号 21H。

出口参数 ( DS : DX+1 ) =实际键入的字符 ( 不含回车符 ),从( DS : DX+2 ) 开始顺序存放键入的字符串,回车符 0DH为串尾最后一字符。

实现功能:等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动,回车符使光标回到行首。

注意事项:应按要求先定义缓冲区,再调用。

数据缓冲区的设置如下:DATA SEGMENT ; 定义缓冲区MARK DB ?MESS DB 'input:$' ;输入字符串提示ERROR DB 0DH,0AH,'input error!',0DH,0AH,'$' ;输入错误提示DATA ENDS从键盘输入‘ ABCD ’, 回车,内存的存放结果 :子程序如下:INPUT PROCLEA DX, striMOV AH, 09H ; 调显示功能INT 21HLEA DX , maxMOV AH , 0AHINT 21H ; 调 0A输入功能RETINPUT ENDP2. 转换。

实验4 排序和检索程序设计

实验4   排序和检索程序设计

实验4 排序和检索程序设计编写程序1:将内存中10个无符号数(长度为2字节)由小到大排序。

编写程序2:在上述已排好序的数据区里查找某一个数。

若找到,显示其在数据区中的位置,否则显示‘N’字符。

编写主程序,通过调用程序1和程序2,实现排序和检索。

【编程参考】1.子程序1流程图(选择排序法,见图)说明:N:数据个数A:有序数组首地址CX:内外循环计数DX:暂存外循环计数BX、BX+SI+2:数组元素相对偏移下标2.子程序2流程图(折半查找法,见图3-2)说明:A:有序数组首地址KEY:查找关键字DH:查找区间上限DL:查找区间下限CH:查找区间中间值DI:存放查找关键字SI:数组元素相对偏移图实验4程序1流程图实验5 系统调用程序设计编程1:将内存中的一串字符输出,再从键盘上输入一串字符,再输出。

编写出源程序。

编程2:在屏幕中间部位开出一个窗口,随后接收用户按键,并把按键字符显示在窗口的最底行;当窗口底行显示满时,窗口内容就自动向上滚动一行;用户按Ctrl+C键时,结束运行。

程序5_1:字符串输入输出程序清单; 程序名:ZHSY4_2_1DATA SEGMENTA DB ‘How do you do?’,0AH,0DHDB ‘$’B DB 20,?,20 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX, DATAMOV DS, AXMOV AH, 09HLEA DX, AINT 21HLEA DX, BMOV AH, 0AHINT 21HMOV DL, 0AH ; 输出换行MOV AH, 02HINT 21HMOV AL, B+1 ; 键盘输入的字符个数送ALMOV AH, 0MOV SI, AX ; 字符个数值存SIMOV DX, OFFSET B+2MOV BX, DXMOV BYTE PTR [BX+SI], ‘$’; 末尾添‘$’以便输出MOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND START程序5_2:窗口字符显示程序清单; 程序名:ZHSY4_2_2; 常量定义WINWIDTH = 40 ; 窗口宽度WINTOP = 8 ; 窗口左上角行号WINLEFT = 20 ; 窗口左上角列号WINBOTTOM = 17 ; 窗口右下角行号WINRIGHT = WINLEFT+WINWIDTH-1 ; 窗口右下角列号COLOR = 74H ; 属性值PAGEN = 0 ; 显示页号CTRL_C = 03H ; 结束符ASCII码CODE SEGMENTASSUME CS:CODESTART: MOV AL, PAGEN ; 选择显示页MOV AH, 5INT 10HMOV CH, WINTOP ; 清规定窗口MOV CL, WINLEFTMOV DH, WINBOTTOMMOV DL, WINRIGHTMOV BH, COLORMOV AL, 0MOV AH, 6INT 10HMOV BH, PAGEN ; 定位光标到窗口左下角MOV DH, WINBOTTOMMOV DL, WINLEFTMOV BH, COLORMOV AH, 2INT 10HNEXT: MOV AH, 0 ; 接受一个键INT 16HCMP AL, CTRL_C ; 是否结束键JE EXITMOV BH, PAGEN ; 在当前光标位置显示所按键MOV CX, 1MOV AH, 0AHINT 10HINC DL ; 光标列数加1,准备向右移动光标CMP DL, WINRIGHT+1 ; 是否越出窗口右边界JNE SETCURMOV CH, WINTOP ; 窗口内容上移一行MOV CL, WINLEFT ; 空出窗口的最底行MOV DH, WINBOTTOMMOV DL, WINRIGHTMOV BH, COLORMOV AL, 1MOV AH, 6INT 10HMOV DL, WINLEFT ; 光标要回到最左面SETCUR: MOV BH, PAGEN ; 置光标MOV AH, 02HINT 10HJMP NEXTEXIT: MOV AH, 4CHINT 21HCODE ENDSEND START实验6 模块化程序设计主模块A编程:设计一个能实现加、减、乘、除计算的程序,要求该程序接受从键盘输入的两个十六进制数,调用相应的程序模块执行相应的计算后,计算结果以十六进制数输出。

微机原理Emu8086仿真软件实验讲义剖析

微机原理Emu8086仿真软件实验讲义剖析

实验一显示程序实验1.emu8086介绍Emu8086-Assembler and Microprocessor Emulator是一个可在Windows 环境下运行的8086CPU汇编仿真软件,Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,它优于一般编译器的地方在于提供了一个虚拟的80x86环境,拥有自己一套独立的“硬件”,可以完成一些纯软件编译器无法完成的功能例如Led显示,交通灯,步进电机等等,而且动态调试(DEBUG)时非常方便一.软件启动启动界面如图1所示,用户可以选择新建文本、程序实例、启动指南、近期文档。

注册的用户名随意,密码112,即可成功。

二.新建文件单击图1中的“New”选项,软件会弹出如图2所示的选择界面。

●COM模板——适用于简单且不需分段的程序,所有内容均放在代码段中,程序代码默认从ORG 0100H开始;●EXE模板——适用于需分段的复杂程序,内容按代码段、数据段、堆栈段划分。

需要注意的是采用该模板时,用户不可将代码段人为地设置为ORG 0100H,而应由编译器自动完成空间分配;●BIN模板——二进制文件,适用于所有用户定义结构类型;●BOOT模板——适用于在软盘中创建文件。

此外,若用户希望打开一个完全空的文档,则可选择empty workspace的选项。

三.编译和加载程序用户可根据上述选择的模板中编写程序,如图3所示。

该编辑界面集文档编辑、指令编译、程序加载、系统工具、在线帮助为一体,其菜单功能如表1所示。

编写完程序后,用户只需单击工具栏上的“compile”按钮,即可完成程序的编译工作,并弹出如图4所示的编译状态界面。

若有错误则会在窗口中提示,若无错误则还会弹出保存界面,让用户将编译好的文件保存相应的文件夹中。

默认文件夹为…\emu8086\MyBuild\,但您可以通过菜单中assembler/ set output directory对默认文件夹进行修改。

实验一 DEBUG的使用

实验一 DEBUG的使用
三.对以下源程序进行调试,记录下每一条指令的目标代码,相应寄存器变化情况和程序的最终执行结果。
源程序:MOV AL,30H
MOV BL,26H
ADD AL,BL
PUSH AX
POP DX
MOV AH,02H
INT常用指令练习
1、传送指令
1)用A命令在内存100H处键入下列内容:
0AF4:0108 int 21
0AF4:010Amov dl,43
0AF4:010Cint 21
0AF4:010E int 20
0AF4:0110
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AF4 ES=0AF4 SS=0AF4 CS=0AF4 IP=0100 NV UP EI PL NZ NA PO NC
:0206 CD20 INT 20H ;结束
步骤:a.用E命令将目标代码写入内存CS:0200H~0207H
—E DS:200 B2,33,B4,02,CD,21,CD,20
b.用G命令从200H开始执行。
—G=CS:200
屏幕显示:
3
Program terminated normally.

c.用U命令反汇编
(2)用键盘,将AX,BX,CX,DX及DS,ES清0。
2.简单程序的执行:
(1)用E命令输入一段程序并执行,其源程序,目标代码及地址分配如下:
CS:0200 B233 MOV DL,33H ;将十六进制数‘33’存入DL中
:0202 B402 MOV AH,02H ;DOS2号功能调用
:0204 CD21 INT 21H ;屏幕显示DL内容

实训3-2+将十六进制数据串转换成ASCII码

实验3-2 将十六进制数据串转换为ASCII码一、算法分析利用查表法将一个十六进制数1AB3转换为对应的4个字符,并将其在屏幕上显示出来要想在屏幕上显示一个十六进制数,关键是将各位十六进制数转换成对应的ASCII 码。

为此,我们在程序的数据段建立了一个字节表格ASC,其中保存了0~9,A~F的ASCII码。

在代码段,首先将表格的首地址存入BX,将要显示的十六进制数值送入DX,并在CX中设置循环次数4。

接下来通过循环移位操作,分别将各位十六进制数值(即相对于首地址偏移量)存入AL。

最后,根据AL和BX的内容,使用换码指令将其对应的ASCII码送入AL,并在屏幕上显示出来。

二、源程序DSEG SEGMENT ;数据段,给变量指定数据,分配存储空间ASC DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDB 41H,42H,43H,44H,45H,46HDSEG ENDSSSEG SEGMENT STACK ;堆栈段DB 100 DUP(?)SSEG ENDSCSEG SEGMENT ;代码段ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART : MOV AX,DSEG ;给数据段寄存器装初值MOV DS,AXLEA BX,ASC ;将ASC表格的首地址BXMOV DX,1AB3H ;讲一个十六进制放入DXMOV CX,4 ;将循环计数值存入CXLOP : PUSH CX ;执行入栈指令,保存CX中的数据MOV CL,4 ;指定循环左移的位数ROL DX,CL ;将十六进制数循环左移4位,将DX中的高4位移至低4位POP CX ;执行出栈指令,恢复CX原来的内容MOV AL,DL ;将十六进制数低8位存入ALAND AL,0FH ;清除AL中高4位XLAT ;执行换码指令,将对应数值的ASCII码送入ALMOV DL,AL ;DOS功能调用,将DL中保存的字符在屏幕上显示出来MOV AH,02HINT 21HLOOP LOP ;执行循环MOV AH,4CH ;系统功能调用,结束程序返回DOSINT 21HCSEG ENDSEND START三、操作步骤步骤1 确定源程序存放的目录,将MASM.EXE和LINK.EXE两个文件拷贝到此目录下,并以DOS方式启动MASM编辑器。

微机原理与单片机实验报告

微机原理与单片机实验报告Prepared on 22 November 2020北京联合大学信息学院实验报告课程名称:微型计算机原理学号:姓名:2012 年 6 月 9 日目录实验1 EMU8086模拟器的使用一实验要求利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的:熟悉EMU8086实验环境三 EMU8086环境:1 模拟器编辑窗口2 模拟器调试窗口四实验内容实验内容1:新建文件。

运行 emu80861. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码:MOV AX, 1020HMOV BX, 2030HMOV AX, BXADD AX, BXMOV [BX], AXMOV [2032H], AXHLT2. 编译:单击“编译”按钮,对程序段进行编译;3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。

4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。

5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。

6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。

7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为 400毫秒,单击“全速”按钮,运行程序,8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序的关联。

10.将“存储器”中地址改为1000:0100,并将从其开始的连续10个单元的内容改为55H。

实验内容2:运行范例在模拟器编辑窗口中1.点击典型范例2.选择:hellow,word程序,编译,运行,观察结果。

实验四 函数和运算符重载

实验四函数重载和运算符重载(2学时)一、实验目的1.掌握函数的定义和调用方法。

2.练习重载函数的使用,注意与缺省参数的区别。

3.练习函数模板的使用。

4.练习运算符重载。

5.练习使用系统函数。

6.学习使用VC++的debug调试功能,使用step into追踪到函数内部。

二、实验任务1.定义一个简单的菜单类,运行时显示主菜单,可通过选择进入子菜单(可模仿ATM柜员机的模式,菜单内容可自行设定,相关功能函数可不用实现):主菜单:取现的子菜单1.转账 1.5002.余额查询 2.10003.取现 3.1500Q(退出) 4.返回主菜单请选择(A/S/F/Q)?选择相应的选项后悔执行相应模块并回到主菜单,选择Q则退出。

2.编写重载函数Maxl可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。

3.使用重载函数模板重新实现上小题中的函数Maxl。

4.使用系统函数pow(X,y)计算X y的值,注意包含头文件math.h。

5.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。

6.写一个点point的类,并重载+实现两个点的坐标相加,和-实现求两点间的距离, >>、<<输入输出点的信息,(1)和(2)分别取点的x和y轴坐标。

三、实验步骤1.考虑抽取菜单的数据和相关操作。

2.分别编写四个同名函数maxl,实现函数重载,在main()函数中测试函数功能。

程序名:lab3_2.cpp。

3.使用函数模板实现求任意类型数的最大值,针对不同的参数个数,编写两个同名函数模板maxl,其参数个数不同,实现函数重载,在main()函数中测试函数功能。

程序名:lab3_3.cpp。

4.在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x,y)函数计算x的Y次幂的结果,再显示出来。

程序名.1ab3_4.cpp。

5.编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。

实验四 带传动实验

实验四带传动实验一、实验目的1.了解带传动实验台结构及工作原理。

2.观察带传动中的弹性滑动和打滑现象。

3.掌握改变初拉力对带传动能力的影响。

4.绘制带传动滑动曲线和效率曲线。

二、实验设备及原理图2-1 实验台结构简图1—从动直流电机2—从动带轮3—传动带4—主动带轮5—主动直流电机6—牵引绳7—滑轮8—砝码9—拉簧10—浮动支座11—固定支座12—底座13—拉力传感器实验台由机械装置、电子系统、操作控制等三部分组成。

(一) 机械装置1.主动部分包括50W直流电动机5(原动机)、其主轴上的主动带轮4及带的预紧力装置。

主动电机的机座设计成浮动结构(滚动滑槽),与牵引钢丝绳、定滑轮、砝码一起组成带传动初拉力形成机构,改变砝码大小,即可准确地确定带传动的初拉力F0 。

2.从动部分包括50W从动直流电机1(发电机)、和装在主轴上的从动带轮2 。

发电机的输出与负载部分相连,对于发电机,每按一下“加载”键,即在电枢回路上并上一个负载电阻,按数次使发电机负载逐步增加,电枢电流增大,随之电磁转矩也增大,即发电机负载逐步增加,实现了负载的改变。

相当于机械加载。

3.两台电机均为悬挂支承,当传递载荷时,作用于电机定子上的力矩T1(主动电机力矩)、T2(从动电机力矩)迫使拉钩作用于拉力传感器13,传感器输出的电信号正比于T l、T2,因而可以作为测定T1、T2的原始讯号。

两台电机的转速传感器分别安装在带轮背后的环形槽中,由此可获得必须的转速信号。

(二)电子系统图2-2 实验台电子系统框图(三)操作部分操作部分主要集中在机台正面的面板上,面板的布置如图2—3所示。

载 荷 指 示主动轮转速送 数保 持清 零加 载从动轮转速主动轮转矩转速Ⅰ转矩Ⅰ转速Ⅱ转矩Ⅱ从动轮转矩调速电源图2—3 面板布置图在机台背面有微机RS-232接口、主动轮转矩I及从动轮转矩II调零旋钮等,其布置情况如图2—4所示。

图2—4 背面布置图1—电源插座2一主动力矩放大倍数调节3—接地端子4—从动调零电位器5—主动调零电位器6—RS-232接口三、实验内容与实验步骤(一)人工记录操作方法1.准备工作1)检查实验台,使各机件处于完好状态;2)将传动带装在主动带轮和从动带轮上;3)加上砝码1,使产生所需初拉力F0;4)将电机调速旋钮逆时针方向转到底。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

福建农林大学金山学院实验报告 系: 信息机电工程 专业: 电子信息 年级: 09 姓名: XXX 学号: 092230051 实验课程: 汇编语言

实验室号:_605______ 实验设备号: j2 实验时间: 指导教师签字: 成绩: 实验四 DOS功能调用 1.实验目的和要求 1. 学会DOS中关于显示功能调用指令的用法。 2. 领会修改显存方法显示字符。 2.实验环境 实验的硬件环境是: IBM—PC机及其兼容机 实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。 3.实验内容及实验数据记录 1、 输入一个字符,显示出来 2、 输入一个字符串,显示出来 3、 buf开始的3个的16位二进制数用十六进制数的形式显示出来 (1)理解程序 (2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。 (3)如果要分行显示,程序要如何修改? DATA SEGMENT BUF DW 4F59H, 56A8H, 0FF90H DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV SI, 0 P: MOV BX, BUF[SI] MOV CH, 4 L: MOV CL, 4 ROL BX, CL MOV DL, BL AND DL, 0FH CMP DL, 10 JB NEXT ADD DL, 7 NEXT: ADD DL, 30H MOV AH, 2 INT 21H DEC CH JNZ L INC SI INC SI CMP SI, 4 JNA P MOV AH, 4CH INT 21H CODE ENDS END START 4、 运行下列程序,在屏幕的第1行,会显示一个字符X,理解程序段

STACK SEGMENT DB 128 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK START: MOV AX,STACK MOV SS,AX MOV SP,128 MOV AX,0B800H MOV ES,AX MOV AH,0 ;BIOS 10H的0号功能,设置80X25的彩色字符模式 MOV AL,03H INT 10H MOV AH,'X' MOV ES:[160*1+40*2],AH MOV AL,0 MOV AH,4CH INT 21H CODE ENDS END START 5、 显示 ********* ******* ***** *** * 6、 编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。 4.算法描述及实验步骤 1直接doss调用1号功能 2调用10号和2号功能显示字符串 3运行程序,输出结果为单行输出,把程序修改为 DATA SEGMENT MSG DB 0DH,0AH,'$' BUF DW 4F59H, 56A8H, 0FF90H DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV SI, 0 P: MOV BX, BUF[SI] MOV CH, 4 L: MOV CL, 4 ROL BX, CL MOV DL, BL AND DL, 0FH CMP DL, 10 JB NEXT ADD DL, 7 NEXT: ADD DL, 30H MOV AH, 2 INT 21H DEC CH JNZ L INC SI INC SI LEA DX, MSG MOV AH, 09H INT 21H CMP SI, 4 JNA P MOV AH, 4CH INT 21H CODE ENDS END START 则为分行输出。 4直接运行程序,则输出结果是‘x’ 5输入以下程序运行 DSEG SEGMENT MSG DB 0DH,0AH,'$' DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV BX,9 LP:MOV CX,BX LOP:MOV DL,'*' MOV AH,2 INT 21H LOOP LOP LEA DX,MSG MOV AH,09H INT 21H DEC BX DEC BX CMP BX,1 JNL LP MOV AL,0 MOV AH,4CH INT 21H CSEG ENDS END START

编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。 STACKS SEGMENT STACK DW 128 DUP(?) STACKS ENDS DSEG SEGMENT BUF DB 0,-1,2,4,3,-4,5,6,-7,0 RESULT DB 0 DSEG ENDS CSEG SEGMENT PARA PUBLIC 'CODE' ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV AX,0 MOV BX,0 MOV DX,0 LEA SI,BUF MOV CX,10 LOP: CMP BYTE PTR[SI], 0 JNE L1 INC DL ;0的个数 JMP L3 L1: JG L2 INC AL ;负数的个数 JMP L3 L2: INC BL ; 正数的个数 L3: INC SI LOOP LOP MOV BH,0 CALL DISP ;调用显示子程序,显示正数的个数 MOV BL,AL MOV BH,0 CALL DISP ;调用显示子程序,显示负数的个数 MOV BL,DL MOV BH,0 CALL DISP ;调用显示子程序,显示规划零的个数 MOV AL,0 MOV AH,4CH INT 21H DISP PROC ;显示BX中的数 PUSH AX PUSH BX PUSH DX MOV CH,4 ROLL: MOV CL,4 ROL BX,CL MOV DL,BL AND DL,0FH CMP DL,9 JBE NEXT1 ADD DL,07H NEXT1: ADD DL,30H MOV AH,02H INT 21H DEC CH JNZ ROLL POP DX POP BX POP AX RET DISP ENDP CSEG ENDS END START

5.调试过程 3 该程序是将buf开始的3个的16位二进制数用十六进制数的形式显示出来,按程序输出结果

将程序输出结果改为分行显示

4 运行程序观察结果如下

6. 实验结果 1doss 运行程序结果如下 2显示字符串 3分行输出的结果 4 5

6 6、运行,显示结果为: 7. 总结 学会DOS中关于显示功能调用指令的用法。 领会修改显存方法显示字符。

附录: 1 DATE SEGMENT DATE ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATE START: MOV AH,1 INT 21H MOV AH,4CH INT 21H CODE ENDS END START 2 DATA SEGMENT BUF DB 20,?,20 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX MOV DX, OFFSET BUF MOV AH, 0AH INT 21H MOV DL, 0DH MOV AH, 2 INT 21H MOV DL, 0AH MOV AH, 2 INT 21H MOV CL, BUF+1 MOV SI,0 L: MOV DL, [SI+2] MOV AH,2 INT 21H INC SI LOOP L MOV AH, 4CH INT 21H CODE ENDS END START 3 DATA SEGMENT MSG DB 0DH,0AH,'$' BUF DW 4F59H, 56A8H, 0FF90H DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV SI, 0

相关文档
最新文档