实验一 DOS 环境下的汇编语言编程环境使用
DOS功能调用及汇编语言程序设计举例

DOS功能调⽤及汇编语⾔程序设计举例DOS功能调⽤及汇编语⾔程序设计举例5.1 DOS功能调⽤DOS-磁盘操作系统,象WINDOS操作系统⼀样是进⾏计算机系统管理的软件,在WINDOS 以前,PC机上主要应⽤的是DOS 操作系统,两者间的最⼤区别是在DOS 操作系统下,⽤户可以利⽤⾃⼰所编的程序直接对外设(硬件端⼝)进⾏操作,如对磁盘进⾏读写,对打印机进⾏控制等,⽽在WINDOS操作系统下,⽤户只能通过特有的驱动程序才能对其进⾏操作,因为所有外设均被WINDOS操作系统统⼀管理,⽤户⽆法在⾃⼰的程序中对他门进⾏操作。
1、DOS功能在PC机的操作系统(DOS)的安装过程中,将⼀些常⽤的⼦程序安装到了内存单元中,⽤户可以在编写⾃⼰的⽤户程序时,进⾏调⽤。
其中有两种:BIOS⼦程序:功能管理与计算机相连接的外部设备(显⽰器、键盘、磁盘驱动)程序,称为基本输⼊输出系统(basic Input/output system)这部分程序是存放在ROM 区所以通常称为:ROM BIOSDOS功能程序:与BIOS程序⼀样,DOS功能程序也是计算机操作系统开发⼈员编写的⼀些常⽤的⽤于磁盘⽂件管理的⼦程序,主要⽤于磁盘⽂件的建⽴、打开、读写、关闭,⽤户同样可以在⾃⼰的程序中对他们进⾏调⽤,简化⽤户程序的开发。
与BIOS不同的是DOS功能程序是存放在硬盘上的,在系统上电时,由操作系统,将其安装到内存中的,称为常驻内存程序。
⽤户调⽤这两种程序⼀般采⽤中断指令进⾏调⽤:DOS功能的调⽤⽅法:1、在AH中写⼊功能调⽤号2、在指定的寄存器中设置⼊⼝参数3、⽤INT 21 指令执⾏调⽤4、根据出⼝参数分析调⽤执⾏情况实际上,所有的DOS 功能⼦程序被组成了⼀个⼤程序存放在内存单元中,从nn1:nn2 开始的单元中,在操作系统上电进⾏系统初始化时,将nn1:nn2 存放到了中断向量表中,0000H:0084H开始的连续4个单元中,当⽤户在⽤户程序中⽤INT 21H 调⽤DOS的某⼀个功能时,即控制程序转移到nn1:nn2 开始的程序,在这段程序中⾸先根据AH中的功能,可以分析出⽤户调⽤的哪⼀个功能从⽽在转到相应地⽅执⾏相应的程序段。
实验1_认识汇编语言

