当前位置:文档之家› 微机原理实验2015

微机原理实验2015

微机原理实验内容2015实验一上机方法及寻址方式练习一.实验目的1.学习汇编语言上机方法。

2.深入了解DEBUG动态调试软件的应用,掌握下列命令的使用方法:U 反汇编G 运行程序D 显示内存内容R 显示╱修改寄存器内容E 修改内存内容 T 单步执行命令Q 返回DOS3.实际感受段地址,偏移地址,存储器组织及CPU寄存器等概念。

4.掌握8086/8088的主要寻址方式。

二.实验任务一双字相加把内存字单元DATA1和DATA2中的两个数相加(例如123456H+456789H),结果存入SUM单元。

此程序的功能很简单,目的是为了通过该例掌握上机过程和实验方法。

首先,对书写好的源程序进行编辑,汇编及连接,生成可执行的EXE文件。

然后对EXE文件进行动态调试,排除错误,最终形成一个完全正确的程序。

1.建立源程序 .ASM为了使大家对标准汇编语言程序结构有一个了解,并牢固掌握DEBUG调试程序的应用。

在这里给出上面实验任务的程序清单。

程序1是一个标准的汇编语言程序,共有三个段:数据段、堆栈段及代码段,在以后的编程中可以仿照这一结构。

程序1:双字相加DATA SEGMENT ;define data segmentDATA1 DW 1234HDATA2 DW 5678HSUM DW ?DATA ENDSSTACK SEGMENT PARA STACK ‘STACK’;define stack segmentDW 100 DUP (?)TOP LABEL WORDSTACK ENDSCODE SEGMENT ;define code segmentASSUME CS: CODE,DS:DATA,SS:STACKSTART:MOV AX, DATA ;set DS register to current data segmentMOV DS, AXMOV AX, STACK ;set up stack SS and SP registMOV SS, AXMOV SP, OFFSET TOPMOV AX, DATA1ADD AX, DATA2MOV SUM, AXMOV AH,4CH ;return to DOSINT 21HCODE ENDS ;end of code segmentEND START ;end assembly2.汇编生成 .OBJ 文件对.ASM文件进行汇编,生成目标文件 .OBJ。

汇编结束时会显示警告错误的个数(Warning Errors)和严重错误的个数(Severe Errors),这两种错误属于.ASM文件中的语法性错误。

若出现错误应对源文件(.ASM文件)进行修改,修改之后再进行汇编直至错误数为零时方可进行下一步操作。

3.连接生成 .EXE文件连接后生成 .EXE可执行文件。

4. 利用DEBUG命令对 .EXE文件进行调试DEBUG是DOS提供的一种调试软件。

它可用于检查修改存储单元的内容,装载及运行用户程序。

进入DEBUG后其状态提示符为一短横线“―”,在此状态下可用各种命令对 .EXE进行操作。

下面是DEBUG的主要命令。

(1)对 .EXE文件进行反汇编—U命令U命令格式一:―U CS:0000↙1501: 0000 B8F314 MOV AX, 14F3.....上述命令从CS段,偏移地址为0000的单元开始反汇编32个字节。

在以上的反汇编清单中,最左一列是代码段的段地址值,第二列是各指令的偏移地址值(指令的起始地址),然后依次是指令的机器码与助记符。

U命令格式二:―U↙在32个字节的指令代码反汇编完之后,可再次使用U命令对后续代码进行反汇编,在此,U命令之后省略了地址,则从上一个U命令的最后一条指令的下一个字节开始反汇编32个字节。

可反复使用上述两种U命令格式,将原程序清单与反汇编清单进行对比分析,然后回答下列问题:问题1: .EXE装入内存后,其数据段的段地址是。

在未运行 .EXE程序前,数据段的段地址是否已装入到DS寄存器中?(请选择回答:是/否)。

问题2:反汇编清单中倒数第一行(按实际显示行计算)是不是.EXE程序中的有效指令?(请选择:是/不是)。

(2) 检查RAM区中的数据—D命令D命令格式:―D 数据段段地址:偏移地址(0000)D命令从给定地址开始连续显示内存单元中的数据,每行显示16个字节,每行的显示格式为段地址:偏移地址 16个字节数据及各字节数据所对应的ASCII码字符。

若D命令中没有给出地址,则从上一个D命令所显示的最后一个字节的下一个字节开始显示。

合理使用U命令和D命令,分析所显示的信息并填写表1-1。

(3)运行程序—G命令G命令格式:―G = CS:0000 断点地址↙CPU从CS段,0000单元开始连续执行指令,当遇到断点时便会停止执行。

用G 命令执行完程序后再使用D 命令显示内存单元的内容,填写表1-2中各项数据和运行结果,并分析结果是否正确。

(4)检查寄存器内容—R命令―RR命令会显示/修改CPU 所有寄存器的内容,并给出程序执行后各标志位的当前状态。

在此,不再列出执行情况。

请用R命令显示CPU 寄存器的内容,填写表1-3。

(5) 修改内存单元内容—E命令①不连续修改内存单元内容,命令格式如下:―E 1500:0000↙设显示1500H:0000H单元内容为:1500:0000 24. ―如果需要修改该单元内容可以由键盘输入数据,按空格则显示/修改下一单元的内容。

