当前位置:文档之家› 微机系统与汇编语言实验报告

微机系统与汇编语言实验报告

《微机系统与汇编语言实验报告》8086汇编语言实验项目一(数值筛选)1.实验目的:进一步熟悉8086指令系统,运用并掌握汇编语言程序设计基本方法,编制能满足题目要求的数据处理类小规模程序。

并通过使用EDIT、MASM、LINK等软件工具,熟悉汇编语言程序书写、输入、编译、连接生成可执行程序的全过程。

进一步提高汇编语言程序调试和结果查找的能力。

2.基本要求:应用8086汇编语言程序设计方法,编制一个程序,使它能对10个字节型有符号常数作如下处理:1.在这10个常数中筛选出所有奇数,并存放到ODD开始的内存单元中;2.在这10个常数中筛选出所有偶数,并存放到EVE开始的内存单元中;3.对所筛选出的奇数、偶数分别求和,求和结果分别存放到每组数的结尾。

掌握用EDIT输入和保存8086汇编语言源程序、用MASM编译、用LINK连接生成可执行程序(EXE文件),并采用DEBUG调试运行自编程序,观察并记录程序运行的结果。

3.实验原理与方法:1.实验原理本实验项目需要运用8086汇编语言程序设计方法,而不是单纯地用DEBUG输入汇编语言指令来解决问题。

为了满足本实验的基本要求,程序中需要用到8086伪指令来定义数据区,用定义地址标识符伪指令来定义三个内存变量ORITAB、ODD、EVE,其长度都为10个字节。

这就建立了原始数据存储区、奇数结果存储区和偶数结果存储区。

在操作三个存储区前,通过“OFFSET<变量名>”运算,就能获取这三个存储区的首地址。

设置两个地址指针SI、DI,一个指向EVE存储区单元地址,另一个指向ODD存储区单元地址。

当找到符合偶数条件的数据时,就用SI在传送指令中对目的操作数形成“寄存器间接寻址方式”,把偶数传送到SI所指向的单元;当找到符合奇数条件的数据时,就用DI 在传送指令中对目的操作数形成“寄存器间接寻址方式”,把奇数传送到DI所指向的单元。

设置两个求和寄存器DH、DL,当找到奇数时,把它加到DH求和;当找到偶数时,把它加到DL求和。

为了在10个原始数据中筛选出2种数据(奇数、偶数),需要对10个原始数据进行扫描,即,设置一个循环LOOP来对10个原始数据逐一分析。

用TEST指令来测试每个原始数据的最低位,可分析出该数据的奇偶性。

4.实验操作题目:1.根据上述程序设计思路,本实验(数值筛选)的源程序清单详见如下:;《DA TA-CHOOSE》DA TA SEGMENTORITAB DB 33,22,11,-12,42,81,-17,54,-70,3,’$’;定义数据段ODD DB 10 DUP(?) ;操作数存入重复10次,每个操作数占用一个字节DB ‘$’;引用偏移量计数器的值EVE DB 10 DUP(?)DB ‘$’DA TA ENDSSTACK SEGMENT PARA STACK'STACK' ;指定堆栈段STACK ENDSCODE SEGMENTSTART PROC FAR ;过程定义语句,“FAR”程序段间调用,”NEAR”段内调用ASSUME CS:CODE,DS:DA TA,ES:DA TA,SS:STACK ;段属性说明,对应关系PUSH DSMOV AX,0PUSH AXMOV AX,DA TAMOV DS,AX ;DS指向数据段XOR DX,DXMOV DI,OFFSET ODD ;DI作为ODD缓冲区地址指针MOV SI,OFFSET EVE ;SI作为EVE缓冲区地址指针MOV BX,OFFSET ORITAB ;BX作为ORITAB缓冲区地址指针MOV CX,10LOP: MOV AL,[BX]TEST AL,01 ;将两个操作数进行逻辑与操作,并修改标志位JZ EVEP ;ZF=1则跳转ODDP: MOV [DI],AL ;循环入口INC DI ;地址指针推向下个缓冲区地址ADD DH,AL ;将AL和DH操作数相加,结果送到DH操作数中JMP NEXT ;当前字符处理完毕后继续运行程序段EVEP: MOV [SI],AL ;循环入口INC SIADD DL,AL ;将AL和DL操作数相加,结果送到DL操作数中NEXT: INC BXLOOP LOP ;循环移位到LOP入口MOV [DI],DHMOV [SI],DLRETSTART ENDPCODE ENDS ;程序段结束END START ;源程序段结束2.实验操作步骤(1)从WINDOWS系统进入DOS环境:计算机启动后,单击“开始”按钮,选择“运行…”菜单项,在运行文本输入框中键入CMD[回车]。

