实验一 汇编语言程序的调试与运行
- 格式:doc
- 大小:110.50 KB
- 文档页数:8
实验一 认识汇编语言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 汇编语言上机过程汇编语言程序需要经过编辑、汇编、连接、调试与执行等过程才能实现其具体功能。
汇编语⾔(王爽第三版)实验5编写、调试具体多个段的程序实验5 编写、调试具体多个段的程序⼀。
将下⾯的程序编译连接,⽤Debug加载、跟踪,然后回答问题。
assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcode endsend start程序分析:由于是初次接触,我们逐步讲解,废话多点。
(1)此程序考察的是内存中数据段和栈段的定义。
程序共定义了1个数据段,data段,⾸先明确,在程序运⾏开始(标号start处),这个数据段就已经被定义好了,并且分配了内存空间,并赋值了。
⼀个栈段,stack。
同理这个数据段在没有被⼈⼯定义为栈结构时,也被定义好了。
并且分配了内存空间,并赋值了。
将此程序编译并连接后,使⽤debug调试,(这⾥需要注意,以下的段地址可能由于系统不同⽽有差异,主要是理解概念。
)E:\assembly>debug eee.exe-rAX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B55 ES=0B55 SS=0B65 CS=0B67 IP=0000 NV UP EI PL NZ NA PO NC0B67:0000 B8660B MOV AX,0B66程序分析:我们什么也没执⾏,此时我们在data段定义的数据在哪?在ds:0100H处(原来讲过,程序最开始时ds:00~ds:100H是留给程序与操作系统通讯使⽤的psp内存段,参见书中p92);也就是说我们在ds:100H、0B55:100H或0B65:00处可以看见这些定义的数据。
实验一Debug命令的使用实验一Debug命令的使用一、实验说明1、 DEBUG简介DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。
在汇编语言程序调试中很常用。
DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。
DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。
DEBUG命令的使用注意问题:(1)字母不分大小写(2)只使用十六进制数,但没有带后缀字母“H”(3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。
(4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。
2、 Debug的调入和退出以Windows环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态,如:C:\Documents and Settings\mjy>然后输入命令:>Debug进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。
退出Debug的命令:Q3、 Debug常用命令(1)汇编命令A,格式为:- A [地址]功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。
若不指定地址,则系统从默认的地址开始存放。
按回车键退出汇编状态应用:用于调试一条指令或几条指令组成的一个程序段。
(2)显示和修改寄存器命令R,格式为:- R [寄存器名]功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按Enter 健。
若未指定寄存器,则默认为显示所有寄存器的内容。
应用:常用于通过寄存器的值查看指令的执行结果。
(3)内存单元内容的命令E,格式为:- E 地址[内容表]功能:若指定内容表,则用内容表中的内容代替指定地址开始的存储单元的值;否则,从指定地址开始逐个单元显示其内容,并等待用户修改,按空格键则继续显示下一单元的值,按回车键结束。
微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。
⼆、实验要求1.掌握DEBUG的使⽤,调试程序。
2.读懂程序中各条指令,说明程序功能。
三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。
100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。
2.加深对指令的理解。
⼆、实验要求1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。
请编⼀程序将AX的内容和BX的内容进⾏交换。
请⽤堆栈作为两寄存器交换内容的中间存储单元,⽤DEBUG调试程序进⾏汇编与调试。
2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请⽤DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装⼊0AH、0BH、0CH、0DH、0EH。
在DEBUG状态下送⼊下⾯程序,并⽤单步执⾏的⽅法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.设(AX)=0002H,编⼀个程序段将AX的内容乘10,要求⽤移位的⽅法完成。
三、思想描述实验内容1将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。
实验一、实验箱介绍与DEBUG简单使用一、实验目的1)了解实验箱的构成2)掌握模型机的结构框图3)学会DEBUG的简单使用二、实验内容1.实验箱介绍图1-1 计算机组成原理实验箱图1-1给出了实验箱的结构图,构成部分均在实验箱的印刷电路板上标注,如:ALU Uint(算逻单元)、Input Device Unit(输入单元)、Switch Unit(控制开关单元)、Bus Unit(总线单元)……,同学们要结合计算机的组成原理,确定运算器、控制器、存储器、输入设备、输出设备等在实验箱中的位置。
2.模型机的框图图1-2 模型机框图图1-2给出了计算机模型机的框图,同学们在做实验时,要体会实验中数据的流向,以便对整机有一个完整的认识。
3.DEBUG的简单使用DEBUG须在DOS环境下运行。
具体操作可以在Windows操作系统的“开始”菜单的“运行”对话框中输入“CMD”(命令command)如图1-3所示。
图1-3 Windows的运行窗口Windows的“DOS”模式,如图1-4所示。
图1-4 Windows下的“DOS”模式输入命令DEBUG(调试),见图1-5.图1-5 DEBUG调试窗口DEBUG命令是在“-”下,由键盘键入的。
每条命令以单字母命令符开头,然后是命令的操作参数,操作参数与命令符之间用空格隔开,操作参数与操作参数之间用空格或逗号隔开,命令的结束符是回车键。
命令及参数的输入可以是大小写的结合。
Ctrl+Break键可中止命令的执行。
Ctrl+Num Lock键可暂停屏幕卷动,按任一键继续。
所用数均为十六进制数,不用加H。
有关DEBUG中的D(显示)、R(寄存器)、U(反汇编)、G(执行)和Q(退出)等命令已在前面讲过了。
下面介绍本实验用到的DEBUG的命令:(1)A-汇编,用于输入汇编语言源程序(2)g-运行,运行用A命令编写的汇编语言程序(3)e-编辑,用于修改计算机内存中存储单位的数据(4)d-显示,用于显示计算机内存中存储单位的数据(5)q-退出,用于退出DEBUG的状态,到DOS提示符下。
实验二.调试程序DEBUG的主要命令实验目的:掌握调试程序DEBUG的使用方法。
实验内容:通过对一个汇编程序进行各种调试和检测,掌握调试程序DEBUG的使用方法。
DEBUG是为汇编语言设计的一种调试工具,主要用于检查、修改和执行汇编语言程序。
它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
DEBUG的作用:1.为用户提供一个可控制的交互式汇编语言运行环境,以控制和监督被调试程序的执行情况。
由于DEBUG操作容易,可以直接和计算机的寄存器以及内存打交道,可以用来汇编简单程序。
2.用户可以直接在程序中修改错误,并立即执行程序以判断这样的修改是否已经奏效,而不必对程序重新汇编来判断修改的效果。
3.DEBUG可以访问DOS的禁区,这样如果引导扇区遭病毒感染,还可以用DEBUG编程加以清除。
步骤:一.进入DEBUG (下文方括号中的项表示任选项,“<CR>”表示回车键)1.进入DOS2.进入C:盘ASM目录3.在DOS提示符下,键入命令debug [执行文件全名]〈CR〉(执行文件指“.exe”文件或“.com”文件)便可进入DEBUG。
若指定文件名,则将该文件调入DEBUG。
进入DEBUG后,出现“–”提示符,即可用DEBUG命令来调试程序。
二.DEBUG命令的规定:1.DEBUG命令中的所有字母大小写皆可;2.DEBUG命令中的数字都是十六进制的;3.DEBUG命令都是一个字母,后面有一个或多个参数;4.命令只有在按下回车键后才开始执行,任何一个命令都可以用CTRL+BREAK键来结束其执行,返回提示符“—”状态;5.命令和参数之间可以用定界符分隔,但只有在两个相邻的十六进制数之间的定界符才是必须的;6.在命令执行过程中,可以用CTRL+NUM LOCK键停止屏幕显示的卷动,以便于查看,按下任何其他键,继续卷动。
三.DEBUG的主要命令:1.显示∕改写寄存器内容命令R格式一:–r<CR> 功能:显示CPU内所有寄存器内容和标志位状态。
arm汇编语言编程实验报告实验二ARM汇编语言编程实验.doc班级计算机科学与技术(嵌入式)学号课程名称ARM体系结构姓名实验成绩日期指导教师冯灵霞实验报告院系信息工程学院一、实验目的1、掌握ADT IDEARM开发环境中基本的工程设置以及程序编译方法。
2、掌握ADT IDEARM开发环境中基本的程序调试方法。
3、掌握基本的ARM汇编语言编程方法。
二、实验内容用汇编语言编写一个程序实现如下目的:从源地址拷贝num个字(num*4个字节)的数据到目的地址dst中。
三、预备知识1、ARM汇编语言的基础知识。
2、程序调试的基础知识和方法。
四、实验设备1、硬件:JXARM9-2440教学实验箱、PC机。
2、软件:PC机操作系统Windows 98(2000、XP)+ADT IDE开发环境。
五、基础知识ADT IDE集成了GNU汇编器arm-elf-as、编译器arm-elf-gcc和链接器arm-elf-ld。
在ADT IDE中编写的程序必须符合GNU的语法规则。
下面介绍一些基本的GNU汇编知识以及本实验用到的ARM 汇编指令。
1、GUN汇编语言语法及规则1)_start_start为程序默认入口点,代码段默认起始地址为0x800,如果需要修改可以在链接脚本文件中指定。
2)标号语法:symbol:symbol为定义的符号。
说明:上述代码定义一个标号,它表示程序中当前的指令或数据地址。
如果在程序中出现两个相同的标号,汇编器将会产生一个警告,且只有第一个标号有效。
2、GNU汇编语言伪操作1).equ伪操作语法:.equ symbol,exprexpr为基于寄存器的地址值、程序中的标号、32位的地址常量或位的常量。
symbol为.equ伪操作为expr定义的字符名称。
说明:该操作符为数字常量、基于寄存器的值和程序中的标号定义一个字符名称,相当于C语言中的宏定义。
示例:.equ USERMODE,0x102).global伪操作符语法:.global symbolsymbol为声明的符号的名称。
第1篇实验名称:微机原理实验实验日期:2023年10月25日实验地点:计算机实验室实验教师:[教师姓名]实验学生:[学生姓名]班级:[班级名称]一、实验目的1. 理解微机原理的基本概念和组成结构。
2. 掌握微机硬件的基本操作和调试方法。
3. 熟悉汇编语言编程和程序调试技巧。
4. 通过实验加深对微机原理课程的理解,提高动手能力。
二、实验内容本次实验主要分为以下几个部分:1. 微机硬件系统结构认识:了解微机硬件系统的组成,包括CPU、内存、I/O接口等,熟悉各部件的功能和相互关系。
2. 汇编语言编程:学习汇编语言的基本语法和指令系统,编写简单的汇编程序,实现特定功能。
3. 程序调试:使用调试工具(如DEBUG)对汇编程序进行调试,查找并修正错误。
4. 微机原理实验:完成以下实验任务:1. 编写程序实现两个多位十进制数的相加。
2. 编写程序实现字符串比较功能。
3. 编写程序实现乘除法运算。
三、实验步骤1. 微机硬件系统结构认识:- 观察实验室中的微机硬件系统,了解各部件的连接方式和功能。
- 使用示波器检测实验装置的信号是否正常。
2. 汇编语言编程:- 学习汇编语言的基本语法和指令系统。
- 编写程序实现两个多位十进制数的相加,程序如下:```;加数DATA1 DB 3,4,5,6,7;被加数DATA2 DB 2,3,4,5,6;结果SUM DB 5 DUP(0);程序开始MOV CX, 5 ;循环次数MOV AL, 0 ;结果初始化为0MOV SI, OFFSET DATA1 ;加数地址MOV DI, OFFSET DATA2 ;被加数地址ADD_LOOP:ADD AL, [SI] ;加数加到AL寄存器ADC AL, [DI] ;进位加到AL寄存器MOV [DI], AL ;结果存回DI寄存器ADD SI, 1 ;加数地址加1ADD DI, 1 ;被加数地址加1LOOP ADD_LOOP ;循环;程序结束```- 编写程序实现字符串比较功能,程序如下:```;字符串1STRING1 DB 'Hello';字符串2STRING2 DB 'World';比较结果RESULT DB 0;程序开始MOV SI, OFFSET STRING1 ;字符串1地址MOV DI, OFFSET STRING2 ;字符串2地址CMP_LOOP:MOV AL, [SI] ;读取字符串1的当前字符CMP AL, [DI] ;与字符串2的当前字符比较 JNE NOT_EQUAL ;不相等则跳转到NOT_EQUAL INC SI ;字符串1地址加1INC DI ;字符串2地址加1LOOP CMP_LOOP ;循环MOV RESULT, 1 ;相等则将结果设置为1JMP END ;跳转到ENDNOT_EQUAL:MOV RESULT, 0 ;不相等则将结果设置为0END:;程序结束```- 编写程序实现乘除法运算,程序如下:```;被乘数DATA1 DB 10;乘数DATA2 DB 5;结果PRODUCT DB 0;程序开始MOV AL, [DATA1] ;被乘数加载到AL寄存器MUL [DATA2] ;乘数乘到AL寄存器MOV [PRODUCT], AL ;结果存回PRODUCT;程序结束```3. 程序调试:- 使用DEBUG工具对汇编程序进行调试,查找并修正错误。
信息与通信工程学院微机原理软件实验报告班级:姓名:学号:日期:2011年12月实验一DEBUG的使用 (1)一、实验目的 (1)二、实验内容 (1)三、预习思考 (3)四、实验过程 (4)五、实验总结 (9)实验二分支、循环程序设计 (10)一、实验目的 (10)二、实验内容 (10)三、预习思考 (10)四、实验过程 (10)(一)、流程图 (11)(二)、源代码 (11)(三)、实验分析 (11)五、实验总结 (14)实验三代码转换程序设计 (15)一、实验目的 (15)二、实验内容 (15)三、预习思考 (15)四、实验过程 (16)(一)流程图 (16)(二)模块层次图 (16)(三)源代码 (17)(四)实验分析 (21)五、实验总结 (22)实验四子程序设计 (23)一、实验目的 (23)二、实验内容 (23)三、预习思考 (23)四、实验过程 (24)(一)流程图 (24)(二)模块层次图 (25)(三)源代码 (25)(四)实验分析 (34)五、实验总结 (35)实验五中断程序设计 (37)一、实验目的 (37)二、实验内容 (37)三、预习思考 (37)四、实验过程 (38)(一)流程图 (38)(二)源代码 (39)(三)实验分析 (45)五、实验总结 (46)实验一 DEBUG 的使用一、实验目的1.掌握汇编程序的编辑、编译、连接和执行的全过程;2.学习和掌握用DEBUG调试程序的方法。
二、实验内容1.用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20B DB 15Y DB 3 DUP(0)Z DB 0,0DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DATSTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AL,AMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSUB1 ENDPCOD ENDSEND STAR2.通过编译,连接形成可执行文件。
汇编语言程序设计的实验环境及上机步骤一、实验环境汇编语言程序设计的实验环境如下:1.硬件环境微型计算机(Intel x86系列CPU)一台2.软件环境⏹Windows98/2000/XP操作系统⏹任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等)⏹汇编程序(MASM.EXE或TASM.EXE)⏹连接程序(LINK.EXE或TLINK.EXE)⏹调试程序(DEBUG.EXE或TD.EXE)文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用TD.EXE。
二、上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用TD.EXE)。
1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。
如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。
请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。
2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。
下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。
在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“ C:\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口,如图1所示。
图1 文本编辑器EDIT的编辑窗口窗口标题行显示了EDIT程序的完整路径名。
紧接着标题行下面的是菜单行,窗口最下面一行是提示行。
菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。
实验一 ADS集成开发环境及汇编语言指令实验1.1 实验目的1.熟悉ADS1.2 软件开发环境;2.理解ARM920T 汇编指令的用法,并能编写简单的汇编程序;3.理解常用的ARM伪指令和伪操作的功能和使用。
1.2 实验内容1.使用LDR 指令读取0x30003100 上的数据,将数据加1,若结果小于10,则使用STR 指令把结果写回原地址,若结果大于等于10,则把0 写回原地址。
2.使用ADS1.2 软件仿真,单步,全速运行程序,设置断点,打开寄存器窗口(ProcessorRegisters)监视R0,R1 的值,打开存储器观察窗口(Memory)监视0x30003100 上的值。
3.使用数据定义伪操作定义两个内存数据块,通过汇编指令将源数据块的内容复制到目的数据块,并对程序运行时相关寄存器、内存中的数据进行跟踪。
1.3 预备知识1.ARM 指令系统内容;2.ADS1.2 工程编辑和AXD 调试的内容。
1.4 实验设备硬件:PC 机一台。
软件:Windows XP系统,ADS1.2 集成开发环境。
1.5 实验步骤1.启动ADS1.2,使用ARM Executable Image 工程模板建立一个工程arm1.mcp。
2.建立汇编源文件arm1.s,编写实验程序(见1.6实验参考程序1),然后添加到工程中。
3.设置工程连接地址RO Base 为0x30000000,RW Base 为0x30003000,设置options 中的调试口地址Image entry point 为0x30000000。
设置方法:选择Edit->DebugRel Settings,打开下图所示的窗口:图1.1 DebugRel Settings窗口在左侧树形目录中选择“ARM Linker”,分别在右侧Output标签页和Option标签页中设置RO Base、RW Base和Image entry point。
..汇编语言源程序的运行过程一、概述二、具体操作过程1.编辑过程在计算机“附件”的“记事本”中,用word 编辑汇编语言源程序,比用编辑程序EDLIN 要方便得多。
因为使用后者,必须熟记它的各种命令及其功能。
使用前者的操作步骤如下:第一步:编辑并建立扩展名为ams 的文件开始→程序→附件→记事本→键入汇编语言源程序(也可用Ctrl+C 及Ctrl+V 拷贝已有程序)→文件→另存为→出现“另存为”窗口→在‘文件名:’处为该文件命名,并切记:将扩展名由.txt 改为.asm →在“另存为”窗口里的“我的电脑”中找到含有MASM.EXE 、LINK.EXE 以及DEBUG.EXE 这三个工具的文件夹(如,8086experi ),并双击之→该文件夹名便出现在“保存在:”处→保存(至此,该文件夹中将出现你所编辑的扩展名为asm 的汇编语言源程序。
此时的源程序以ASCII 码形式存盘,而非机器码)→关闭记事本。
注意:上述三个工具及用户程序必须在同一文件夹中。
此后,为显示,打印或修改该程序,双击该程序的图标即可。
第二步:在DOS 下运行EDLIN ,以便查找并排除源程序中可能存在的语法错误。
window 状态→开始→运行→打开:cmd ↙→确定→出现DOS 提示符:C:\……>→指定存有你的程序的文件夹所在盘(如D 盘)为当前盘 D: ↙→D:\>cd 文件夹名↙→在DOS 管理下键入源程序编辑程序 无语法错误的汇编语言调试过程D:\文件夹名>edlin 文件名.asm ↙End of input file* E ↙按结束编辑命令E 之前,生成了一个扩展名为$$$的文件;结束编辑状态之后,该文件的扩展名由$$$变为BAK 。
特别指出:即使不用EDLIN 进行编辑,也必须进行此步。
否则,若源程序中存在语法错误,下一步进行汇编后,不予提示,也不生成机器码文件,无法进行再下一步的连接,致使程序无法运行。
微机原理实验报告西安电⼦科技⼤学实验报告班级:1303018学号:130********姓名:李胜东地点: EII-312批次:第批时间: 2015.11-2015.12实验⼀汇编语⾔编程实现1.实验⽬的(1)掌握汇编语⾔的编程⽅法(2)掌握DOS功能调⽤的使⽤⽅法(3)掌握汇编语⾔程序的调试运⾏过程2.实验内容(1)将指定数据区的字符串数据以ASCII码形式显⽰在屏幕上,并通过DOS功能调⽤完成必要提⽰信息的显⽰。
(2)在屏幕上显⽰⾃⼰的学号姓名信息。
(3)循环从键盘读⼊字符并回显在屏幕上,然后显⽰出对应字符的ASCII码,直到输⼊”Q”或“q”时结束。
实验中使⽤的DOS功能调⽤: INT 21H3.实验步骤及原理(1)运⾏QTHPCI软件,根据实验内容编写程序,参考程序流程如下图所⽰。
(2)使⽤“项⽬”菜单中的“编译”或“编译连接”命令对实验程序进⾏编译、连接。
(3)“调试”菜单中的“进⾏调试”命令进⼊Debug调试,观察调试过程中数据传输指令执⾏后各寄存器及数据区的内容。
按F9连续运⾏。
(4)更改数据区的数据,考察程序的正确性。
4.实验源代码DATA SEGMENTNUMBER DB 'SNO:130********',0AH,'NAME:lishengdong',0DH,0AH,'$';0DH (回车))0AH(换⾏)24H($)结束MSG1 DB 0AH,0DH,'If you want to leave,please input: q or Q ',0AH,0DH,'$'MSG2 DB 0AH,0DH,0AH,0DH,'Input: $'RESULT DB 0AH,0DH,'ASCII is: $'SD DB ' 'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV SI,OFFSET DATAMOV CX,5A:MOV AL,DS:[SI]AND AL,0F0HCMP AL,0A0HJB A1ADD AL,07HA1:SHR AL,1SHR AL,1SHR AL,1SHR AL,1OR AL,30HMOV AH,02HMOV DL,ALINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB A2ADD AL,07HA2:OR AL,30HMOV AH,02HMOV DL,ALINT 21HINC SILOOP AMOV AX,DATAMOV DS,AXMOV DX,OFFSET NUMBERMOV AH,09HINT 21HMOV DX,OFFSET MSG1 MOV AH,09H INT 21HC1: MOV DX,OFFSET MSG2 MOV AH,09H INT 21HMOV AH,01HINT 21HCMP AL,'Q'JZ EXITCMP AL,'q'JZ EXITMOV SD,ALMOV DX,OFFSET RESULTMOV AH,09HINT 21HMOV SI,OFFSET SDMOV AL,DS:[SI]AND AL,0F0HMOV CL,4SHR AL,CLCMP AL,0AHJB C2ADD AL,07HC2: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,ALMOV AH,02HINT 21Hloop C1EXIT: MOV AX,4C00HINT 21HCODE ENDSEND START实验⼆数码转换实验1.实验⽬的(1)掌握不同进制数及编码相互转换的程序设计⽅法。
实验指导一.上机实验的一般步骤和要求: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。
在"开始"找到运行单击在运行中输入CMD输入CD空格\(反斜杠),(进入C盘根目录)输入F:(进入F盘)输入CD空格MASM(进入MASM文件夹)输入MASM空格0817.ASM(检查0817.ASM有无错误并生成.OBJ文件),直到没错输入LINK空格0817.OBJ(进行连接)输入0817.EXE运行汇编语言应用程序的开发一.汇编语言应用程序的开发过程开发一个可独立运行的汇编语言程序,主要包括以下基本步骤:1.用文本编辑软件编辑汇编语言源程序模块(SOURCE MODULES)。
一个完整的汇编语言源程序,可以是单模块结构格式,也可以是多模块结构格式。
无论采用哪一种结构格式,每一个模块都必须是一个可独立汇编的源程序文件(扩展名为.ASM)。
常用的文本编辑软件如EDIT,QEDIT,PE,或由其他高级语言(如TC,VC等)提供的编辑环境,都可以用来编辑汇编语言源程序。
2.调用宏汇编程序MASM对源程序的每一个模块进行汇编(包括对宏的处理),生成目标文件.OBJ。
在汇编过程中,MASM将对源程序模块进行语法检查,若有语法错误,则在汇编结束时,将错误信息显示出来。
这时程序设计者就得返回第二步,再调用编辑程序,并根据提示信息,对有语法错误的语句进行修改,然后再重新进行汇编,直到MASM未发现语法错误为止。
在汇编过程中,出了对每一个源程序模块文件都要生成对应的目标文件.OBJ外,还可以选择生成列表文件.LST和交叉引用文件.CRF,以提供调试时使用。
在汇编时产生的错误,通常称为语法错误。
注意:在汇编过程中不能发现程序的逻辑功能错误。
3.调试连接程序LINK,对一个或多个目标文件.OBJ进行连接,生成一个可执行文件.EXE。
这里所说的目标文件,有的可能是在汇编时产生的,有的可能是由某个库文件.LIB 提供的。
在连接过程中,还可以选择生成内存映像文件.MAP,以供在调试程序时使用。
在连接过程中,如果发现有错误,也会将错误信息显示在屏幕上。
汇编语言编程一. 实验目的1.学习用汇编语言编制程序;2.了解汇编语言程序与C 语言程序的区别和在设置上的不同。
3.学习在CCS 环境中调试汇编代码。
二. 实验设备1.PC 兼容机一台;2.CCS软件。
三. 实验原理汇编语言程序除了程序中必须使用汇编语句之外,其编译选项的设置与C 语言编制的程序也稍有不同。
其区别为:(1) 汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start”,而C 语言程序在执行时,先要调用C 标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序main()运行。
(2) 由于CCS 的代码链接器默认支持C 语言,在编制汇编语言程序时,需要设置链接参数,选择非自动初始化,注明汇编程序的入口地址。
四.实验步骤1.实验准备设置软件仿真模式。
2.建立新的工程文件(1)启动Code Composer Studio 2.21。
(2)建立TASM.pjt,保存路径:C:\ICETEK\VC5416AES61\VC5416AES61\Lab0103-ASM3.设置工程文件改变程序入口地址为start4.编辑输入源程序(1) 汇编语言程序新建源程序窗口,输入源程序:.global start ; 定义全局变量.mmregs.data.bss x,1 ; 开设全局变量(非初始化段).bss y,1 ; 每个变量占用一个字(16bit).bss z,1.textstart:stm #x,ar1 ; 取得变量x 的地址stm #y,ar2 ; 取得变量y 的地址stm #z,ar3 ; 取得变量z 的地址ST #1,*ar1 ; 变量赋初值x=1ST #2,*ar2 ; y=2LD *ar1,A ; 将变量x 的值装载到累加器Aadd *ar2,A ; 将y 的值加到累加器stl A,*ar3 ; 将累加器的值的低16 位存储到变量zxh:nopb xh ; 空循环.end注意:在输入汇编语言源程序时,除了标号以外的程序行必须以一个空格或退格字符开始。
实验一 汇编语言程序的调试与运行 一、实验目的 1.熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。 2.掌握数据在内存中的存放方式和内存操作数的寻址方式。 3.掌握汇编语言源程序的组成格式。 4.掌握8086/8088指令及伪指令的格式及用法。 5.掌握汇编语言源程序的编辑、调试及运行方法。
二、实验准备知识 1.DEBUG程序的启动 DEBUG是专门为汇编语言设计的一种汇编语言调试工具,它通过单步执行,设置断点连续执行等方式为汇编语言程序员提供了非常有效的调试手段。 在DOS提示符下,可输入命令: C>DEBUG [d:][path][文件名][ 参数1][参数2] 其中文件名是被调试文件的名称,它必须是执行文件(.EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“–”,此时,可键入所需的DEBUG命令。 在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。用户可以通过DEBUG的命令对指定文件进行修改,显示和执行。如果没有文件名,则是以当前内存的内容进行工作。 2.DEBUG的主要命令 1)汇编命令A 格式:– A [起始地址] 功能:该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。 2)反汇编命令U (1)格式1:– U [起始地址] 功能:该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。 (2)格式2:– U [起始地址 终止地址] 格式3:– U [起始地址 L 字节数] 功能:该命令对指定范围的内存单元进行反汇编。例如: 3)运行命令G 格式:– G [= 起始地址1][断定点地址2[断点地址3„„]] 功能:从指定地址开始执行程序。在设定的断点处程序暂停,并显示全部寄存器内容和下一条要执行的指令。 一般设置断点前最好用U命令查看一下指令开始的地址。断点数最多为10个。 如: – G=100 108 4)跟踪命令(单步执行)T 格式1:– T [=起始地址] 格式2:– T [=起始地址 指令条数] 功能:从指定地址开始执行程序,每次执行一条指令,然后显示各寄存器的内容和状态寄存器的内容,及以助记符形式表示的下一条指令。 如: – T=100 5)显示内存单元内容的命令D 格式1:– D [起始地址] 格式2:– D [起始地址 终止地址] 格式3:– D [起始地址 L 字节数] 功能:显示指定内存单元的内容。 6)修改内存单元内容的命令E (1)用给定的内容代替指定范围的单元内容 格式:– E 地址 内容表 例如:– E 2000:0100 F3 "XYZ" 8D 其中F3、"X"、"Y"、"Z"和8D各占一个字节,用这五个字节代替原内存单元2000:0100到0104的内容,"X"、"Y"、"Z"将分别存入其ASCII码值。 (2)逐个单元相继地修改 格式 :– E地址 例如:– E 100 系统显示如下: 18E4:0100 89. 78 此命令是将原100号单元的内容89改为78,78是用户输入的。 7)检查和修改寄存器内容的命令R (1)显示CPU内部所有寄存器内容和标志位状态 格式:– R R命令显示中标志寄存器中各标志位状态的含义如表1所示。 表1 标志寄存器标志位含义 标 志 名 置位(1) 复位(0) 溢出Overflow(是/否) OV NV
方向Direction(减量/增量) DN UP
中断Interrupt(允许/屏蔽) EI DI
符号Sign(负/正) NG PL
零Zero(是/否) ZR NZ
辅助进位Auxiliary Carry(是/否) AC NA
奇偶Parity(偶/奇) PE PO
进位Carry(是/否) CY NC
(2)显示和修改某个指定寄存器内容 格式: – R 寄存器名 例如输入:–R AX 如显示如下: AX 2000 : 则表示AX当前内容为2000H,此时若不对其作修改,可按ENTER键;否则,输入修改后内容,如输入: :3000 则AX内容由2000H改为3000H。 (3)显示和修改标志寄存器 格式:– R F 如系统将显示如下: OV DN EI NG ZR AC PE CY – 这时若不作修改可按ENTER键,否则在“–”号之后键入修改值,键入顺序任意。如: OV DN EI NG ZR AC PE CY – PO NZ DI NV 8)退出DEBUG命令Q 格式:– Q 功能:退出DEBUG程序,返回DOS。 3.汇编语言源程序的分段结构 (1)段的定义 1)段定义伪指令:数据段、堆栈段、代码段的定义 2)段的定位类型、组合类型、段的别名的说明 (2)段寄存器的装入 1)指定段寄存器与段之间的对应关系伪指令:ASSUME 2)将段地址装入指定段寄存器:MOV指令 4.8086/8088的指令系统 (1)常用指令:掌握其格式及用法 1)数据传送类指令 ①数据传送:MOV(数据传送) ②数据交换:XCHG(数据交换) ③入栈及出栈:PUSH(入栈)、POP(出栈) 2)算术运算类指令 ①加法运算:ADD(加法运算)、ADC(带进位加法运算)、 INC(加1运算) ②减法运算:SUB(减法运算)、SBB(带借位减法运算)、DEC(减1运算) ③比较运算:CMP(数据比较,设置标志寄存器) 3)逻辑运算类指令 ①逻辑运算:AND(逻辑与)、OR(逻辑或)、XOR(逻辑异或)、NOT(逻辑非)、TEST(测试) ②移位运算:SHL(逻辑左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR(循环右移)、RCL(带进位循环左移)、RCR(带进位循环右移) 4)程序控制类指令: ①无条件转移指令:JMP(无条件转移) ②条件转移指令: 判断是否相等转移:JZ/JE(等于零/相等转移)、JNZ/JNE(不等于零/不相等转移) 判断无符号数大小转移:JA/JNBE(高于/不低于等于转移)、JAE/JNB(高于等于/不低于转移)、JB/JNAE(低于/不高于等于转移)、JBE/JNA(低于等于/不高于转移) 判断有符号数大小转移:JG/JNLE(大于/不小于等于转移)、JGE/JNL(大于等于/不小于转移)、JL/JNGE(小于/不大于等于转移)、JLE/JNG(小于等于/不大于转移) ③循环控制指令 循环转移指令:LOOP(CX≠0循环) 条件循环转移指令:LOOPZ/LOOPE(CX≠0且ZF=1循环) LOOPNZ/LOOPNE(CX≠0且ZF=0循环) 5)串操作类指令 ①数据串传送:MOVSB(字节操作)、MOVSW(字操作) ②数据串比较:CMPSB(字节操作)、CMPSW(字操作) ③数据串搜索:SCASB(字节操作)、SCASW(字操作) ④数据串存取:STOSB(字节操作)、STOSW(字操作)、LODSB(字节操作)、LODSW(字操作) ⑤重复前缀:REP(CX≠0重复执行串指令) REPZ/REPE(CX≠0且ZF=1时重复执行串指令) REPNZ/REPNE(CX≠0且ZF=0时重复执行串指令) (2)常用伪指令:掌握其格式及用法 1)数据定义伪指令:DB、DW、DD等 2)表达式赋值伪指令:EQU、= 3)定位伪指令:ORG 5.8086/8088常用运算符 1)算术运算符:+、-、*、/、MOD 2)逻辑运算符:AND、OR、XOR、NOT——注意与逻辑运算指令的区别 3)关系运算符:EQ、NE、LT、LE、GT、GE 4)数据返回运算符:TYPE、LENGTH、SIZE、OFFSET、SEG 5)属性运算符:PTR
三、实验性质 本实验为设计性实验。 四、实验学时 本实验学时为2学时。 五、实验内容与步骤 1、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DATA2为首的5个内存单元中,结果送回DATA1处。 2、程序框图 两个多位十进制相加的程序流程图如图30所示。 图30 两个多位十进制相加程序流程图 3、实验步骤 1.编辑源程序,建立一个以后缀为 .ASM的文件. 2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。 3.连接目标程序,产生可执行程序。 4.DEBUG调试可执行程序,记录数据段的内容。 5.在操作系统状态下,运行程序,并将记录屏幕显示内容记录到表2中。 表2 屏幕显示记录 被加数 加数 屏幕显示内容 12732 06815 10732 43691 65087 17631
六、实验要求 1.实验前要做好充分准备,包括汇编程序清单,调试步骤,调试方法,以