例如:把1500H:0000H单元的24H内容修改成(注意,在DEBUG中显示的地址码﹑数据均默认为十六进制形式)78H,其操作如下:1500:0000 24. 78 36.―其中36H为1500H:0001H单元的内容。

用户可以不断修改相继单元的内容,若某一字节无需修改可用空格键跳过,直到用回车结束该命令为止。

②修改连续单元的内容。

命令格式为:―E 1500:0000 12 34 ‘123’该命令将12H、 34H、 31H(‘1’的ASCII码)32H、 33H 存放到从1500:0000开始的连续单元中去。

现在要求用E命令按表1-4中给出的数据修改DATA1和DATA2单元的内容,然后用 G命令运行程序,填写表1-4。

(6)单步执行命令—T命令使用T命令之前,先使用G命令执行程序,使程序暂停在断点处,然后可以使用T命令单步执行指令,其命令格式为:―T ↙其功能是从当前的CS:IP 处执行一条指令后暂停,自动显示各寄存器的内容、标志位的状态并给出下一次将要执行的指令地址及代码。

注意,对REI指令、中断指令、DOS功能调用指令等不能用T命令单步执行。

请用T命令单步执行程序,一次执行一条指令,注意观察各寄存器如AX、IP等的变化情况。

(7)退出 DEBUG—Q命令―Q↙Q 命令后退出DEBUG,返回DOS。

三.实验任务二: 寻址方式练习下列程序用于练习8086/8088的立即寻址﹑寄存器寻址﹑直接寻址﹑寄存器间接寻址﹑寄存器相对寻址等七种寻址方式,为了方便调试程序,程序清单的代码段中给出了指令的行号,输入程序时请不要输入行号。

程序清单如下:DATA1 SEGMENTM1 D B 0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7HM2 DB 0A8H,0A9HDATA1 ENDSDATA2 SEGMENTN1 D B 0B0H,0B1H,0B2H,0B3H, 0B4H,0B5H,0B6H,0B7HN2 D B 0B8H,0B9HDATA2 ENDSSTACK SEGMENT PARA STACK ‘STACK’DB 0C0H,0C1H,0C2H,0C3H,0C4H,0C5H ,0C6H,0C7HDB 0C8H,0C9HDW 100 DUP (?)TOP LABEL WORDSTACK ENDSCODE SEGMENTASSUME CS: CODE,DS:DATA1,ES:DATA2,SS:STACK1 START:MOV AX,DATA12 MOV DS,AX3 MOV AX,DATA24 MOV ES,AX5 MOV AX,STACK6 MOV SS,AX7 MOV SP,OFFSET TOP8 MOV SI,0001H9 MOV DI,0002H10 MOV BP,0003H11 MOV BX,0004H12 MOV AL,10013 MOV AL,BL14 MOV AL,M115 MOV AL,[BX]16 MOV AL,ES:[BX]17 MOV AL,[BP]18 MOV AL,[BX+05H]19 MOV AL,M1[BX]20 MOV AL,ES:N1[BX]21 MOV AL,[BX][SI]22 MOV AL,M1[BX][SI]23 MOV AL,N1[BX][DI]24 MOV AL,[BP][DI]25 MOV AH,4CH26 INT 21HCODE ENDSEND START1.建立源程序,然后汇编、连接生成目标文件。

2.合理使用DEBUG的U命令和D命令,检查RAM区中的数据,分析所显示的信息并填写表1-5。

3. 利用U命令对 .EXE文件进行反汇编, 分析反汇编清单,从第12条指令开始把每条指令的偏移地址填入表1-6的“指令的偏移地址”一栏中。

4.利用T命令从第12条指令开始单步执行程序,每执行一条指令填写表1-6中对应行的其它栏(“SRC 寻址方式”、“SRC的地址”、及“AL之值”)。

实验数据记录页实验一上机方法及寻址方式练习姓名:学号:实验室门牌号:实验桌号:表1-5 各段的数据分配情况表1-6 指令地址及执行情况实验二串处理程序设计一.实验目的1.进一步使用DEBUG的调试命令,达到熟练掌握的目的。

2.学习串处理程序的设计方法,牢固掌握串操作指令及其用法。

3.学习DOS功能调用方法。

二.实验任务一字符串传送编写程序,建立数据段DATA,将你的姓名(汉语拼音)及学号存入数据段的BUFFER1区域,然后利用程序将BUFFER1区域中的字符串(姓名及学号)依次传送到从BUFFER2开始的内存区域中去。

1. 编程提示数据段可以定义为两个段:源数据区定义为数据段,目的数据区定义为附加段。

DATA SEGMENTBUFFER1 DB ‘WANG HUAN 01982001’M EQU $-BUFFER1DATA ENDSEXTRA SEGMENTBUFFER2 DB M DUP (?)EXTRA ENDS串的传送可用MOVSB指令来实现,注意,MOVSB要求DS与SI寄存器配合使用,ES与DI配合使用。

另外,用CX中的计数值可控制MOVSB指令的重复次数。

指令格式为: REP MOVSB2.实验要求及问题(1)编写程序,在DEBUG下运行并观察结果,填写表2-1。

相关主题