系统打开V86命令窗口,并到达“C:\Documents and settings\…>”后,首先输入“CD \[回车]”,然后再输入一条“PATH C:\WINNT\SYSTEM32;C:\MASM5[回车]”路径搜索命令,为后续将要输入的各种DOS命令及编译连接命令作好准备。

本实验中,具体为,进入指定盘,指定目录,找到原始文件,操作命令行显示如下。

(2)用EDIT输入本实验的源程序并保存:在DOS系统提示符“C:\>”下键入:EDIT DAT-CHOS.ASM[回车]。

然后,仔细看清程序清单,逐条输入该程序的指令。

输入完毕后,按[ALT]键,进入“FILE”菜单,选择“SAVE” [回车],再选择“EXIT”[回车]。

EDIT输入程序窗口,显示如下。

(3)编译源程序:在DOS系统提示符下键入:MASM DAT-CHOS.ASM ,,,,;[回车],编译源程序。

编译原程序,检查有无语法错误,显示如下。

(0警告,0语法错误)(4)连接并生成可执行程序:在DOS系统提示符下键入:LINK DAT-CHOS.OBJ ,,,,;[回车],在指定目录生成“DAT-CHOS.EXE”文件。

连接并生成可执行程序完毕,显示如下。

(5)调试运行可执行程序:在DOS系统提示符下键入:DEBUG DAT-CHOS.EXE[回车],这样就带着可执行程序“DAT-CHOS.EXE”进入了DEBUG环境,用合适的DEBUG子命令就能调试运行本实验程序了。

进入debug环境,显示如下。

用“R”子命令查看当前各寄存器的值,观察CS、IP的值。

显示如下。

用“U <CS的值:IP的值>[回车]”子命令可找到程序的第1条指令,及其后续的程序段落。

仔细观察现在的可执行程序指令序列,与源程序清单核对。

显示如下。

尤其要仔细观察程序首部的“MOV DS,AX”指令,及其前一条指令“MOV AX,XXXX”,这“XXXX”值,就是对DS的赋值,即本程序的数据段段基址。

由“XXXX”值可找到原始数据和结果数据存储区,用“D XXXX:0000[回车]”子命令可查看原始数据。

记录本程序执行前数据区中各单元的数据情况。

数据区中原始数据显示如下。

然后,可以通过使用“G=0[回车]”子命令或“T=0[回车]”子命令来运行程序。

运行程序,显示如下。

再次利用程序首部的“MOV DS,AX”指令,及其前一条指令“MOV AX,XXXX”,由其中的数据段段基址“XXXX”值可找到原始数据和结果数据存储区,用“D XXXX:0000[回车]”子命令可查看结果数据。

记录本程序执行后数据区中各单元的数据情况。

结果数据,显示如下。

(6)备注:1.使用命令,退出debug环境。

2.使用命令,退出dos环境。

3.在dos属性栏内,更改dos环境的显示色彩,包括文字。

4.使用命令,进入指定目录。

实验体会:1.如果在实验中,程序运行结束之后,结果数据与预期的处理结果不符,则说明原程序仍然存在逻辑错误,则要重新修改源程序,…。

