实验一 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中的功能,可以分析出⽤户调⽤的哪⼀个功能从⽽在转到相应地⽅执⾏相应的程序段。
实验一 DOS 环境下的汇编语言编程环境使用
实验一 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),它给出每个段在存储器中的分配情况,该文件可有可无。
连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。
实验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。
实验一 利用 DEBUG 调试汇编语言程序段
实验名称实验一利用 DEBUG 调试汇编语言程序段一、实验目的1.熟悉 DEBUG 有关命令的使用方法;2.利用 DEBUG 掌握有关指令的功能;3.利用 DEBUG 运行简单的程序段。
二、实验要求1.仔细阅读有关 DEBUG 命令的内容,对有关命令,要求事先准备好使用的例子;三、实验环境DOS 操作系统四、实验内容1.进入和退出 DEBUG 程序;1)开始—运行点确定进入DOS命令窗口图1进入DOS命令窗口2)在命令窗口中输入 dubug 进入 debug 程序图2进入 debug 程序3)进入 debug 窗口后,输入 q 命令退出 debug图3退出 debug2.学会 DEBUG 中的1)D 命令(显示内存数据 D 段地址:偏移地址)例 1:-D100 ;显示 DS 段, 0100 开始的 128 个字节内容-D ;默认段寄存器为 DS,当前偏移地址(刚进入 debug 程序偏移地址为 0100H)图4默认显示 DS 段内容-D DS:100 ;显示 DS 段, 0100H 开始的 128 个字节内容图5显示 DS 段内容-D CS:200 ;显示 CS 段, 0200H 开始的 128 个字节内容图6显示 CS 段内容-D 200:100 ;显示 DS 段, 0200:0100H 开始的 128 个字节内容图7显示 DS段0200:0100H内容-D 200 ;显示 DS 段, 0200H开始的128个字节内容图8显示 DS段0200H开始的内容-D 100 L 10 ;显示 DS 段, 100H 开始的 100H 个字节内容图9显示 DS段100H开始的100H字节内容2)E 命令(修改指定内存)例 1:-E100 41 42 43 44 48 47 46 45-D 100,L08结果:073F:0100 41 42 43 44 48 47 46 45-e 100 修改内存内容-d 100,L08 查看刚才修改的内存内容图10 修改和查看DS段100H开始的80H字节内容例 2: -E 100073F:0100 41. 42 : 42 是操作员键入此命令是将原 100 号内存内容 41 修改为 42,用 D 命令可察看。
【8086汇编-Day2】dosbox实验环境配置及测试
【8086汇编-Day2】dosbox实验环境配置及测试我学习汇编⽤的是王爽的《汇编语⾔》第三版,书中是以8086处理器为例,是⼯作在实模式下的,⽽当下的个⼈电脑处理器都是⼯作在保护模式下的。
所以需要⼀个虚拟的⼯作在实模式下的处理器,这⾥主要⽤到DOSBOX软件,Debug(调试⼯具),masm(编译链接⼯具),Editor(dos下的编辑器)。
Ⅰ· 准备所需材料DOSBOX官⽹链接: (请到官⽹下载软件)下载完毕后打开安装程序,⼀路next,期间选择合适安装⽬录。
⼩软件,装的快。
另外,为DOSBOX配置⼀个专属的⼯作⽬录,⽐如我为其在F盘为其创建了⼯作⽬录DOSBOXⅡ · 配置安装完毕后,进⼊安装⽬录,找到如下批处理⽂件双击打开,他会为你打开⼀个配置⽂档MOUNT C F:\DOSBOXC:cls编辑完毕保存关闭此处只对该处讲解,⽂件其余参数请⾃⾏探索还记得在百度云下载的tools么?把⾥⾯的debug啦masm啦那些东西统统提出来,直接放在你配置的⼯作⽬录路径下,不要放在什么⼦⽬录⾥,这涉及到你等下能调试出来不,如下Ⅲ · 测试到⽬前为⽌,确保⽆误,打开Dosbox如果你是跟我⼀样配置会显⽰如下尝试输⼊debug(正常输⼊前两三个字母就够了然后按Tab键⾃动补全,不⾏你就把名字打全)画⾯如下,那你的debug就挺好⽤了然后可以试⼀下教材上的实验命令: (请诸君多⾃⾏探索)然后诸君⾃⼰探索下masm、editor等玩意⼉吧,英⽂都看得懂,⽤起来不⿇烦,有问题找百度。
Ⅳ · 补充(实模式与保护模式)实模式和保护模式区别及寻址⽅式:Ⅴ· 总结没啥总结的,就是些基本配置,主要是想帮助⼀些基础薄弱的⽼铁迅速上⼿,多做实验。
表⽩汇编,表⽩⽼师。
嗯吧,就这样呗,教程向随笔⼀篇诸君笑纳。
如何在dos运行汇编程序
如何在DOS环境下运行汇编程序
要运行汇编程序,可以有很多的方法,也可以用一些专门的软件,但众所周知,汇编的话,是即使用记事本也是可以写出来然后在DOS 环境下运行的,只要有MASM.EXE和LINK.EXE即可,当我们在记事本里写好汇编程序时,应把它保存成.asm的格式,如sort.asm,然后在开始->运行中输入cmd,转到你存放程序的文件夹,最好所有的文件都是用英文命名,如我的是在D盘的huibian文件夹中,
然后再输入masm 以及你的文件名敲回车,再在默认的情况下连敲三次回车,此时如果有错误和提醒,它会显示,否则就是0,如图
再输入link 以及你的文件名,连敲几次回车,这时电脑会自动生成一个你的文件的目标文件,如我的文件名是maxxx
这时,你就可以直接运行程序了,如我的运行结果为
0054
当然,如果你觉得你的程序有问题,也可以用debug 进行调试,输入u可以直接看到你的每一步指令,直到出现最后一条int 21h 为止,记住它前面的地址码,用g跳转可以直接执行到最后一步看到最
后结果,如图
输入q的话可以退出,当然,输入t的话可以进行单步调试,看到每一步执行的结果,更深入的方面,我以后会介绍的,敬请大家期待,谢谢~~~~。
实验一汇编运行环境及方法、简单程序设计
实验一汇编运行环境及方法、简单程序设计一、实验目的:1、熟练汇编语言运行环境和方法。
2、了解如何使用汇编语言编制程序。
3、熟悉DEBUG常用的命令的使用方法。
4、会使用DEBUG命令调试程序。
二、实验内容:1、比较两个字符串STRING1和STRING2所含的字符是否相同,若相同,则输出MATCH,不相同则输出NOMA TCH。
2、学会对汇编语言程序进行汇编、连接和运行。
3、学会用DEBUG中的D命令,E命令,R命令,G命令,F命令,U命令,A命令以及T命令。
三、实验要求:1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。
2、本实验只要求在DEBUG调试程序状态下进行,包括汇编程序、调试程序和执行程序。
四、实验报告:1、程序说明。
说明程序的功能、结构。
2、调试说明。
包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
3、写出源程序清单和执行结果。
实验二循环程序设计-已知学生成绩,求每个学生的名次一、实验目的:1、熟悉循环、DOS功能调用等基本的程序结构。
2、熟悉多重循环结构及算法技巧。
3、熟练使用DEBUG常用命令查看程序运行结果,以及通过修改代码或数据来改变程序运行结果。
二、实验内容:设有十个学生成绩分别是88,75,95,63,98,78,87,73,90和60分。
试编制一个程序,求每个学生和名次。
三、编程提示:1、定义如下的数据结构:data SEGMENTgrade DW 88,75,95,63,98,78,87,73,90,60rank DW 10 DUP(?)data ENDS2、通过双重循环实现:对于数组的每个元素(学生成绩),查找数组中比该元素值大的元素个数I,则I-1即为该学生的名次,并将名次依次保存在以rank为首地址的字数组中。
四、实验报告:1、程序说明。
说明程序的功能、结构。
在dos中汇编
DA TA SEGMENTdw 0,0snk db 1blk db 32food db 3tal1 db 4tal2 db 2adrs db 5len db ?pst db ?addrs dw ?frow db ?fcol db ?hwrt db ?gmov db 'game over press r to restart press q to quit $'score1 db 'score :$'score2 db ?score0 db 1zero db 48writer db 'Developer: Geniusdot $'email db 'e-mail: geniusdot@$'msg1 db 'The way to play the game:$'way db ' press w to up ,press s to down,press a to left,press d to right$' msg db 'Press any key(except a,s,d,w) to start$'DA TA ENDSSTACK SEGMENT stackdb 200 dup(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKstart:mov ax,datamov ds,axmov ax,0mov es,axmov frow,10mov fcol,6mov dh,10mov dl,26mov ah,2int 10hmov ah,9 lea dx,msg1 int 21hmov dh,11 mov dl,7 mov ah,2 mov bh,0int 10hmov ah,9 lea dx,way int 21hmov dh,12 mov dl,20 mov ah,2 mov bh,0int 10hmov ah,9 lea dx,msg int 21hmov ah,0int 16hmov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,10 int 10hmov dh,0 mov dl,0 mov ah,2 mov bh,0int 10hmov ah,9 lea dx,score1 int 21hmov dl,15 mov ah,2 mov bh,0int 10hlea dx,writerint 21hmov ah,9lea dx,emailint 21hmov score2,48push es:[9*4] ;将原int9入口地址保存pop ds:[0]push es:[9*4+2]pop ds:[2]mov word ptr es:[9*4],offset int9 ;更改中断向量表mov es:[9*4+2],csjmp aawrite macro row,col,cnt ;宏定义用于向当前光标处输出字符push bxpush cxpush dxmov dh,rowmov dl,colmov ah,2mov bh,0int 10hmov ah,9mov bl,11mov cx,1lea di,cnt ;50mov al,[di]int 10hpop dxpop cxpop bxendmreadh macro row,col ;宏定义用于读出当前光标处字符push dxpush bxmov dh,rowmov dl,colmov ah,2mov bh,0int 10hmov ah,08hint 10hmov pst,alpop bxpop axpop dxendmwnear macro ;宏定义只用在readcg宏中当readcg的所有判断都不成立调用此宏local wnext1local wnext2local wnext3local wnext4push dxdec dhreadh dh,dlcmp pst,1jne wnext1write dh,dl,tal2jmp wnext4wnext1:inc dhdec dlreadh dh,dlcmp pst,1jne wnext2write dh,dl,tal2jmp wnext4wnext2:inc dhinc dlreadh dh,dlcmp pst,1jne wnext3write dh,dl,tal2jmp wnext4dec dhinc dlreadh dh,dlcmp pst,1jne wnext4write dh,dl,tal2wnext4:pop dxendmreadcg macro row,col ;宏定义用于改变判断出来的字符local tnup,tnup1,tnup2,tnlf,tnlf1,tnlf2,tndn,tndn1,tndn2,tnrt,tnrt1,tnrt2,gooutpush bxpush axpush dxwrite dh,dl,tal1dec rowreadh dh,dlcmp pst,4jne tnup1jmp tnup2tnup1:jmp near ptr tnuptnup2:write dh,dl,blkinc dhinc dhreadh dh,dlcmp pst,1jne tnupwrite dh,dl,tal2jmp near ptr goouttnup:pop dxpush dxdec colreadh dh,dlcmp pst,4jne tnlf1jmp tnlf2tnlf1:jmp near ptr tnlf tnlf2:write dh,dl,blk inc dlinc dlreadh dh,dlcmp pst,1jne tnlfwrite dh,dl,tal2 jmp near ptr goout tnlf:pop dxpush dxinc rowreadh dh,dlcmp pst,4jne tndn1jmp tndn2tndn1:jmp near ptr tndn tndn2:write dh,dl,blk dec dhdec dhreadh dh,dlcmp pst,1jne tndnwrite dh,dl,tal2 jmp near ptr goout tndn:pop dxpush dxinc colreadh dh,dlcmp pst,4jne tnrt1jmp tnrt2tnrt1:jmp near ptr tnrt tnrt2:write dh,dl,blk dec dldec dlreadh dh,dlcmp pst,1jne tnrtwrite dh,dl,tal2jmp near ptr goouttnrt:pop dxpush dxwneargoout:pop dxpop axpop bxendmaddone: ;此标号功能是将蛇身增加一push dxinc score2mov dh,1mov dl,0mov cx,23cmpad1:push cxmov cx,79cmpad2:readh dh,dlcmp pst,2jne nextad3jmp nextad4nextad3:jmp near ptr nextadnextad4:write dh,dl,snkdec dhreadh dh,dlcmp pst,4jne natupwrite dh,dl,tal2dec dhwrite dh,dl,tal1jmp outonatup:inc dhreadh dh,dlcmp pst,4jne natlfwrite dh,dl,tal2dec dlwrite dh,dl,tal1jmp outonatlf:inc dhinc dlreadh dh,dlcmp pst,4jne natdnwrite dh,dl,tal2inc dhwrite dh,dl,tal1jmp outonatdn:dec dhinc dlreadh dh,dlcmp pst,4jne natrtwrite dh,dl,tal2inc dlwrite dh,dl,tal1 natrt:outo:pop cxjmp near ptr endad nextad:inc dljmp nextad2 chgad2:jmp near ptr cmpad2 nextad2:loop chgad2sub dl,79inc dhpop cxjmp nextad1 chgad1:jmp near ptr cmpad1loop chgad1endad:pop dxjmp near ptr crtfaa: ;从这开始产生最原始的蛇mov addrs,offset turnrightmov dh,10mov dl,1mov cx,3write dh,dl,tal1inc dlwrite dh,dl,tal2wrt:inc dlwrite dh,dl,snkloop wrtmov len,6mov ax,0jmp wrt1ovflw: ;当蛇碰壁或自身转到此游戏结束mov ah,6mov al,0mov ch,0mov cl,0mov dh,24mov dl,79mov bh,7int 10hmov dh,17mov dl,17mov ah,2mov bh,0int 10hmov ah,9lea dx,gmovint 21hmov ax,0 ;恢复int9中断mov es,axpush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]stop:mov ah,0int 16hcmp al,'r'je aa1jmp aa2aa1:jmp near ptr startaa2:cmp al,'q'jne stopjmp near ptr exitwrt1: ;此处蛇行走过程的无限循环call dlypush dxinc dhcmp dh,25je ovflwinc dlcmp dl,80je ovflwpop dxpush dxdec dhcmp dh,0je ovflwdec dlcmp dl,-1je ovflwpop dxpush dxlea ax,turnrightcmp addrs,axjne tonxt2inc dlreadh dh,dlcmp pst,1je tonxt1cmp pst,2je tonxt1cmp pst,4je tonxt1jmp tonxt2 tonxt1:jmp ovflw tonxt2:pop dxpush dxlea ax,turnup cmp addrs,ax jne tonxt4dec dhreadh dh,dl cmp pst,1je tonxt3cmp pst,2je tonxt3cmp pst,4je tonxt3jmp tonxt4 tonxt3:jmp ovflw tonxt4:pop dxpush dxlea ax,turndown cmp addrs,ax jne tonxt6inc dhreadh dh,dl cmp pst,1je tonxt5cmp pst,2je tonxt5cmp pst,4je tonxt5jmp tonxt6 tonxt5:jmp ovflw tonxt6:pop dxpush dxlea ax,turnbackcmp addrs,axjne tonxt8dec dlreadh dh,dlcmp pst,1je tonxt7cmp pst,2je tonxt7cmp pst,4je tonxt7jmp tonxt8tonxt7:jmp ovflwtonxt8:pop dxjmp nextacrtf1:jmp near ptr addone crtf:call rand1call rand2inc frowmov ah,frowmov al,fcolpush dxmov dh,1mov dl,0push cxmov cx,23check1:push cxmov cx,79check2:readh dh,dlcmp pst,1je nextncmp pst,2je nextncmp pst,4je nextnjmp nextnn nextn:cmp ax,dxje crtfinc dlloop check2inc dhsub dl,79pop cxloop check1pop cxpop dxwrite frow,fcol,food nexta:mov ah,frowmov al,fcolcmp ax,dxje crtf12jmp crtf13crtf12:jmp near ptr crtf1 crtf13:push dxcmp score2,58jl normalmov score2,49inc score0 normal:mov dh,0mov dl,8write dh,dl,score2 add dl,score0write dh,dl,zero pop dxcmp adrs,17je jmp1cmp adrs,145je jmp1cmp adrs,31je jmp2cmp adrs,159je jmp2cmp adrs,32je jmp3cmp adrs,160je jmp3cmp adrs,30cmp adrs,158je jmp4jmp addrsjmp1:lea ax, turndowncmp ax,addrsje jmp2mov addrs,offset turnupjmp near ptr turnupjmp2:lea ax,turnupcmp ax,addrsje jmp1mov addrs,offset turndownjmp near ptr turndownjmp3:lea ax,turnbackcmp ax,addrsje jmp4mov addrs,offset turnrightjmp near ptr turnrightjmp4:lea ax,turnrightcmp ax,addrsje jmp3mov addrs,offset turnbackjmp near ptr turnbackturnright: ;此处实现蛇向左走push dxmov dh,1mov dl,0mov cx,23cmpr1:push cxmov cx,79cmpr2:readh dh,dlcmp pst,2je nextr4jmp near ptr nextrreadcg dh,dlpop cxjmp near ptr endrnextr:inc dljmp nextr2chgr2:jmp near ptr cmpr2nextr2:loop chgr2sub dl,79inc dhpop cxjmp nextr1chgr1:jmp near ptr cmpr1nextr1:loop chgr1endr:pop dxinc dlwrite dh,dl,snkjmp near ptr wrt1turnup: ;此处实现蛇向上走push dxmov dh,1mov dl,0mov cx,23cmpu1:push cxmov cx,79cmpu2:readh dh,dlcmp pst,2jne nextu3jmp nextu4nextu3:jmp near ptr nextunextu4:readcg dh,dljmp near ptr endunextu:inc dljmp nextu2chgu2:jmp near ptr cmpu2nextu2:loop chgu2sub dl,79inc dhpop cxjmp nextu1chgu1:jmp near ptr cmpu1nextu1:loop chgu1endu:pop dxdec dhwrite dh,dl,snkjmp near ptr wrt1turndown: ;此处实现蛇向下走push dxmov dh,1mov dl,0mov cx,23cmpd1:push cxmov cx,79cmpd2:readh dh,dlcmp pst,2jne nextd3jmp nextd4nextd3:jmp near ptr nextdnextd4:readcg dh,dlpop cxjmp near ptr enddinc dljmp nextd2chgd2:jmp near ptr cmpd2nextd2:loop chgd2sub dl,79inc dhpop cxjmp nextd1chgd1:jmp near ptr cmpd1nextd1:loop chgd1endd:pop dxinc dhwrite dh,dl,snkjmp near ptr wrt1turnback: ;此处实现蛇向右走push dxmov dh,1mov dl,0mov cx,23cmpb1:push cxmov cx,79cmpb2:readh dh,dlcmp pst,2jne nextb3jmp nextb4nextb3:jmp near ptr nextbnextb4:readcg dh,dlpop cxjmp near ptr endbnextb:inc dljmp nextb2chgb2:jmp near ptr cmpb2nextb2:loop chgb2sub dl,79inc dhpop cxjmp nextb1chgb1:jmp near ptr cmpb1nextb1:loop chgb1endb:pop dxdec dlwrite dh,dl,snkjmp near ptr wrt1exit:mov ax,0 ;恢复int9中断mov es,axpush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]mov ah,4chint 21hint9: ;更改后的中断服务程序push axin al,60hmov adrs,almov al,20hout 20h,alpop axiretDL Y PROC near ;延时子程序PUSH CXPUSH DXMOV DX,10000DL1: MOV CX,9801DL2: LOOP DL2DEC DXJNZ DL1POP DXPOP CXRETDL Y ENDPRAND1 PROCPUSH CXPUSH DXPUSH AXSTIMOV AH,0 ;读时钟计数器值INT 1AHMOV AX,DX ;清高6位AND AH,3MOV DL,23 ;除23,产生0~23余数DIV DLMOV frow,AH ;余数存frow,作随机行数POP AXPOP DXPOP CXRETRAND1 ENDPRAND2 PROCPUSH CXPUSH DXPUSH AXSTIMOV AH,0 ;读时钟计数器值INT 1AHMOV AX,DX ;清高6位AND AH,3MOV DL,79 ;除79,产生0~79余数DIV DLMOV fcol,AH ;余数存fcol,作随机列数POP AXPOP DXPOP CXRETRAND2 ENDPCODE ENDSEND start本文来自CSDN博客,转载请标明出处:/geniusdot/archive/2007/03/05/1521216.aspx要运行汇编程序,可以有很多的方法,也可以用一些专门的软件,但众所周知,汇编的话,是即使用记事本也是可以写出来然后在DOS环境下运行的,只要有MASM.EXE和LINK.EXE即可,当我们在记事本里写好汇编程序时,应把它保存成.asm的格式,如sort.asm,然后在开始->运行中输入cmd,转到你存放程序的文件夹,最好所有的文件都是用英文命名,如我的是在D盘的huibian文件夹中,然后再输入masm 以及你的文件名敲回车,再在默认的情况下连敲三次回车,此时如果有错误和提醒,它会显示,否则就是 0,如图再输入link 以及你的文件名,连敲几次回车,这时电脑会自动生成一个你的文件的目标文件,如我的文件名是maxxx这时,你就可以直接运行程序了,如我的运行结果为0054当然,如果你觉得你的程序有问题,也可以用debug 进行调试,输入u 可以直接看到你的每一步指令,直到出现最后一条 int 21h 为止,记住它前面的地址码,用g跳转可以直接执行到最后一步看到最后结果,如图输入q的话可以退出,当然,输入t的话可以进行单步调试,看到每一步执行的结果,更深入的方面,我以后会介绍的,敬请大家期待,谢谢~~~~。
实验1汇编语言实验环境与基本操作
实验1 汇编语言实验环境与基本操作班级:计科(高职)12-2 姓名:韩长莉学号: 201203014062 上机时间: 2014.4.14 上机地点:一机房指导老师:尉秀梅一.实验目的:1.学习debug的主要用法,熟悉R,D,E,U,T,A等常用的命令。
2.理解堆栈的工作原理,push和pop指令的执行步骤。
3.掌握一个完整的汇编程序从写出到执行的过程,熟悉用debug跟踪程序的执行过程。
二.实验内容:1.查看cpu和内存,用机器指令和汇编指令编程(p35)2.用机器指令和汇编指令编程(p71)3.编程、编译、连接、跟踪(94页)三.实验步骤1.查看cpu和内存,用机器指令和汇编指令编程(p35)(1)使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,cpu中相关寄存器中内容的变化。
提示:可用E命令和A命令,以两种方式将指令写入内存。
注意用t命令执行时,cs:ip的指向。
写清楚具体用这两种方式的操作方法。
C:\Users\Administrator>debug-e 1000:0 b8 20 4e 05 16 14 bb 00 20 01 d8 89 c3 01 d8 b8 1a 00 bb 26 00 00 d8-u 1000:01000:0000 B8204E MOV AX,4E201000:0003 051614 ADD AX,14161000:0006 BB0020 MOV BX,20001000:0009 01D8 ADD AX,BX1000:000B 89C3 MOV BX,AX1000:000D 01D8 ADD AX,BX1000:000F B81A00 MOV AX,001A1000:0012 BB2600 MOV BX,00261000:0015 00D8 ADD AL,BL1000:0017 28752D SUB [DI+2D],DH1000:001A 807C0429 CMP BYTE PTR [SI+04],291000:001E 7554 JNZ 0074-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=13C0 IP=0100 NV UP EI PL NZ NA PO NC13C0:0100 0000 ADD [BX+SI],AL DS:0000=CDCS13C0:1000-ripIP 0100-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0000 NV UP EI PL NZ NA PO NC1000:0000 B8204E MOV AX,4E20-tAX=4E20 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0003 NV UP EI PL NZ NA PO NC1000:0003 051614 ADD AX,1416-tAX=6236 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0006 NV UP EI PL NZ NA PE NC1000:0006 BB0020 MOV BX,2000-tAX=6236 BX=2000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0009 NV UP EI PL NZ NA PE NC1000:0009 01D8 ADD AX,BXAX=001A BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0015 OV UP EI PL NZ NA PE CY1000:0015 00D8 ADD AL,BL-tAX=0040 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0017 NV UP EI PL NZ AC PO NC1000:0017 28752D SUB [DI+2D],DH DS:002D=0D-e 1000:17 00 dc 00 c7 b4 00 00 d8 04 9c-u 1000:171000:0017 00DC ADD AH,BL1000:0019 00C7 ADD BH,AL1000:001B B400 MOV AH,001000:001D 00D8 ADD AL,BL1000:001F 049C ADD AL,9C1000:0021 44 INC SP1000:0022 032C ADD BP,[SI]1000:0024 30724D XOR [BP+SI+4D],DH1000:0027 3C07 CMP AL,071000:0029 7749 JA 00741000:002B A2A756 MOV [56A7],AL1000:002E FE064057 INC BYTE PTR [5740]1000:0032 83C605 ADD SI,+051000:0035 813C2C53 CMP WORD PTR [SI],532CAX=0040 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0017 NV UP EI PL NZ AC PO NC1000:0017 00DC ADD AH,BL-rcsCS 1000:1000-ripIP 0017:0-rAX=0040 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0000 NV UP EI PL NZ AC PO NC1000:0000 B8204E MOV AX,4E20-tAX=4E20 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0003 NV UP EI PL NZ AC PO NC1000:0003 051614 ADD AX,1416-tAX=6236 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=0006 NV UP EI PL NZ NA PE NC1000:0006 BB0020 MOV BX,2000-AX=2640 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=001B NV UP EI PL NZ NA PO NC1000:001B B400 MOV AH,00-tAX=0040 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=001D NV UP EI PL NZ NA PO NC1000:001D 00D8 ADD AL,BL-tAX=0066 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13C0 ES=13C0 SS=13C0 CS=1000 IP=001F NV UP EI PL NZ NA PE NC1000:001F 049C ADD AL,9C-t(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
汇编语言实验二
4、
结果分析
2、在DEBUG环境下输入“U 0100”,查看。
3、在DEBUG环境下输入“r”回车,查看CPU所有寄存器和标示位。再输入“r ip”回车,然后输入修改数值(该实验为0),回车,修改成功,再次输入“r”查看修改是否成功。
4、在DEBUG环境下输入“D DS:0”,查看数据内容,再输入“E DS:5 12 34”,修改数据段5、6号的内容为12、34,再次输入“D DS:0”查看是否修改成功。
2、用DIR命令查看根目录下的文件。
进入DOS环境,然后输入dir,回车
3、用CD命令进入Program Files子目录,并查看子目录中的文件。
进入DOS环境,输入”d \”,退回c盘,然后输入“cd Program Files”,进入programs files文件夹,再输入“dir”,回车查看文件。
验结果
1、
2、
3、
结果分析
实验内容
实验二,DEBUG命令用法
1、进入DEBUG,用D命令查看数据段中的0100H——0200H单元的内容。
2、用U命令查看代码段中的0100H开始的程序。
3、用R命令查看并修改IP寄存器的值为0.
4、用E命令修改数据段5号、6号单元的内容为12、34。
实验步骤
1、进入DOS环境,输入“cd\”,再输入“debug”,进入DEBUG。然后输入“D DS:0100 0200”,查看0100H——0200H单元的内容。
实验内容
实验一,DOS命令用法
1、用两种方法进入DOS环境
2、用DIR命令查看根目录下的文件。
3、用CD命令进入Program Files子目录,并查看子目录中的文件。
实验步骤
汇编语言程序设计实验指导书
实验一汇编语言环境一、实验时间:2010年3月4日二、实验设备:硬件:计算机系统软件:MS-DOS、DEBUG三、实验目的及要求:本实验属于指令操作类实验,学生通过DOS指令及DEBUG指令的操作进行实验环境的熟悉,主要要求有如下几点:1、了解DOS的一般操作指令2、掌握DEBUG程序的基本参数的使用四、实验内容:1、操作DOS的盘符之间的转换及子目录命令2、使用DEBUG命令: D,E,F,H,Q,R五、实验步骤:1、DOS常用命令练习:1)练习在DOS的各个分区之间进行切换:命令格式为盘符:如进入D盘命令为 D:2)练习在各个文件夹之间进行切换:2.1退回本盘符根目录 cd\2.2退回上层目录 cd..2.3进入下层目录 cd(空格)目录名3)练习使用功能键“F3”输入一行命令后,回车,如果需要重复输入可以按功能键F3,如果是前面几行的命令可以用方向键上下来调节。
4)用命令 COPY BUG 复制一个文件。
5)用命令 RENAME BUG BG 将BUG 文件改为BG。
6)用命令 DEL BG 将文件BG删除。
7)用命令 DIR查找当前目录当中的文件,并会使用/P及/W两个参数。
2、DEBUG 命令使用:1)打 DEBUG 进入 DEBUG 控制,显示提示符 '- '。
2)用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。
3)用命令 D 100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
4)用命令 F 110 11F 41 重复上二项实验,观察结果并比较。
5)用命令 E 100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存。
单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6)用H命令检查下列各组16进制数加减结果并和你的手算结果比较:-H 34 22会得出34与22的和与差(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH7)用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
汇编实验报告--利用DEBUG调试汇编语言程序段
实验一利用DEBUG调试汇编语言程序段学生姓名:何茂杰学号:2010305104 专业班级:10级计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。
二、实验内容1.学会使用debug的A, U, T, D, E等命令。
2.编写一个程序计算Y=(X*U+V)/1000,X、Y、U、V(均为16位有符号二进制数)的存放地址自己确定。
分别使用两种以上的寻址方式对X、Y、U、V寻址。
三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;2.学会使用debug的A, U, T, D, E等命令。
五、主要实验步骤(一)学会使用DEBUG中的简单命令:1.打开DOS,开始——运行——cmd。
2.进入DEBUG,在DOS下输入DEBUG,直接进入。
3.在DEBUG中输入D,查看D命令结果,输入D 1000,查看指定地址的数据。
4.在DEBUG中输入E100,修改地址100的数据,再输入D100,查看修改后的结果。
5.在DEBUG中输入R,查看当前寄存器的内容。
6.在DEBUG中输入A,输入以下代码:mov ax,1234mov [1000],ax输入T显示第一条命令运行结果,再次输入T,显示第二条命令运行结果,输入d1000,验证命令运行结果。
7.在DEBUG中输入A,输入以下代码:mov ax,1234mov [1000],ax输入G [=起始地址] [结束地址]↓,再输入D1000,验证命令运行结果。
8.在DEBUG中输入U [起始地址] [结束地址],从[起始地址]开始进行反汇编。
9.在DEBUG中输入Q,推出DEBUG程序。
(二)用DEBUG验证乘法、除法、加法、减法等功能:1.验证加法和带进位加,使用A命令,在DEBUG中键入以下代码:mov ax,f111mov bx,f222mov cx,2mov dx,3add ax,bxadc cx,dx使用G命令查看结果2.验证减法和带借位减法,使用A命令,在DEBUG中键入以下代码:mov ax,2mov bx,3mov cx,5mov dx,2sub ax,bxsbb cx,dx使用G命令查看结果3.验证乘法和除法,使用A命令,在DEBUG中键入以下代码:乘法:mov al,b4mov bl,11mul bl使用G命令查看结果除法:mov ax,400mov bl,b4div bl使用G命令查看结果六、实验数据及处理结果反汇编:执行情况:七、思考题启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?答:进入DOS,输入DEBUG xxx.exe,其中xxx为文件名。
在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、如何解读列表文件
通过记事本打开列表文件:
说明警告性错误及严重性错误。
汇编实验报告:汇编程序的汇编及运行_顺序程序设计_分支循环程序设计_子程序设计_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及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位)寄存器。
汇编实验报告
《汇编程序设计》实验报告班级网络工程3班姓名院系计算机科学学院学号指导教师郭荣佐计算机科学学院目录实验一Debug命令的使用一,实验目的及要求1,汇编语言调试环境Debug的使用,重点掌握常用命令(A R D E T)的使用,其他指令在以后的学习中逐步掌握。
2,利用Debug命令,调试采用不同寻址方式的指令的执行结果,从实践中加深对寻址方式和MOV指令的理解。
二,实验内容1,Debug程序的调入和退出2,Debug常用调试命令的使用3,MOV.XCHG.XLAT指令的调试三,实验步骤(一)、DOS常用命令练习:1.查看目录下所有的文件:2.键入 CD进入上级目录,再查看的结果:3.用COPY复制一个文件:4.用RENAME重命名一个文件:4.用DEL删除一个文件:(二)、DEBUG练习1,输入代码2,分步执行代码3,显示内存4,修改0100处的指令5,修改2000单元的值四,扩展题1,MOV指令的调试2,XCHG指令的调试3,XLAT指令的调试五、18条指令1。
.2.比较命令3.显示命令D:4.修改命令E:5‘填充内存指令F:6执行命令G:7.十六进制算求算运算指令H:8.断口输入命令I:9.读盘命令L:10.内存搬家命令M:11.命名待读/写文件命令N:12.段口输出命令O:13.结束debug返回DOS命令Q14.显示修改寄存器命令R15.搜索指定寄存器内容命令S16.执行并显示系统环境命令T 17.反汇编命令U18.写盘命令W实验二、基本汇编指令的使用一、实验目的及要求1.继续熟悉汇编语言调试环境Debug的使用,掌握常用调试命令。
2.用基本指令编写的程序段,并在Debug环境中调试,从实践中加深对基本汇编语言指令的执行过程的理解。
3.实验前要做好充分准备,包括汇编程序段清单、调试步骤、调试方法,以及对程序结果的分析等二、实验内容1单步调试一下程序段,给出每条指令执行后AL的值,以及CF、ZF、SF、OF 的状态。
汇编语言第3次实验报告:DOS功能调用09H和0AH的配合使用及子程序编写1
JMP L4
L5: SUB AL , 20H
L4:……
RET
CHANGE ENDP
小结
通过这次的上机实验,使我了解到如何构造一个完整的代码程序。很显然的看出来,我很多都还没学习。比如怎么写一个main函数等等。对汇编的代码还没有构成条件反射。现在是该学习如何看代码,认识代码。
教师评议
成绩评定:指导教师签名:
实验内容
1编写一完整程序,该程序接受长度小于30的字符串后,将串中的小写字母变成大写后重显该串。
2小写字母转换成大写字母的功能以一子程序形式实现;
3用串0dh,0ah,'$'在实验程序中的适当位置实现新行功能。
实验记录
数据段变量定义的内容如下:
data segment para
MAXLEN db 30
INPTLEN db ?;在此定置Dos功能9和0#39;)
crlfdb0dh,0ah,'$'
data ends
实验记录
小写字母转换成大写字母子程序的代码如下:
CHANGE PROC
L1: CMPAL, ‘A’
JB L4
JMP L2
L2: CMP AL , ‘Z’
实验报告
学生姓名
学号
班级
学生专业
计算机科学与技术
学院
计算机
课程名称
汇编语言程序设计(第三次)
实验时间
2009年11月11日
实验项目
DOS功能及子程序编写
报告撰写时间
2009年11月14日
实验目的
1掌握DOS功能调用09H和0AH的配合使用;
2学习子程序编写。
实验环境
1X86系列桌面系统;
汇编实验一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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章汇编语言程序设计的实验环境及实验步骤知识提要:本章主要进行汇编语言实验环境及实验步骤,涉及到的知识点包括:1、汇编语言源程序编写好以后,必须经过下列几个步骤才能在机器上运行:(1)编辑源程序(生成.ASM文件)(2)汇编源程序(.ASM→.OBJ)(3)连接目标程序(.OBJ→.EXE)(4)调试可执行程序(使用调试程序Debug调试生成的.EXE文件)(5)运行程序输出结果。
2、Windows环境下的汇编语言集成编程环境的使用实验一DOS环境下的汇编语言编程环境使用(基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本方法和技能;2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序;3、熟练掌握宏汇编程序MASM的使用;4、熟练掌握连接程序LINK的使用。
二、软硬件环境1、硬件环境:微机CPU486以上,500MB以上硬盘,32M以上内存;2、软件环境:装有MASM5.0、DEBUG、LINK、EDIT、CREF.EXE和EXR2BIN.EXE等应用程序。
三、实验涉及的主要知识单元1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为.OBJ的目标文件、扩展名为.LST的列表文件和扩展名为.CRF的交叉索引文件。
目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。
列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。
交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。
.LST和.CRF两个文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。
在对源程序文件(ASM文件)汇编时,汇编程序将对ASM文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ文件。
因此,汇编程序的主要功能可以概括为以下三点:(1)检查源程序中的语法错误,并给出错误信息;(2)产生目标程序文件(OBJ文件),并可给出列表文件(.LST文件);(3)展开宏指令。
汇编程序是系统提供的用于汇编的系统软件,目前常用的汇编程序有Microsoft公司推出的宏汇编程MASM(MACRO ASSEMBLER)和BORLAND公司推出的TASM(TURBO ASSEMBLER)两种。
Microsoft公司推出有宏汇编程序MASM和小汇编程序ASM两种,二者的区别在于:MASM有宏处理功能,而ASM没有宏处理功能,因此,MASM比ASM的功能强大,但MASM需要占据较大的内存空间,当内存空间较小时(如64KB),只能使用ASM。
2、目标程序的连接过程汇编后产生的目标程序(OBJ文件)并不是可执行程序文件(EXE文件),还不能直接运行,它必须通过连接程序(LINK)连接成一个可执行程序后才能运行。
连接程序进行连接时,其输入有两个部分:一是目标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以是高级语言(例如C语言)经编译后产生的目标文件;另一是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。
连接后输出两个文件,一是扩展名为.EXE的可执行文件,另一个是扩展名为.MAP 的内存分配文件,它是连接程序的列表文件,又称为连接映像(Link Map),它给出每个段在存储器中的分配情况,该文件可有可无。
连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。
所以,到此为止,连接过程已经结束,可以在操作系统下执行该.EXE程序了。
3、汇编语言和DOS操作系统的接口编写的汇编语言源程序是在DOS环境下运行时,必须了解汇编语言是如何同DOS操作系统接口的。
用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,用连接程序对其进行连接和定位时,操作系统为每一个用户程序建立了一个程序段前缀区PSP,其长度为256个字节,主要用于存放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。
操作系统在程序段前缀的开始处(偏移地址0000H)安排了一条INT20H软中断指令。
INT20H中断服务程序由DOS提供,执行该服务程序后,控制就转移到DOS,即返回到DOS管理的状态。
因此,用户在组织程序时,必须使程序执行完后能去执行存放于PSP开始处的INT20H指令,这样便返回到DOS,否则就无法继续键入命令和程序。
DOS在建立了程序段前缀区PSP之后,将要执行的程序从磁盘装入内存。
在定位程序时,DOS将代码段置于PSP下方,代码段之后是数据段,最后放置堆栈段。
内存分配好之后,DOS就设置段寄存器DS 和ES的值,以使它们指向PSP的开始处,即INT20H的存放地址,同时将CS设置为PSP后面代码段的段地址,IP设置为指向代码段中第一条要执行的指令位置,把SS设置为指向堆栈的段地址,让SP指向堆栈段的栈底,然后系统开始执行用户程序。
为了保证用户程序执行完后能返回到DOS状态,可使用如下两种方法。
(一)标准方法首先将用户程序的主程序定义成一个FAR过程,其最后一条指令为RET。
然后在代码段的主程序(即FAR过程)的开始部分用如下三条指令将PSP中INT20H指令的段地址及偏移地址压入堆栈:PUSH DS;保护PSP段地址MOV AX,0;保护偏移地址0PUSH AX这样,当程序执行到主程序的最后一条指令RET时,由于该过程具有FAR属性,故存在堆栈内的两个字就分别弹出到CS和IP,从而执行INT20H指令,使控制返回到DOS状态。
返回DOS的标志就是程序运行完后出现一个DOS的标识符,如C:\>。
(二)非标准方法也可在用户的程序中不定义过程段,只在代码段结束之前(即CODE ENDS之前)增加两条语句:MOV AH,4CHINT21H则程序执行完后也会自动返回DOS状态。
此外,由于开始执行用户程序时,DS并不设置在用户的数据段的起始处,ES同样也不设置在用户的附加段起始处,因而在程序开始处使用以下方法重新装填DS和ES的值使其指向用户的数据段:MOV AX,段名MOV段寄存器名,AX;段寄存器名可以是DS、ES、SS之一四、实验内容与步骤1、实验内容编写程序,判断一个年份是否是闰年。
2、实验步骤汇编语言程序设计上机过程如图1.1所示。
图1.1汇编语言程序上机过程(一)用编辑程序EDIT建立汇编语言源程序文件(ASM文件)例如,编写程序,判断一个年份是否是闰年的汇编语言源程序,可以在DOS模式下用编辑程序EDIT.EXE建立汇编语言源程序文件ABC.ASM,注意文件名的扩展名必须是.ASM。
也可以在Windows2000或者在Windows XP环境下鼠标单击“开始”→“运行”,在“运行”中输入“CMD”进入DOS模式,运行EDIT软件,例如:C>EDIT ABC.ASM进入EDIT的程序编辑画面时,输入汇编语言源程序如下:DATA SEGMENTINFON DB0DH,0AH,'Please input a year:$'Y DB0DH,0AH,'This is a leap year!$'N DB0DH,0AH,'This is not a leap year!$'W DW0BUF DB8DB?DB8DUP(?)DATA ENDSSTACK SEGMENT'stack'DB200DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODE START:MOV AX,DATAMOV DS,AXLEA DX,INFONMOV AH,9INT21HLEA DX,BUFMOV AH,10INT21HMOV CL,[BUF+1]LEA DI,BUF+2CALL DATACATECALL IFYEARSJC A1LEA DX,NMOV AH,9INT21HJMP EXITA1:LEA DX,YMOV AH,9INT21HEXIT:MOV AH,4CHINT21HDATACATE PROC NEARLEA SI,BUF+2MOV BX,0X3:MOV AL,[SI]SUB AL,30HMOV AH,0XCHG AX,BXMOV DX,10DMUL DXXCHG AX,BXADD BX,AXINC SILOOP X3MOV W,BXRETDATACATE ENDPIFYEARS PROC NEARPUSH BXPUSH CXPUSH DXMOV AX,WMOV CX,AXMOV DX,0MOV BX,4DIV BXCMP DX,0JNZ LAB1MOV AX,CXMOV BX,100DIV BXCMP DX,0JNZ LAB2MOV AX,CXMOV BX,400DIV BXCMP DX,0JZ LAB2LAB1:CLCJMP LAB3LAB2:STCLAB3:POP DXPOP CXPOP BXRETIFYEARS ENDPCODE ENDSEND START(二)用汇编程序MASM将ASM文件汇编成目标程序文件(OBJ文件)当源程序建立以后,仍以ABC.ASM程序为例,我们用汇编程序MASM对ABC.ASM源程序文件进行汇编,以便产生机器码的目标程序文件ABC.OBJ,其操作步骤如下:C>MASM ABCMicrosoft(R)Macro Assembler Version5.00Copyright(C)Microsoft Corp1981–1985,1987.All rights reserved.Object filename[ABC.OBJ]:Source listing[NUL.LST]:ABCCross-reference[NUL.CRF]:ABC50674+450574Bytes symbol space free0Warning Errors0Severe Errors由此可知,汇编程序调入后,首先显示版本号,然后出现三个提示行。
第一个提示行为:Object filename[ABC.OBJ]:这是询问目标程序文件名,方括号内为机器规定的默认的文件名,通常直接按回车键,表示采用默认的文件名(如上所示),这是我们汇编的主要目的。