微机原理课程设计---编程计算2数组的代数和
- 格式:doc
- 大小:48.00 KB
- 文档页数:3
微机原理实验5 一位带符号数加法的汇编语言程序设计班级学号姓名实验时间:年月日实验成绩:1.实验目的从键盘上输入两个数(数的大小在±9之间),然后在屏幕上显示两数之和(结果在±18之间)。
完成创建源程序文件,汇编,连接,运行,实验结果显示。
2.实验原理3.实验仪器设备4.实验过程5.实验结果DSEG SEGMENTs1 db ' please input the first number ','$'s2 db 10,13, ' please input the second number ','$'s3 db 10, 13, ' the sum is ','$'s4 db 10, 13, ' there are input errors!!!!! ','$'d1 db ?d2 db ?d3 db ' ','$'DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEGMAIN PROC FARmov ax, dsegmov ds, axmov bl,0mov cl,0mov ah,9hlea dx,s1int 21h ;显示字符串1 mov ah,1int 21hcmp al,2dhjnz m1mov bl,1mov ah,1int 21hm1: mov [d1],al ;读入第一个数mov ah,9hlea dx,s2int 21h ;显示字符串2mov ah,1int 21hcmp al,2dhjnz m2mov cl,1mov ah,1int 21hm2: mov [d2],al ;读入第二个数call subpmov al,[d1]call subpcmp cl,bljnz btfhmov al,[d2]add al,[d1]sub al,30hcmp al,39hjna mmadd al ,6mov [d3+1],31hsub al,10hmm: mov [d3+2],alcmp bl,1jz fhjmp zhhbtfh: mov al,[d1]cmp al,[d2]jna mksub al,[d2]add al,30hmov [d3+1],alcmp bl,1jz fhjmp zhhmk: mov al,[d2]sub al,[d1]add al,30hmov [d3+1],alcmp cl,1jz fhjmp zhhfh:mov [d3],2dh zhh: mov ah,9hlea dx,s3int 21h ;显示字符串3mov ah,9hlea dx,d3int 21hmov ah,1 ;以下退出int 21hmov ax,4c00hint 21hMAIN ENDPsubp proccmp al,30hjb k1cmp al,39hja k1jmp m9k1: mov ah,9hlea dx,s4int 21hm9: retsubp endpCSEG ENDSEND MAIN(注:文档可能无法思考全面,请浏览后下载,供参考。
《微机原理与接口技术》实习教学大纲一、课程基本信息开课单位:电气与信息工程学院课程编号:课程名称:微机原理与接口技术英文名称:Microcomputer Principle & Interfacing Technique学分:2学分二、课程的性质与教学目标(一)课程性质:本课程是高等院校计算机科学与技术及计算机相关专业的一门专业技术基础课程,是在《微机原理与接口技术》理论课程结束后的一次大型实践性教学环节。
(二)教学目标:本课程以相应课程的理论知识和课程实验为基础,学生通过课程设计,应初步学会利用微机和接口芯片设计应用系统的基本方法;初步掌握微机应用系统中硬件电路的设计方法;掌握利用汇编语言设计和编写应用程序的方法;提高调试综合应用程序的能力。
通过理论设计和实践操作巩固和加深对理论知识的理解,增强设计微机应用系统和调试应用软件的能力,提高学生的工程素质。
三、教学内容、时间安排及教学要求(一)实习内容及要求1、实习内容(16学时)可在以下5个课题中任选其一:课题1:数据采集系统课题2:异步通信系统课题3:电机调速系统课题4:计时器课题5:计算器(1)要求课程设计完成后,学生应交课程设计报告一份。
(2)内容课题1:数据采集系统数据采集系统有两个子课题,根据实验安排完成其中一个:1)用LED显示输出的数据采集系统;2)用打印机输出的数据采集系统。
理论设计要求:①以8088/86及其支持电路为基础,配必要的存储器、中断、定时系统、感测接口、LED显示器或打印机接口等构成数据采集系统;②系统可控制8路采集,采集信号的最高频率为10Hz;③采集数据存储在内存区,要求能连续保存10分钟的各路数据;④在LED显示器上顺序输出各路采集数据,输出内容包括采集路号以及对应的实时数据;若使用打印机输出,可在10分钟后批量打印采集的数据;⑤方案设计中要突出数据采集分系统和输出接口的设计,进行多种速率、多路采集控制等方面的分析,为硬件设计和软件编程提供依据;⑥硬件设计要求画出功能框图和逻辑原理图;编程要有程序框图和流程图。
微机原理及应用课程设计指导书《微机原理及应用》课程设计指导书一、课程设计的目的和作用课程设计是培养和锻炼学生在学习完《微机原理及应用》后综合应用所学理论知识解决实际工程设计和应用问题的能力、进行工程实训的重要教学环节,它具有动手、动脑,理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。
《微机原理及应用》是一门应用性、综合性、实践性较强的课程,没有实际的有针对性设计环节,学生就不能很好的理解和掌握所学的技术知识,更缺乏解决实际问题的能力。
所以通过有针对性的课程设计,使学生学会系统地综合运用所学的技术理论知识,提高学生在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。
本课程设计是配合课堂教学的一个重要的实践教学环节,不仅要培养学生的实际动手能力,检验学生对本课程学习的情况,更要培养学生在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。
培养学生事实求是和严肃认真的工作态度。
通过设计过程,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。
让学生独立或集体讨论设计题目的系统方案论证设计、编程、软件硬件调试、查阅资料、绘图、编写说明书等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
二、课程设计内容与要求要求每个学生(或小组)都要自己动手独立设计完成一个典型的微机应用小系统.。
设计题目可以在给出的参考题目中选,也可以自己选设计题目,但难度不应小于参考题目,需经指导教师审查后方可确定是否采纳或修改设计题目。
微机原理教学大纲一、课程背景和目标1.1 课程背景微机原理作为计算机相关专业的必修课程,是学习计算机体系结构和计算机组成原理的基础。
通过学习微机原理,学生可以深入理解计算机的底层原理和运行机制,为后续的课程和实践提供坚实的基础。
1.2 课程目标本课程旨在使学生达到以下目标:- 理解计算机系统的组成与结构- 掌握微处理器及其相关器件的工作原理- 理解汇编语言的基本概念和编写方法- 能够独立完成简单的微机系统设计与实现- 发展问题解决和分析能力,培养创新思维和动手实践能力二、课程内容2.1 计算机系统概述- 计算机的基本组成和工作原理- 计算机的发展历程和分类2.2 软硬件概述- 计算机硬件的分类和功能- 计算机软件的分类和基本概念2.3 计算机的层次结构- 指令系统和指令的执行过程- 存储器层次结构和访问方法- 输入输出系统和设备控制2.4 微处理器组成与工作原理- 微处理器的基本功能和结构- 控制器和ALU的作用与实现- 数据通路和指令执行过程2.5 汇编语言基础- 汇编语言的基本概念和特点- 汇编语言的指令格式及寻址方式- 汇编语言程序的设计和调试2.6 总线与存储器- 总线的分类和基本特性- 存储器的种类和特点- 存储器的组织和寻址方法2.7 输入输出系统- 输入输出设备的分类和接口技术- 输入输出控制和数据传输方式- 中断和DMA的原理和应用三、教学方法与评估方式3.1 教学方法- 理论教学结合实践教学,注重理论与实际应用的结合- 通过案例分析和实验操作加深学生对知识的理解和掌握- 鼓励学生参与讨论,提高问题解决和分析能力3.2 评估方式- 平时成绩:包括课堂出勤、课堂表现和作业完成情况- 实验报告及实验成绩:要求学生独立完成实验并撰写实验报告- 期末考试:综合考核学生对课程内容的理解和应用能力四、教材及参考书目教材:- 《微机原理与接口技术导论》高晓阳等著,机械工业出版社参考书目:- 《计算机组成与设计:硬件与接口》 David A. Patterson等著,电子工业出版社- 《深入理解计算机系统》 Randal E. Bryant等著,电子工业出版社五、教学进度安排本课程按照以下进度安排进行授课:- 第一周:计算机系统概述- 第二周:软硬件概述- 第三周:计算机的层次结构- 第四周:微处理器组成与工作原理- 第五周:汇编语言基础- 第六周:总线与存储器- 第七周:输入输出系统六、课程总结微机原理课程的学习对于计算机专业的学生来说是非常重要的。
深圳大学实验报告课程名称: _________ 微机原理及应用实验实验项目名称:数据传送及两个多位十进制数相加学院_________________________________专业__________________________________________________指导教师: __________________________________________________报告人:_学号:班级: ________________实验时间: ________________________________________实验报告提交时间: ___________________________________________教务处制、实验名称:数据传送及两个多位十进制数相加二、实验目的(1)学习数据传送和算术运算指令的用法。
(2)熟悉在PC机上建立、汇编、链接、调试和运行 8088汇编语言程序的过程。
三、实验内容将两个多位十进制数相加。
要求被加数均以ASCII码形式各自顺序存放在以DATAI和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。
四、实验电路及连线(硬件实验)此实验属于软件实验,故无硬件实验的电路及连线。
五、程序说明(预习)包括程序功能,程序框图,算法说明及所用到的寄存器等。
功能:将被加数和加数分别显示,接着运行加法运算,然后将结果显示出来。
算法说明:①定义数据段:定义被加数和加数,且要使其用ASCII码以十六进制之间的转换;②定义堆栈段,并给SP_TO单元赋初值0;③定义代码段,并将源代码放在里面首先,编写主程序;接着,编写显示、回车换行和加法运算的子程序。
④程序结束。
所用到的寄存:AX SS、CS、DS ES、SI、SP、DI六、源程序清单(预习);DATAS SEGMENT ; DATA1 DB 33H,32H,38H,34H,37H DATA2 DB 34H,35H,39H,37H,31H DATAS ENDS数据段;定义DATA1为被加数;定义DATA2为加数STACKS SEGMENT ; 堆栈段STA DB 64 DUP(O) ; 为STA预留64个字节的存储空间SP_TOP DB 0 ; 定义SP_TO单元的数值为0 STACKS ENDSCODES SEGMENT ; 代码段ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX ; 设置数据段MOV AX,STACKSMOV SS,AX ; 设置堆栈段LEA SP,SP_TOP ; 设置栈顶指针MOV SI,OFFSET DATA1 ; 把DATA1偏移量地址赋予SIMOV BX,05CALL DISPL ; 显示被加数CALLCRLF ; 回车、换行MOV SI,OFFSET DATA2 ; 把DATA2偏移量地址赋予SIMOV BX,05CALL DISPL ; 显示加数CALLCRLF ; 回车、换行MOV DI,OFFSET DATA1 ; 把DATA1偏移量地址赋予DICALL ADDA ; 调用ADDAF程序,实行加法运算MOV BX,05CALL DISPL ; 显示结果CALLCRLF ; 回车、换行MOV AX,4C00H ;INT 21H ; 调用DOS21H功能,返回CRLF PROC NEAR ; 回车、显示功能过程定义,属性为 NEAR MOV DL,0DH ; 把回车的ASCII码0DH传给DLMOV AH,02H ; 送DOS的中断调用功能号INT 21H ; DOS 的中断调用MOV DL,0AH ; 把换行的ASCII码0AH传给DLMOV AH,02H ;INT 21H ; DOSRET ; CRLF ENDP ;送DOS的中断调用功能号的中断调用返回完成过程定义DISPL PROC NEAR DSL: MOV AH,02 ;MOV DL,[SI+BX-1];INT 21H ; DOSDEC BX ;BXJNZ DSL ;RET ; DISPL ENDP ; 显示功能过程定义,属性为NEAR 送显示功能号显示字符串中一字符的中断调用减1,修改偏移量如果BX未减到零,跳到DSL执行指令返回完成显示功能子程序定义ADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05实行加法运算子程序过程定义,属性为TRAN_HEX: SUB BYTE PTR[SI+BX-1],30H ;把 ASCII 码数转化为十六进制SUB BYTE PTR[DI+BX-1],30HDEC BX ;BXJNZ TRAN_HEXMOV SI,DXMOV DI,BPMOV CX,05 ;CLC ;THE_ADD: MOV AL,[SI]MOV BL,[DI]ADC AL,BL ;AAA ;MOV [SI],AL ;INC SI ;SIINC DI ;DILOOP THE_ADD ;MOV SI,DXMOV DI,BPMOV BX,05 减1,修改偏移量;如果BX未减到零,跳到TRAN_HEX执行指令包括进位,共5位进位标志位 CF清零 (clear carry flag )带进位相加,把结果存在AX进行AAA调整,非结合BCD码的加法调整结果送被加数区加1加1 (指向下一位)循环TRAN_ASCI: ADD BYTE PTR[SI+BX-1],30HADD BYT田TR[DI+BX-1],30H ; 使用PTR转换属性并相加,将十六进制数转化为ASCII表示DEC BX ; BX 减1,修改偏移量RET ; 返回ADDA ENDP ;加法子程序定义完成CODES ENDS ; 代码段完成END START七、实验源程序清单(实验后以电子报告形式存储到指定位置)1.源程序路径及文件名:实验三\l3.asm2.可执行程序路径及文件名:实验三\l3.exe;八、上机调试情况说明1.上机调试步骤A .通过dos对pts3.asm文件进行操作。
微型计算机技术课程设计指导教师:班级:姓名:学号:班内序号:课设日期:_________________________目录一、课程设计题目错误!未定义书签。
二、设计目的错误!未定义书签。
三、设计内容错误!未定义书签。
四、设计所需器材与工具3五、设计思路错误!未定义书签。
六、设计步骤(含流程图和代码)错误!未定义书签。
七、课程设计小结36一、课程设计题目:点阵显示系统电路及程序设计利用"汇编语言与微型计算机技术"课程中所学的可编程接口芯片8253、8255A、8259设计一个基于微机控制的点阵显示系统。
二、设计目的1.通过本设计,使学生综合运用"汇编语言与微型计算机技术"、"数字电子技术"等课程的内容,为今后从事计算机检测与控制工作奠定一定的根底。
2.掌握接口芯片8253、8255A、8259等可编程器件、译码器74LS138、8路同相三态双向总线收发器74LS245、点阵显示器件的使用。
3.学会用汇编语言编写一个较完整的实用程序。
4.掌握微型计算机技术应用开发的全过程,包括需求分析、原理图设计、元器件选用、布线、编程、调试、撰写报告等步骤。
三、设计内容1.点阵显示系统启动后的初始状态在计算机显示器上出现菜单:dot matrix display system1.←left shift display2.↑up shift display3.s stop4.Esc Exit2.点阵显示系统运行状态按计算机光标←键,点阵逐列向左移动并显示:"微型计算机技术课程设计,点阵显示系统,计科11302班,陈嘉敏,彭晓〞。
按计算机光标↑键,点阵逐行向上移动并显示:"微型计算机技术课程设计,点阵显示系统,计科11302班,陈嘉敏,彭晓〞。
按计算机光标s键,点阵停顿移动并显示当前字符。
3.完毕程序运行状态按计算机Esc键,完毕点阵显示系统运行状态并显示"停〞。
两个多字节数相加一.实验目的1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
2.熟悉和掌握用DEBUG调试程序的方法。
二.实验内容将两个多字节数相加,要求加数和被加数分别存放在num1和num2为首的内存单元中。
结果送回num1处。
三.实验步骤1.生成可执行文件。
输入 SUM.ASM SUM.OBJ SUM.EXEedit MASM LINK DEBUG2.汇编源程序DATA SEGMENTNUM1 DB 1H,2H,3H,0NUM2 DB 4H,5H,6HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXCLCLEA BX,NUM1LEA SI,NUM2MOV CX,3LL:MOV AL,[SI]ADC [BX],ALINC BXINC SILOOP LLMOV AL,0ADC AL,0MOV [BX],ALMOV AH,4CHINT 21HCODE ENDSEND START3.在DEBUG下使用DEBUG命令调试程序。
-N SUM.EXE (指定sum.exe文件)-L (从磁盘读sum.exe)-U (反汇编)记录源程序的首地址为0BC6:0000,NUM1和NUM2的首地址分别为0BC5:0000, 0BC5:0004。
如图所示:-G=0BC6:0000 0BC6:001F (使用G命令执行程序)-D OBC5:0000 (显示内存单元的内容)四.心得体会在做实验之前,尽量把源程序看懂,结合书去看。
在实验进行时,对于一些数据作修改,进行调试能够更好的理解程序所执行的内容。
经过这次试验,自己对运用MASM软件进行简单的debug指令操作有了进一步的理解和认识。
计算数组的和
计算数组的和是指将数组中所有元素的值加起来得到总和的过程。
通常使用循环来遍历数组,并通过每次迭代将当前元素加入总和中。
例如,对于以下数组:
[2, 5, 8, 3, 6]
计算数组的和的过程如下:
1. 初始化变量sum为0。
2. 开始循环遍历数组,从第一个元素开始。
3. 将当前元素加入总和中,即sum += 2,此时sum的值为2。
4. 移动到下一个元素,将其加入总和中,即sum += 5,此时sum的值为7。
5. 重复上述过程,直到遍历完整个数组。
6. 最终,总和的值为2 + 5 + 8 + 3 + 6 = 24。
可以通过编写函数来实现计算数组的和的过程,例如:
function sumArray(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
该函数接受一个数组作为参数,返回数组中所有元素的总和。
可以通过调用该函数并传入不同的数组来计算它们的总和。
《微机原理与接口技术》课程设计电气与自动化工程系 通信工程2010年12月23院 系: 专 业: 年级班级: 学 号: 姓 名: 指导教师: 设计日期:微机原理与汇编语言课程设计一、课程设计目的进行程序设计的方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,打到独立编制和调试一定滚魔的汇编语言程序水平。
二、课程设计题目四则混合运算要求从键盘上输入数字参与运算,并在屏幕上显示结果,至少实现加法减法运算。
从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。
并要求程序能反复执行直道对“还要继续吗?(y/n)”之类的提示回答“n”或“N”为止三、报告内容1.设计主要内容根据题目的要求,该程序设计的关键是要根据四则运算中()、*、/、+、-、=的优先设置符号的权值,其中(、*、+、-、)、=的权值分别设置为5、4、4、3、3、1、0,然后根据权值大小进行运算。
程序使用数字标志SIGN1、括号标志SIGN2分别来判断数字是否输入完毕和括号是否配对,另外程序定义两个数据存储区域NUMB和MARK,其中NUMB用来保存输入的或运算的数值,MARK用来保存输入的符号及其对应的权值。
程序不断判断输入的符号是否是左括号‘(’,当遇到左括号是在存储区MARK保存其符号,紧跟着将‘(’的权值改为2并保存之,这是为了使程序运算括号内的表达式,当遇到右括号‘)’时括号内运算将结束。
可以把整个源程序大致划分为几个基本结构:程序加法、减法、乘法、除法、显示结果五个部分。
首先用1号功能以输入字符的形式接收输入的算式,再判断输入字符ASCII码,如果是+、-、*、/、=或数字,则跳转到相应功能模块,并把输入的字符转为数值传入BX寄存器,在各功能模块中继续用1号功能输入字符,执行以上操作,将输入号符转为数据存入DX中,由于*、/优先级要高,加、减模块的实现中要根据输入运算符号进行将BX入栈操作,如果是相同优先级运算符,则直接将BX,DX中的数据进行相应运算,输入=则输出运算结果,这时输出字符串Continue?,用户输入y/n执行继续计算和退出操作。
微机原理程序设计课程设计报告提要该课程设计主要是编写汇编语言程序,将带符号数组中的正数和负数分别分入正数组和负数组,并且求相邻俩数之间符号的变化次数,利用RadASM程序运行得出结果。
首先定义3组数组,其次取数组首地址,再把当前数组与零比较,大于等于零存入正数数组,反之存入负数数组。
存完数组后,取原数组来判断相邻俩数之间符号的变化次数用异或判断,得出二进制码存放入AL中,在利用TEST使AL与80H比较最高位,若相等则相邻俩数之间符号无变化,反之有变化。
有变化时BL中加一,最后将BL存放入NUM中。
分组时的主要重点是将数组与零比较,再进行分组;求相邻俩数之间符号的变化次数时的核心是首先利用异或(XOR)得出一个二进制数值,最后运用TEST 比较最高位是否为1,并且记录下为0的次数,从而区分相邻俩数的符号得出变化次数。
数据分组与判断符号变化次数(Data packet and determine the number of sign change)一、设计题目对变量X_ARRAY中的数据作为带符号数,把数据分为正数组和负数组并求相邻俩数之间符号的变化次数。
二、需要解决的问题写一个汇编语言程序设计,解决如下问题:1.对变量X_ARRAY中的数据作为带符号数进行正负分组。
2.求出变量X_ARRAY中的数据作为带符号数中相邻俩数之间符号的变化次数。
三、设计思路与歩棸1.首先定义3组数组。
2.取数组首地址。
3.当前数组与零比较,大于等于零存入正数数组,反之存入负数数组。
4.存完数组后,取原数组来判断相邻俩数之间符号的变化次数。
5.用异或判断,得出二进制码存放入AL中。
6.在利用TEST使AL与80H比较最高位,若相等则相邻俩数之间符号无变化。
反之有变化,有变化时BL中加一,最后将BL存放入NUM中。
四、流程图开始取数组X_ARRY 首地址SI取正数数组PLUS 缓冲区首地址DI 取负数数组MINUS 缓冲区首地址BX取数组长度CX取数组元素与零比较保存负数于负数组,并且BX 指向下一个负数存放单元>=0<0结果不为0取数组X_ARRY 首地址SI取数组长度CX 为数组X_ARRY 的长度减1并且用异或对BL 的值进行清零用TEST 检测AL 中最高位是否为1取SI 中的数组元素到AL 中再异或比较AL 和SI+1,得出的值保存到AL 中结果为0结果为1最后将BL 的值保存到NUM 中结果为0结果不为0返回DOS ,结束程序SI 指向下一个数组元素并且检测CX 的值是否为0结果为0SI 指向下一个数组元素并且检测CX 的值是否为0BL 的值加1保存正数于正数组,并且DI 指向下一个正数存放单元五、汇编语言程序DATA SEGMENTX_ARRY DB 30,-31,32,-32,-5,1,1,2,-2,3PLUS DB 10 DUP(?)MINUS DB 10 DUP(?)COUNT EQU $-X_ARRYNUM DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,X_ARRYLEA DI,PLUSLEA BX,MINUSMOV CX,10AGAIN: MOV AL,[SI]CMP AL,0 ;当前数组元素与零比较JGE NEXT1 ;大于等于零,转NEXT1MOV [BX],AL ;小于零保存负数INC BX ;BX指向下一个负数的存放单元 JMP NEXT2NEXT1: MOV [DI],AL ;大于零保存正数INC DI ;DI指向下一个正数存放单元JMP NEXT2NEXT2: INC SI ;SI指向下一个数组元素LOOP AGAINMOV SI,OFFSET X_ARRYMOV CX,COUNT-1XOR BL,BLCOMPARE: MOV AL,[SI]XOR AL,[SI+1] ;当前AL与SI+1的异或比较TEST AL,80H ;用TEST检测AL最高位是否为1 JE NEXTINC BLNEXT: INC SILOOP COMPAREDEC BLDEC BLMOV NUM,BLMOV AH,4CHINT 21HCODE ENDS END START六、调试分析调试时遇到的错误:1.逗号打错,打成点号;2.数组元素与零比较时没考虑等于零的情况,最后分组出错;3.没有清零BL的值,少了XOR BL,BL这一步,是的结果错误;4.在用异或比较判断相邻俩数之间符号的变化次数时,没有考虑首尾各多判断了一次,使得NUM的值总是多两次;七、结果八、结果分析由上图可分析出结果如下:原数组:1E E1 20 E0 FB 01 01 02 FE 03正数数组:1E 20 01 01 02 03负数数组:E1 E0 FB FE相邻俩数之间符号的变化次数:06 即为6次。
北京信息科技大学
信息管理学院
实验报告
课程名称微机原理课程设计
实验项目实验1-(2) 编程计算2数组的代数和
实验仪器PC、TDN86/88教学实验系统、Wmd86联机软件
专业
班级/学号
学生姓名
实验日期
实验地点
成绩
指导教师
一、实验目的
1.掌握分支程序和循环程序结合应用的设计、调试方法。
二、实验内容
设有数组Xi 和Yi 。
Xi 数组中有X1 ,…,Xl0;Yi 数组中有Y1 ,…,Y10。
试编制程序计算 Z1= X1 +Y1 Z5 = X5 +Y5 Z8= X8—Y8
Z2= X2 +Y2 Z6 = X6— Y6 Z9= X9 + Y9
Z3= X3 —Y3 Z7 = X7 —Y7 Z10=X10+Y10
Z4= X4 —Y4
结果存入z 数组。
三、流程图
否 否 是
是 开始
各取下标指向元素,存入寄存器
逻辑尺为0
元素相加,存入空数
组,指向下一个元素
元素相减,存入空数
组,指向下一个元素
CX=0
结束
把两组数存入两个
数组
四、实验过程
DATA SEGMENT
BUF1 DB 01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH ;存入第一组数
BUF2 DB 01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH ;存入第二组数
BUF3 DB 10 DUP(?) ;设置空数组
LOGIC DW 00ECH ;设置逻辑尺
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA ;初始化数据段
MOV DS,AX
MOV CL,0AH ;设置数组长度
MOV SI,0H ;设置下标
A1: MOV AL,BUF1[SI] ;取下标对应数组一元素
MOV BL,BUF2[SI] ;取下标对应数组二元素
ROR LOGIC,1H ;逻辑尺循环右移一位
JC A3 ;判断是否为加法,不是则跳转到A3,加法则继续执行
ADD AL,BL ;两数组元素相加
MOV BUF3[SI],AL ;相加结果存到新数组
INC SI ;下标向后移一位
LOOP A1 ;循环执行A1
JMP STOP ;终止控制
A3: SUB AL,BL ;两数组元素相减
MOV BUF3[SI],AL ;相减结果存到新数组
INC SI ;下标向后移一位
LOOP A1 ;循环执行A1
STOP: JMP STOP ;终止控制
CODE ENDS
END START
五、实现结果及分析
运行程序,然后在调试区键入D0200:0000,即可查看结果。
经验证结果正确。
六、实验总结:
通过这次试验,我对数据在内存中的存放形式又有了更深的了解,汇编语言虽然编写起来不如C语言方便,但是执行速度快,可以直观地看到数据的处理顺序和形式。