必要时还需重新审核程序的设计思想,重新编程及调试等各步操作,直到程序运行出正确的结果数据为止。

2.通过实际运行,证明该程序无语法错误。

3.通过原始数据和结果数据比对,证明结果数据为实验所预期的处理结果,由此证明,此程序可以得到实验所需的,正确的结果数据。

8086汇编语言实验项目二(求最大最小数)1.实验目的:进一步熟悉8086指令系统,掌握并熟悉汇编语言程序设计方法,编制能满足题目要求的数据处理类程序。

通过使用EDIT、MASM、LINK等软件工具,熟练掌握汇编语言程序书写、输入、编译、连接生成可执行程序的全过程。

进一步提高汇编语言程序调试和结果查找的能力。

2.基本要求:应用8086汇编语言程序设计方法,编制一个程序,使它能在10个字节型有符号常数中找出最大数存放到MAX内存单元中、找出最小数存放到MIN内存单元中,并对这10个常数求和存放到SUM内存单元中、求平均值存放到AVE内存单元中。

掌握用EDIT输入和保存8086汇编语言源程序、用MASM编译、用LINK连接生成可执行程序(EXE文件),并采用DEBUG调试运行自编程序,观察并记录程序运行的结果。

3.实验原理与方法:1.实验原理本实验项目需要运用8086汇编语言程序设计方法,而不是单纯地用DEBUG输入汇编语言指令来解决问题。

为了满足本实验的基本要求,程序中需要用到8086伪指令来定义数据区,用定义地址标识符伪指令DB或DW来定义存放原始数据和结果数据的内存变量:ORITAB、MAX、MIN、SUM、AVE,通过“OFFSET<变量名>”运算,就能获取这些变量的首地址。

设置一个地址指针SI,用它指向ORITAB变量的首字节地址。

其他变量的变量名(MAX、MIN、SUM、AVE)将在传送结果的指令中以“直接寻址方式”出现在目的操作数位置上,指向该存储器单元。

需要选用三个8位寄存器DH、DL、AL来存放最大数、最小数、及求和计算值。

至于AVE 的值,可用SUN/10算出后直接送到AVE变量中,不需要选用寄存器与它对应。

需要设置一个循环LOOP来对10个原始数据进行扫描,逐一比较分析,找出原始数据中最大数和最小数。

在扫描每一个原始数据时,就将它加到AL寄存器中,实现求和处理。

当扫描结束,退出循环后,先将求和值AL送到SUM变量中保存,然后再把SUM/10送入AVE变量。

其他结果也送入对应的变量,完成本实验的数据计算处理。

4.实验操作题目:1.根据上述程序设计思路,本实验的源程序清单详见如下:;《MAX-MIN》DA TA SEGMENTORITAB DB 20H,10H,30H,01H,04H,08H,00H,05H,44H,22HMAX DB ?MIN DB ?SUM DB ?A VE DB ?DA TA ENDSSTACK SEGMENT PARA STACK'STACK'STACK ENDSCODE SEGMENTSTART PROC FARASSUME CS:CODE,DS:DA TA,ES:DA TA,SS:STACKPUSH DSMOV AX,0PUSH AXMOV AX,DA TAMOV DS,AXXOR DX,DXXOR AX,AXMOV SI,OFFSET ORITABMOV CX,10LOP: CMP DH,[SI]JA DHBIGMOV DH,[SI]DHBIG: CMP DL,[SI]JB DHSMLMOV DL,[SI]DLSML: ADD AL,[SI]INC SILOOP LOPMOV MAX,DHMOV MIN,DLMOV SUM,ALMOV BL,10DIV BLMOV A VE,ALRETSTART ENDPCODE ENDSEND START2.实验操作步骤(1)从WINDOWS系统进入DOS环境:计算机启动后,单击“开始”按钮,选择“运行…”菜单项,在运行文本输入框中键入CMD[回车]。

相关主题