实验一 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[=[段地址:]起始偏移] [指令条数]”指令条数默认为一条指令,该命令可以从指定地址起执行指定条数指令后停下来,每条指令执行后均会显示寄存器内容和状态值。
汇编语言编程实验报告
汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。
二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。
六、实验六: (19)七、汇编实验总结 (23)实验一一. 实验题目【汇编语言补充作业T20T20】编写完整程序,利用】编写完整程序,利用DOS 系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。
二. 程序流程及思路实现字符串输入,需要分成三个步骤:实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS 系统功能调用0AH 号子功能,(DS:DX DS:DX))= = 输入缓冲区首址;输入缓冲区首址;输入缓冲区首址;3、在输入的字符串尾加上‘、在输入的字符串尾加上‘$$’字符,以作为输出结束条件。
’字符,以作为输出结束条件。
实现字符串输出,则需要注意的问题是:实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;和字符串实际字符数;2、输出回车换行可利用字符串:、输出回车换行可利用字符串:CR DB 0AH,0DH,CR DB 0AH,0DH,CR DB 0AH,0DH,’’$’。
’。
三. 源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;MAXLEN DB N ;缓冲区字符的最大长度缓冲区字符的最大长度缓冲区字符的最大长度ACTLEN DB ? ;ACTLEN DB ? ;实际字符个数实际字符个数实际字符个数STRING DB N DUP(?) ;STRING DB N DUP(?) ;字符空间字符空间字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行回车换行MOV BL,MAXLEN+1 ;取实际的字符长度取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上输出结尾要加上$ $MOV DX,SI ;把开始存放字符的首地址赋给DX(注:以下程序采用b方法)方法)。
在DOS环境下启动各语言工具的方法
一、实验目的:
在本次上机实验过程中,学习DOS环境下启动各语言工具的方法和顺序。
二、实验方法:
1、制作汇编语言工具链
将windows系统的、EDIT.HELP
复制到任意盘下(如E)的一个汇编软件masm5.0的文件夹里
2、从开始→所有程序→附件→命令提示符,
3、将盘符变为E: 即改换到汇编软件masm5.0当前所在的盘
再输入目录转换命令cd e:\masm5.0转到masm5.0文件夹
4、用edit ymax.asm命令产生编辑文件ymax.asm
回车,出现下面界面:
输入汇编语言源程序
点击file选Exit推出Edit返回Dos.
5.用masm产生OBJ文件
在界面输入如下图:
回车后见如下界面:
输入输入目标文件后回车,出现如下界面:
再输入列表文件后回车:
再输入交叉索引文件回车,这3个文件名输入完毕,进行汇编后出现汇编结果如下
警告0,严重错误8,打开列表文件查找错误,并修改源程序,再汇编直到错误为0.
6、用link产生EXE文件及用debug查看结果
返回DOS:
三、文件解读方法:
1、如何解读列表文件
通过记事本打开列表文件:
说明警告性错误及严重性错误。
详解汇编语言开发环境搭建方法
于这些日子一直都在研究底层的技术,从 Windows 驱动程序,到 Windows 内核等等技术的学习,让我对底层的技术越发有兴趣了,而刚好,在研究 WRK 时,对内存管理,寄存器,地址总线,数据总线,控制总线等的理解不够透彻,所以越发的想学习汇编程序设计来提升功力,而由于近来在公司里一直都有项目压着,所以在公司里也实在不好拿本汇编程序设计看,所以只好晚上回来学习了,汇编看了几个晚上,也算是蛮有感觉的。
今天就先来搭个开发环境再说吧。
开发环境搭配我介绍四种开发汇编程序的方式:第一种:直接在 Dos 环境下使用 Edit 命令调出源码编辑框,生成源码后,可以使用由微软提供的 masm 汇编编译器来对源码进行编译,编译完后再使用 Linker 连接器即可得到可执行文件,这种方式现在几乎被灭绝了(当然使用 masm 汇编编译器还是很普遍的),除非你真要在 DOS 环境下运行汇编程序;第二种:通过简化第一种方式而来;第三种:直接使用 Masm for Windows 集成实验环境,这个开发环境呢,非常适合汇编语言的初学者,因为这个 IDE 本身就是由一些从事汇编程序教学的大学老师开发的出来用于汇编初学者进行学习和实验的,所以使用简单,方便,这里可以对这个 IDE 稍加推荐;第四种:则是通过 Visual Studio 这个强大的 IDE 来实现汇编程序的编译,运行和调试,至于 Visual Studio 就不多做介绍了,.Net 用了这么多年,这东西强大到什么程度那是总所周知的;第一种方式:使用 Edit + MASM 5.0 编译器 + Linker 连接器其实这种方式是很简单的,只是很麻烦,因为简单而且麻烦,所以我采用尽可能的将截图传上来,然后稍加注解的方式进行介绍,软件准备:需要 MASM 5.0 或者以上的汇编编译器首先,是要编辑汇编源代码:其实对于源码的编辑根本不需要向如下这么麻烦,直接拿个记事本就 OK 了运行 cmd 命令输入 Edit 命令从而弹出汇编源码编辑框在源码输入框中输入汇编源码将编辑好的汇编源码保存到 xx.asm 文件中然后就是要编译编辑好的汇编源代码在 Dos 环境下进入到 MASM 5.0 汇编编译器所在的目录然后运行 masm.exe可以从上面的截图中看到 [. ASM] 的标记,这个标记代表的是需要在这里输入要编译的源程序文件名,这里有一点特别的是,由于默认的文件扩展名为 .asm ,所以在编译 .asm 的汇编源程序时可以不用指定源程序所在文件的扩展名。
汇编实验报告:汇编程序的汇编及运行_顺序程序设计_分支循环程序设计_子程序设计_dos功能调用
福建农林大学东方学院信息工程类实验报告课程名称:汇编语言*名:***系:计算机系专业:电子信息工程年级:2010学号:1050302103指导教师:职称:2012年 6 月17 日福建农林大学东方学院信息工程类实验报告系:计算机系专业:电子信息工程年级: 10 姓名:廖少兵学号: 1050302103 实验课程:汇编语言实验室号:_______ 实验设备号:实验时间:指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求1、熟悉汇编程序的汇编、连接、执行过程2、生成LST文件,查看LST文件3、生成OBJ文件,修改语法错误4、生成EXE文件5、执行2.实验的原理和主要仪器设备IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1、将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND2、输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DA TABEING MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START3、输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START4.操作方法及实验步骤编写各代码并存储为源程序asm文件,对其进行汇编、连接。
汇编实验一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) 展开宏指令。
汇编语言上机环境及基本操作
实验1:讲解汇编语言上机环境及基本操作1.1 汇编语言程序的上机环境(1)DOS操作系统:在MS-DOS状态下,才能进行汇编语言操作。
(2)编辑程序:用来输入、建立和修改源程序的一种通用系统软件,如(3)汇编程序:宏汇编MASM.EXE。
(4)连接程序:LINK.EXE。
(5)调试程序:。
1.2 汇编语言程序的上机步骤(1)用编辑程序建立扩展名为.ASM的汇编语言源程序文件。
(2)用汇编程序MASM.EXE将源程序文件汇编成用机器码表示的目标程序文件,扩展名为.OBJ。
(3)如在汇编过程中出现错误,根据信息提示(如错误位置、错误类型、错误说明等),用编辑软件重新调入源程序进行修改。
无错时用连接程序LINK.EXE把目标文件转化成可执行文件,扩展名为.EXE。
(4)DOS命令状态下直接键入可执行文件名就可执行该文件。
1.3 应用举例1. 用编辑程序EDIT建立源程序(1)进入DOS命令状态,发出C:\>EDIT命令,可进入EDIT编辑屏幕,输入源程序。
在EDIT状态下用<ALT>键可激活命令选项,如图1所示,用光标上下、左右移动可选择相应命令功能,也可选择反白的命令关键字进行操作。
用<ESC>键可退出命令选项。
图1 EDIT屏幕编辑软件工作窗口(2)程序输入完毕退出EDIT前一定要将源程序文件存盘,以便进行汇编及连接。
【例1】从键盘输入10个字符,以与键入相反的顺序将10个字符输出到屏幕上,源程序名为STR.ASM。
DOS状态下,调用EDIT建立文件名为STR.ASM的汇编源程序,如图2所示。
图2 用EDIT建立汇编语言源程序2.用MASM将源程序文件汇编成目标程序文件DOS状态下,采用MASM对源程序文件进行汇编,如图3所示。
图3 用MASM汇编生成目标文件MASM主要功能:(1)检查源程序中的语法,有错时给出错误信息;源程序经汇编后无错误后产生目标程序文件,扩展名为.OBJ;(2)调入MASM时,先显示软件版本号,然后出现三个提示行:第1个提示行:询问目标文件名,方括号内为默认,可按回车,也可输入指定文件名。
汇编学习笔记——DOS及DEBUG介绍
汇编学习笔记——DOS及DEBUG介绍⼀、课程简介声明:该课程基于《汇编语⾔(第2版)》郑晓薇编著,机械⼯业出版社。
本节实验取⾃教材中第⼆章的《实例⼆进⼊计算机》。
实验环境:1.DOS 环境实验环境中安装有dosemu可以模拟DOS环境,并提供DEBUG、MASM、LINK等汇编语⾔开发程序。
2.进⼊DOS和DEBUG在桌⾯上双击dosemu图标,直接进⼊DOS。
再做如下操作:C:\〉D: ——回车后进⼊D盘D:\〉CD DOS ——进⼊DOS⼦⽬录D:\dos〉DIR ——列出⽬录中的⽂件D:\dos〉DEBUG ——进⼊DEBUG⼆、进⼊计算机微型计算机的字长与微处理器的寄存器位数有关。
以Intel 80X86系列微处理器为例:CPU是8086/8088、80286的字长是16位(⼆进制位bit),那么它们的寄存器的位数⼀定是16位的;32位字长的微机CPU是80386/80486或者Pentium系列,它们的寄存器的位数则是32位的。
在汇编语⾔中,数值后⾯分别⽤字母B、H、D代表⼆进制(Binary)、⼗六进制(Hexadecimal)、⼗进制数(Decimal)(⼗进制数可以省略D)。
在计算机中还规定采⽤字节、字、双字等单位来表⽰数据。
字节(Byte):8位⼆进制数。
如00000101B,或表⽰成05H;10000101B,或表⽰成85H。
字(Word):16位⼆进制数,等于2字节。
如1100010111010110B,或表⽰成C5D6H。
双字(Double Word):32位⼆进制数,⼜称为双精度数,等于4字节。
如23456789H。
2.1 8086寄存器组8086寄存器都是16位的寄存器,根据⽤途可分为4种类型。
分别是数据寄存器、地址寄存器、段寄存器和控制寄存器。
如图所⽰:img数据寄存器中每个寄存器⼜可以分为2个8位的寄存器:AH、AL,BH、BL,CH、CL,DH、DL。
H表⽰⾼字节(⾼8位)寄存器、L表⽰低字节(低8位)寄存器。
DOS编程实验报告
DOS编程实验报告实验⼀、认识DOS实验物联⽹⼯程施振成 201306104124⼀、实验⽬的(1)认识DOS;(2)掌握命令解释程序的原理;(3)掌握简单的DOS调⽤⽅法;(4)掌握C语⾔编程初步。
⼆、实验内容和要求要求:编写类似于DOS,UNIX的命令⾏解释程序(1)⾃⾏定义系统提⽰符(2)⾃定义命令集(8-10个)(3)⽤户输⼊HELP以查找命令的帮助(4)列出命令的功能,区分内部还是外部命令(5)⽤户输⼊QUIT退出(6)内部命令有dir, cd, md,rd, cls, date, time, ren, copy等。
内容:根据要求,完成设计、编码、测试⼯作。
三、实验⽅法、步骤及结果测试程序名称:1.C;1.EXE程序思路:程序源代码:#include<stdio.h>#include<string.h>int q=1;char cmd[20][20]={"dir","cd","md","rd","cls","date","time","ren","copy","help","quit"};void chaxun(char str[20]) ---------该程序⽤于查询获得的字符的响应结果{if(strcmp(str,cmd[0])==0) ----------------------⽐较获得的字符;printf("dir 表⽰⽆参数:查看当前所在⽬录的⽂件和⽂件夹\n");------根据判断值相等输出结果else if(strcmp(str,cmd[1])==0){printf("cd ⽬录名:进⼊特定的⽬录\n");printf("例如:cd /home\n");}else if(strcmp(str,cmd[2])==0){printf("md ⽬录名:建⽴特定的⽂件夹\n");printf("例如:md /home\n");}else if(strcmp(str,cmd[3])==0){printf("rd ⽬录名:删除特定的⽂件夹\n");printf("例如:rd /home\n");}else if(strcmp(str,cmd[4])==0)printf("cls ⽬录名:表⽰清屏功能\n");else if(strcmp(str,cmd[5])==0){printf("date 设置⽇期命令,功能是设置⽇期\n");printf("例如:当前⽇期2015/10/10 周六\n");printf("输⼊新⽇期:2015/10/11 周⽇\n");}else if(strcmp(str,cmd[6])==0){printf("time 系统时钟设置命令,功能:设置或显⽰系统时间\n");printf("例如:当前时间:15:11:36.90\n");printf("输⼊新时间:20:12:12.09\n");}else if(strcmp(str,cmd[7])==0)printf("ren 表⽰⽂件改个名字,ren命令的格式是:ren 源⽂件⽬的⽂件名\n");else if(strcmp(str,cmd[8])==0)printf("copy 表⽰复制命令,功能:复制信息\n");else if(strcmp(str,cmd[9])==0){printf("dir 内部命令;表⽰⽆参数:查看当前所在⽬录的⽂件和⽂件夹\n");printf("cd 内部命令;⽬录名:进⼊特定的⽬录\n");printf("md 内部命令;⽬录名:建⽴特定的⽂件夹\n");printf("rd 内部命令;⽬录名:删除特定的⽂件夹\n");printf("cls 内部命令;⽬录名:表⽰清屏功能\n");printf("date 内部命令;设置⽇期命令,功能是设置⽇期\n");printf("time 内部命令;系统时钟设置命令,功能:设置或显⽰系统时间\n");printf("ren 内部命令;表⽰⽂件改个名字,ren命令的格式是:ren 源⽂件⽬的⽂件名\n");printf("copy 内部命令;表⽰复制命令,功能:复制信息\n");printf("help 外部命令;帮助:查询各种命令符\n");}else if(strcmp(str,cmd[10])==0){q=0;printf("谢谢使⽤,拜拜!\n");}}main(){char s[20];printf(" ********************欢迎使⽤***********************\n");while(q){printf("9-23>实验1>input cmd>");gets(s);----------------------------------------------通过C语⾔默认的gets()函数获得输⼊的字符数据;chaxun(s);-----------------------------------------调⽤查询函数将⽤户输⼊的字符数据与程序的命令符进⾏⽐对;}}。
- 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的几个命令之后,。