实验一 认识汇编语言1.1 实验目的(1)理解汇编语言的概念及其与高级语言的区别(2)了解MASM6.11和TASM软件包的安装及配置(3)了解常用汇编语言集成环境(4)掌握汇编语言程序的上机过程1.2 预备知识1.2.1 系统环境对汇编语言的初学者来说,DOS环境的优点是:DOS操作系统简单,程序员可以管理系统的所有资源,访问和修改系统中的所有内存(包括内存控制块、中断向量表),直接对I/O端口进行读写,便于对知识的学习和理解。
其缺点是:单任务的DOS操作系统只有一个运行级别,任何进程与DOS操作系统都是同等级别的,致使系统中各个进程会相互影响。
如果某个进程死机,整个系统就会瘫痪。
但是DOS系统已经退出历史舞台,目前的学生只熟悉Windows环境而对DOS知之甚少,继续要求学生在DOS系统的命令行界面下编写和调试程序,无疑存在巨大的困难。
目前,IBM PC及其兼容机配置的Intel系列微处理器可以工作在实模式、保护模式和虚拟86三种模式下。
实模式是汇编语言入门的基础,是汇编语言教学中无法跨越的阶段。
了解实模式是理解内存分段式管理和寻址方式的基础。
保护模式是Windows系统的工作模式,虚拟86模式则是在保护模式下提供的模拟8086处理器工作的模式,为学习汇编语言提供了便利。
DOS汇编程序在Win32环境中运行时,操作系统会模拟实模式运行16位进程。
对于一些可能会影响整个操作系统工作的指令,windows操作系统会拒绝执行。
64位的Windows 环境则不提供16位应用的虚拟环境。
因此,采用Win32环境进行汇编语言程序的编辑工作,在虚拟控制台环境中学习(汇编、连接和调试)汇编语言是最佳方案。
下面我们将逐步给大家讲解如何安装和配置汇编语言的编译调试环境,并选择适合的编辑软件来组建汇编语言的集成环境。
最后,叙述如何使用Visual Studio 2008 Express作为汇编语言的工作环境。
1.2.2 汇编语言上机过程汇编语言程序需要经过编辑、汇编、连接、调试与执行等过程才能实现其具体功能。
Windows10下利用DOSBOX和MASM32搭建汇编语言开发环境

Windows10下利⽤DOSBOX和MASM32搭建汇编语⾔开发环境⽬录⼀、⼯具准备1)下载DOSBOX2)下载MASM323)汇编⼯具下载⼆、安装⼯具1)安装DOSBOX2)DOSBox使⽤指南3)安装MASM32三、程序调试过程四、参考资料总结⼀、⼯具准备1)下载DOSBOX⼯具介绍:DOSBox 是⼀个 DOS 模拟程序,由于它采⽤的是 SDL 库,所以可以很⽅便的移植到其他的平台。
⽬前,DOSBox 已经⽀持在Windows、Linux、Mac OS X、BeOS 、palmOS、Android 、webOS、os/2等系统中运⾏。
不少DOS下的游戏都可以直接在该平台上运⾏。
说明:由于项⽬已经停更,⽬前官⽹上指出,DOSBOX可以运⾏于32位和64位的Windows Vista和Windows 7之上,根据本⼈亲测,亦可在32位和64位的Windows 10上运⾏DOSBOX,因此有需要的可以试试。
选择Win32 installer那个安装了⼀路next即可2)下载MASM32⼯具介绍:MASM32是国外的MASM爱好者Steve Hutchesson⾃⾏整理和编写的⼀个软件包,⽬前最⾼版本为11r版。
MASM32并⾮指Microsoft的MASM宏汇编器,⽽是包含了不同版本⼯具组建的汇编开发⼯具包。
它的汇编编译器是MASM6.0以上版本中的Ml.exe,资源编译器是Microsoft Visual Studio中的Rc.exe,32位链接器是Microsoft Visual Studio中的Link.exe,同时包含有其他的⼀些如Lib.exe和DumpPe.exe等⼯具。
3)汇编⼯具下载⼆、安装⼯具1)安装DOSBOX安装下载到的DOSBox0.74-win32-installer.exe,直接⼀路Next完成安装。
2)DOSBox使⽤指南1、创建⼀个⽤于保存汇编⼯具(如MASM、Link、DEBUG等⼯具)和汇编⽂件(*.asm)的⽬录,如:D:\DEBUG。
实验一 熟悉汇编程序调试步骤

实验一汇编语言环境一、实验目的1.熟悉汇编语言的上机环境,学习EDIT,MASM,LINK程序的使用,掌握建立、汇编、链接、运行汇编语言程序的过程。
2.熟悉DEBUG有关命令的使用方法。
二、实验原理建立、汇编、链接、运行汇编语言程序的过程方法。
三、主要仪器及耗材计算机、MASM软件包。
四、实验内容与步骤内容:1.输入、编辑汇编语言程序。
2.对汇编语言程序进行汇编、连接和运行。
步骤:1.在DOS提示符下,进入MASM目录。
2. 在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。
1) 调用edit输入、编辑源程序并保存在指定的目录中;例:edit no1.asm,进入编辑窗口code segmentassume cs:codestart:mov ah,08hint 21hmov ah,4chint 21hcode endsend start编辑完后,何在退出edit窗口2) 用汇编程序masm对源程序汇编产生目标文件obj。
例:masm no1不断修改错误,直至汇编通过为止,产生no1.obj。
3) 用连接程序link产生执行文件exe.例:link no14) 执行程序:可直接从DOS执行程序,即在DOS环境中,输入文件名no1即可。
再次熟悉汇编连接,运行过程。
1.在DOS提示符下,进入MASM目录。
2. 在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。
1) 调用edit输入、编辑源程序并保存在指定的目录中;例:edit no2.asm,进入编辑窗口DATAS SEGMENTbuf db 'I am a student!$' ;此处输入数据段代码DATAS ENDSSTACKS SEGMENTdb 200 dup(0);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea dx,bufmov ah,9int 21h;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START编辑完后,何在退出edit窗口2) 用汇编程序masm对源程序汇编产生目标文件obj。
汇编实验一 DOS 环境下的汇编语言编程环境使用

汇编语言实验报告实验一 DOS环境下的汇编语言编程环境使用(基础与验证型)班级:姓名:学号:实验日期:实验一 DOS 环境下的汇编语言编程环境使用(基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识汇编语言程序设计上机开发过程如图1.1 所示。
1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII 码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3 个文件:扩展名为 .OBJ 的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。
目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。
列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。
交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。
.LST 和.CRF 两个文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。
在对源程序文件(ASM 文件)汇编时,汇编程序将对ASM 文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ 文件。
因此,汇编程序的主要功能可以概括为以下三点: (1) 检查源程序中的语法错误,并给出错误信息;(2) 产生目标程序文件(OBJ 文件),并可给出列表文件(.LST 文件);(3) 展开宏指令。
微机实验指导书

实验一汇编语言上机环境的熟悉和DEBUG命令使用一.实验目的:1.熟悉程序的汇编过程以及Masm for Windows 6.0的使用。
2.学习使用DEBUG中的各种命令。
3.掌握用DEBUG调试自编程序的方法,为以后实验打下基础。
二.实验内容1.熟悉汇编语言的编译环境。
1)DOS下的编译环境。
2)Windows下的编译环境(Masm for Windows 6.0)。
2.用A命令汇编下列程序段,完成将DS:2000开始的5个字节内存内容相加,并把相加的结果存放在DS:2005内存单元中,将程序写到硬盘上,然后用DEBUG调试﹑运行该程序,查看运行结果,观察程序段能否完成指定功能,若不能,说明原因。
MOV CX,5MOV AL,0MOV BX,2000NEXT: ADD AL,[BX]INC BXDEC CXLOOP NEXTMOV [BX],ALINT 3三.预习要求1.仔细阅读实验一后的【实验提示】及【DEBUG的启动及其基本命令的使用】中的内容2.―汇编语言上机操作过程及程序调试技术‖内容。
3.根据实验要求,对各项结果进行预测。
四.实验报告1.写出实验内容中2的程序错误所在,分析其运行过程。
2.举例写出利用dubug调试中你所用的命令的功能。
3.写出做完本实验的心得体会。
五.实验提示1.DEBUG的进入(1)如果是首次进入DEBUG编程,则只要在DOS提示符下键入DEBUG ↙,即可进入DEBUG环境,显示提示符―-‖。
(2)如果要对某个程序使用DEBUG进行调试,只要在DOS提示符下键入DEBUG 文件名↙,即可进入DEBUG环境,显示提示符―-‖。
2.程序的汇编与反汇编⑴源程序可以在DEBUG下,用汇编命令A输入到内存中,只需在DEBUG提示符―-‖下,键入汇编命令A ↙,并在显示―段寄存器地址:偏移地址‖后面键入你自己编写的程序,每键入一条,按一次回车键。
-A ↙127B:0100 MOV CX,5 ↙127B:0103 MOV AL,0 ↙127B:0105 MOV BX,2000 ↙┇⑵如果进入DEBUG时是使用―DEBUG 文件名↙‖进入的,那么在进入DEBUG状态后,可用反汇编命令U,将调入的程序显示出来:-U ↙127B:0100 B90500 MOV CX,5127B:0103 B000 MOV AL,0127B:0105 BB0020 MOV BX,2000┇3.在DEBUG状态下,对所编写文件存盘的步骤①给程序命名-N 文件名.COM ↙②将文件长度放入BX、CX中(高位放入BX,低位放入CX中)-R BX ↙(注意!!!由于文件长度一般较小,所以切记BX中赋0值)-R CX ↙(文件最末偏移地址减去文件开始的偏移地址即文件长度)③用写盘命令W把正在调试的内存中程序写入磁盘中-W 〈地址〉↙(文件开始地址)退出DEBUG状态用Q命令:-Q ↙4.在DEBUG状态下,建议使用DOS分配给用户的内存可用区在DEBUG状态下,用户可对所有寄存器、RAM内存随意查看和修改,但由于对DOS 操作系统在内存中存放情况不了解,可能会将存放有操作系统程序的内存内容破坏,从而可能引起系统的异常,出现死机现象,故建议使用DOS分配给用户的内存可用区,其低端地址是刚进入DEBUG时,用命令R查看到的DS:IP。
如何在dos下编写汇编语言

名称 解释 格式 a (Assemble) 逐行汇编 a [address] c (Compare) 比较两内存块 c range address d (Dump) 内存16进制显示 d [address]或 d [range]
e (Enter) 修改内存字节 e address [list] f (fin) 预置一段内存 f range list g (Go) 执行程序 g [=address][address...] h (Hexavithmetic) 制算术运算 h value value i (Input) 从指定端口地址输入 i pataddress l (Load) 读盘 l [address [driver seetor]] m (Move) 内存块传送 m range address n (Name) 置文件名 n filespec [filespec...] o (Output) 从指定端口地址输出 o portadress byte q (Quit) 结束 q r (Register) 显示和修改寄存器 r [register name] s (Search) 查找字节串 s range list t (Trace) 跟踪执行 t [=address] [value] u (Unassemble) 反汇编 u [address ]或 range w (Write) 存盘 w [address[driver sector secnum]] ? 联机帮助 ?
3.快速格式化软盘 L பைடு நூலகம்00 0 0 * '插入一张己格式化软盘 W 100 0 0 * '放入一张欲格式化软盘
注:* 分别为:720K e |1.2M id |1.44M 21
DOS环境下常用命令及DEBUG使用方法

XXXXXX实验报告课程名称:汇编语言实验名称:DOS环境下常用命令及DEBUG使用方法学号姓名:指导教师评定:____________________________ 签名:_____________________________一、实验目的熟悉DOS环境下常用的命令以及DEBUG调试工具的基本使用方法,为以后的实验打下基础。
二、实验器材计算机一台,DEBUG调试工具。
三、实验内容及步骤1、进入DOS环境开机——Windows——开始——运行——COMMAND——MSDOS西文方式2、进入DEBUG运行状态熟悉使用各条DEBUG命令在打开的COMMAND输入DEBUG,回车即进入DEBUG运行状态。
此时可以使用各条DEBUG命令。
(1)显示和修改寄存器的内容的命令R的用法:“—R[寄存器名|F]”“—R”命令可以显示所用寄存器的内容,包括标志寄存器的内容,以及当前CS:IP处的一条指令的机器码和汇编指令,还有涉及到的存储单元内容。
如:(2)显示指定范围内的内存单元内容的命令:“—D[ [段地址:] 起始偏移[终止偏移] ] ”如:(3)修改内存单元内容的命令:“—E [段地址:]起始偏移[修改内容列表]”用“—E”命令修改内存单元内容后可以再用“—D”命令检查是否修改成功,如:(4)填充内容列表命令:“—F[段地址:]起始偏移终止偏移填充内容列表”用“—F”命令修改内存单元内容后可以再用“—D”命令检查是否修改成功,如:(5)编写/修改汇编语句命令:“—A[ [段地址:]起始偏移]”不再继续编程时按回车结束编程。
如:(6)将指定地址范围的机器码反汇编成汇编指令命令:“—U[[段地址:]起始偏移[终止偏移]]”如:(7)单步跟踪进入命令:“—T[=[段地址:]起始偏移] [指令条数]”指令条数默认为一条指令,该命令可以从指定地址起执行指定条数指令后停下来,每条指令执行后均会显示寄存器内容和状态值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 DOS 环境下的汇编语言编程环境使用一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII 码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为 .OBJ 的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。
目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。
列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。
交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。
汇编程序的主要功能可以概括为以下三点: (1) 检查源程序中的语法错误,并给出错误信息;(2) 产生目标程序文件(OBJ 文件),并可给出列表文件(.LST 文件);(3) 展开宏指令。
2、目标程序的连接过程连接程序进行连接时,其输入有两个部分:一是目标文件(.OBJ),;另一是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。
连接后输出两个文件,一是扩展名为 .EXE 的可执行文件,另一个是扩展名为 .MAP 的内存分配文件,它是连接程序的列表文件,又称为连接映像(Link Map),它给出每个段在存储器中的分配情况,该文件可有可无。
连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。
3、Debug 调试过程Debug 的主要功能有显示和修改寄存器及内存单元的内容;按指定地址启动并运行程序;设置断点使程序分段运行,以便检查程序运行过程中的中间结果或确定程序出错的位置;反汇编被调试程序,它将一个可执行文件中的指令机器码反汇编成助记符指令并同时给出指令所在的内存地址;单条追踪或多条追踪被调试程序,它可以逐条指令执行或几条指令执行被调试程序,每执行一条(或几条)指令后,Debug 程序将中断程序的运行并提供有关结果信息;汇编一段程序,在Debug 的汇编命令下可以直接输入助记符指令,并将其汇编成可运行程序段。
此外,Debug 还可以将磁盘指定区的内容或一个文件装入到内存或将内存的信息写到磁盘上等等。
在DOS 状态下可以用下面的命令启动Debug 程序:DEBUG [路径文件名.扩展名]Debug 后面的文件名及路径是指被调试程序的文件名及路径,Debug 后面的文件必须是程序的可执行文件,其扩展名可以是.EXE 或.COM。
4、汇编语言和DOS 操作系统的接口编写的汇编语言源程序是在DOS 环境下运行的,为了保证用户程序执行完后能返回到DOS 状态,可使用如下两种方法。
(一)标准方法首先将用户程序的主程序定义成一个FAR 过程,其最后一条指令为RET。
然后在代码段的主程序(即FAR 过程)的开始部分用如下三条指令将PSP 中INT 20H 指令的段地址及偏移地址压入堆栈:PUSH DS ;保护PSP 段地址MOV AX,0 ;保护偏移地址0PUSH AX这样,当程序执行到主程序的最后一条指令RET 时,由于该过程具有FAR 属性,故存在堆栈内的两个字就分别弹出到CS 和IP,从而执行INT 20H 指令,使控制返回到DOS 状态。
返回DOS 的标志就是程序运行完后出现一个DOS 的标识符,如D:\>。
(二)非标准方法也可在用户的程序中不定义过程段,只在代码段结束之前(即CODE ENDS 之前)增加两条语句:MOV AH,4CHINT 21H则程序执行完后也会自动返回DOS 状态。
此外,由于开始执行用户程序时,DS 并不设置在用户的数据段的起始处,ES 同样也不设置在用户的附加段起始处,因而在程序开始处使用以下方法装填DS 和ES 的值使其指向用户的数据段:MOV AX,段名MOV 段寄存器名,AX ;段寄存器名可以是DS、ES、SS 之一四、实验内容与步骤1、汇编、链接并调试下面给出的简单程序,找出程序中的错误。
DATA1 SEGMENTword1 DW 1, 9078Hbyte1 DB 21, 'World'DD 12345678HMsg DB 'Hello ,everyone!$'DATA1 ENDSSTACK SEGMENTsta dw 20 dup(?)top equ size staSTACK ENDScode segmentassume cs:code,ds:data1,ss:stackStart:MOV AX,data1MOV DS,AXMOV DX,OFFSET MsgMOV AH,9INT 21hNopMOV AX,0MOV BX,1HADDITIONADD AX,BXINC BXCOM BX,10JAE ADDITIONMOV AH,4ch ;DOS terminate program function INT 21hcode endsEND Start通过汇编发现此程序共有3处错误:1、符号地址ADDITION后缺少冒号;2、比较指令CMP错写成COM3、为实现循环累加的目的,JAE应改成JB修改后程序如下:DATA1 SEGMENTword1 DW 1, 9078Hbyte1 DB 21, 'World'DD 12345678HMsg DB 'Hello ,everyone!$'DATA1 ENDSSTACK SEGMENTsta dw 20 dup(?)top equ size staSTACK ENDScode segmentassume cs:code,ds:data1,ss:stackStart:MOV AX,data1MOV DS,AXMOV DX,OFFSET MsgMOV AH,9INT 21hNopMOV AX,0MOV BX,1HADDITION:ADD AX,BXINC BXCMP BX,10JB ADDITIONMOV AH,4ch ;DOS terminate program functionINT 21hcode endsEND Start运行后结果:2、完成下列程序设计:分类统计字数组data 中正数、负数和零的个数,并分别存入内存字变量Positive、Negative 和Zero 中,数组元素个数保存在其第一个字中。
使用Debug 查看Positive、Negative 和Zero 三个变量的数据。
思路流程:源程序如下:DATAS SEGMENTbyte1 DB 11,-3,2,0,5,23,-6,0,3,-21 ;定义字数组数据positive DB 0 ;定义字变量储存正数个数negative DB 0 ;定义字变量储存负数个数zero DB 0 ;定义字变量储存0个数DATAS ENDSSTACKS SEGMENTSTACKS ENDS偏移量SI=0,计数值CX=10data[SI]>0data[SI]<0Zero+1 否否CX=0结束是Positive+1 是Negative+1 是SI++,CX --否CODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,10 ;CX用于循环计数MOV SI,0 ;SI为数据偏移量L1:MOV AL,byte1[SI] ;AL储存当前数CMP AL,0 ;当前数与0比较JG L2 ;大于0跳转到L2JL L4 ;小于0跳转到L4INC zero ;当前数为0,zero数值加1JMP L3 ;跳转到L3L2:INC positive ;当前数为正数,positive数值加1 JMP L3L4:INC negative ;当前数为负数,negative数值加1 L3:INC SI ;偏移量加1DEC CX ;循环计数减1JNE L1 ;不等于0则循环MOV AH,4CHINT 21HCODES ENDSEND START调试过程与结果:输入-u进行反汇编,找到程序结尾MOV AH,4CH 语句所在的地址0771:0029;输入-g29执行到该语句;输入-d0显示0770:0000开始内存单元;由图可见地址0770:0000至0770:0009分别对应测试数据11,-3,2,0,5,23,-6,0,3,-21;076A:000A至076A:000C依次为正数个数5、负数个数3和零的个数2,进而说明该程序结果的正确性。
五、心得体会这次是第一次进行汇编语言的上机操作,主要以熟悉汇编过程的步骤、原理为主。
在实验过程中,我分别体验了在masm for windows集成实验环境中汇编和在dos中直接进行汇编的两种方法,加深了我对MASM、LINK以及DEBUG三个重要步骤的理解和认识。
由于是刚刚接触汇编语言,很多程序设计方面的知识还不具备,刚开始编程时一头雾水无从下手。
仿照着老师的样例程序,再加上自行查看书中的一些语句,终于编完了自己的程序。
但由于还没有学习如何输出,却不知道如何去检查自己的程序是否正确。
在老师介绍完了DEBUG的几个命令之后,。