微机原理上机

合集下载

微机原理上机 (2)

微机原理上机 (2)

实验二系统功能调用和模块化程序的设计〇、实验目的和要求:1.熟悉汇编语言程序设计中系统调用和模块化设计的方法。

2.熟练掌握DOS和BIOS系统功能调用的方法。

3.熟悉模块化程序的设计思想。

4.掌握模块划分、模块间参数传递等模块化程序设计的基本方法。

一、实验提要●系统功能调用的概述系统功能调用是指通过软件中断指令的方式来调用操作系统程序中内建的能够完成一些基本处理功能的服务子程序。

PC机的系统功能调用有DOS功能调用和BIOS功能调用两种。

其中,BIOS不仅提供了所有标准设备驱动程序,而且还支持装载和初始化计算机系统等;DOS提供了应用编程接口API(Application ProgrammingInterface)层,包括设备支持(如:键盘、显示器、打印机和通讯端口等)以及文件支持等。

系统功能调用是汇编语言程序设计中最基本的操作之一,故务请熟练掌握DOS和BIOS的一些基本功能调用的方法,以顺利进行汇编语言程序设计的上机实验。

◆BIOS功能调用顾名思义,“BIOS(BASE INPUT/OUTPUT SYSTEM)”就是“基本输入/输出系统”。

BIOS是保存在计算机主板上的一片由CMOS芯片构成的ROM存储器中,亦即BIOS是以硬件形式提供给用户的软件。

并且BIOS占据固定的地址空间,在任何一台PC机(或PC兼容机)中,ROM BIOS都占据0F000H:0~F000H:0FFFFH的地址空间,共64KB(BIOS虽然占据64KB地址空间,而实际上BIOS通常并未全部使用该空间,其空闲地址空间常被计算机制造商用来存放相关的计算机制造信息乃至一些管理程序,当然实际的计算机用户也可根据需要来使用其中的空闲地址空间以存放相关的开发应用程序。

BIOS通常具有两种功能:系统自检与物理设备管理。

当打开电源或按下RESET时,计算机CPU的CS寄存器将被置成0FFFFH,而IP将被置成0,即CPU上电复位后马上就从物理地址0FFFF0H取指令执行,此地址正是被分配在ROM内。

微机原理上机个人总结

微机原理上机个人总结

微机原理上机个人总结
微机原理是一门研究计算机硬件组成和工作原理的课程,通过这门课程的学习和实践,我对计算机的组成结构、指令执行原理和存储器等方面有了更深入的了解。

在上机实践中,我主要学习了计算机的指令系统和指令的编码方式。

通过查阅资料和
实际操作,我了解到指令由操作码和操作数部分构成,操作码决定了指令的功能,操
作数则是指令的操作对象。

而不同的指令集体系结构有不同的指令编码方式,比如
x86指令集采用变长编码方式,ARM指令集则采用定长编码方式。

在实验中,我还学习了存储器的组成和工作原理。

存储器是计算机的重要组成部分,
用于存储程序和数据。

在实验中,我通过配置程序和数据的存储地址,了解了指令和
数据是如何通过存储器进行读写操作的。

同时,我还学习了存储器的层次结构,包括
寄存器、高速缓存、内存和外存等,了解了存储器的访问速度和容量随层次的变化。

此外,在实践中,我还学习了计算机的中断和异常处理。

中断是计算机在运行过程中
被外部事件打断的一种机制,异常则是计算机在执行指令过程中出现错误或特殊情况
时的处理机制。

通过配置中断和异常的处理程序,我了解了中断和异常的处理流程和
机制,以及如何编写中断和异常处理程序。

总的来说,微机原理的上机实践使我对计算机的硬件组成和工作原理有了更深入的了解。

通过对指令系统、存储器和中断等方面的学习和实践,我对计算机的工作流程和
原理有了更清晰的认识。

同时,上机实践也锻炼了我的实际操作能力,提高了我分析
和解决问题的能力。

微机原理上机个人总结

微机原理上机个人总结

微机原理上机个人总结
在微机原理的上机实验中,我个人的总结如下:
1. 实验目的:通过实验了解微机原理的基本概念、组成结构和工作原理,掌握微机系统的组装与调试技术。

2. 实验内容:
- 组装微型计算机系统:了解计算机主机、外围设备的组成,学会安装和连接各种硬件设备。

- 硬件配置与调试:学会设置硬盘、光驱、显卡、内存等硬件资源,在 BIOS 中进行相应设置调整。

- 操作系统安装:了解不同操作系统的安装步骤和要求,并按照提示完成操作系统的安装。

- 系统调试与功能测试:学会使用调试工具对硬件进行测试和调试,确保计算机系统正常工作。

3. 实验收获:
- 掌握了微机系统组装与调试的基本技术,了解了硬件设备的安装、连接方法以及操作系统的安装过程。

- 熟悉了 BIOS 设置,包括启动顺序设置、硬件资源配置等。

- 学会了使用调试工具对计算机硬件进行故障排除和性能测试。

- 加深了对微机原理的理解和认识,对计算机硬件与操作系统之间的关系有了更深入的了解。

4. 实验心得:
- 实验过程中需要仔细阅读实验指导书,按照步骤进行操作,保证安装和连接的正确性。

- 遇到问题要及时和助教、同学讨论,互相帮助解决疑惑和困难。

- 实验后要及时总结和整理实验过程中遇到的问题和解决方法,加深对微机原理的理解。

通过这次上机实验,我对微机原理有了更深入的了解,也掌握了一些基本的硬件配置和调试技术,对于今后的学习和工作都会有很大的帮助。

微机原理上机

微机原理上机

微机原理上机实验报告4.37 (上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:数据1 <原序号>数据2 <原序号>……算法流程图:调试问题、心得体会:通过这道题,熟悉了流程图画法,掌握了产生随机数,“冒泡法”排序,子函数编写调用等的基本过程,尤其对于中断调用,并利用ASCII码回显和对课本字节型数据“冒泡法”排序改进为字形排序的过程,是我受益匪浅。

并且亲身实践了源程序的汇编、调试也连接。

问题:将字节型冒泡法直接应用于该题,导致出错,该题存储的是字型数据!原因在于只是排列的AL中的数值,并不是产生的随机数!同时对于字型与字节型在运算类指令中的应用还是有误,以及其他的一些小错误,应加以改善!运行结果:程序代码:STACK SEGMENT STACK 'STACK'DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUFFER LABEL WORDX=17REPT 100X=(X+80)mod 43DW XENDMBUF DW 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOPMOV CX,100LEA SI,BUFFERLEA DI,BUFL1:MOV AX,[SI]INC SIINC SIMOV [DI],AXINC DIINC DILOOP L1MOV CX,100DEC CXLEA SI,BUFFERPUSH CXADD CX,CXADD SI,CXPOP CXL2:PUSH CXPUSH SIL3:MOV AX,[SI]CMP AX,[SI-2]JAE NOXCHGXCHG AX,[SI-2] MOV [SI],AX NOXCHG:SUB SI,2LOOP L3POP SIPOP CXLOOP L2MOV CX,100LEA SI,BUFFER L4:MOV AX,[SI]CALL DISPAXADD SI,2CALL XIAOYUCALL XUHAOCALL DAYUCALL DISPCRLOOP L4MOV AH,4CHMOV AL,0INT 21H DISPAX PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV BX,10MOV CX,3L7:XOR DX,DXDIV BXMOV [DI],DXINC DIINC DILOOP L7MOV CX,3L8:DEC DIDEC DIMOV AL,[DI]ADD AL,30HMOV AH,02INT 21HLOOP L8POP DIPOP DXPOP CXPOP BXPOP AXRET DISPAX ENDP DISPCR PROC NEAR PUSH AXPUSH DXMOV AH,2MOV DL,0AH INT 21HMOV AH,2MOV DL,0DH INT 21HPOP DXPOP AXRET DISPCR ENDP XIAOYU PROC NEAR PUSH AXPUSH DXMOV AH,02 MOV DL,3CH INT 21HPOP DXPOP AXRET XIAOYU ENDP XUHAO PROC NEAR PUSH AXPUSH BXPUSH CXPUSH SIMOV CX,100 MOV BX,AX LEA SI,BUF L5:CMP BX,[SI] JZ L6LOOP L5L6:MOV AX,101SUB AX,CXCALL DISPAXPOP SIPOP CXPOP BXPOP AXRETXUHAO ENDPDAYU PROC NEARPUSH AXPUSH DXMOV AH,02MOV DL,3EHINT 21HPOP DXPOP AXRETDAYU ENDPCODE ENDSEND START4.38 (上机题)按同余法产生一组随机数N(1<N<=50),并按N+50赋给45名同学的5门课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数(A:90~100,B:80~89,C:70~79,D:66~69,E:60~65,F:60分以下),按下列格式显示:Total <总人数>A: <人数1>B: <人数2>C: <人数3>D: <人数4>E: <人数5>F: <人数6>算法流程图:调试问题、心得体会:通过该问题,进一步练习了通过流程图分析设计程序的功能,掌握了随机数产生,子函数调用,分支程序,循环程序,中断调用等过程,进行了调试,找出了数值无法转化为十进制并显示的问题,原因在于未定义临时存储单元。

实验3微机原理上机

实验3微机原理上机

实验二顺序程序设计
一、实验目的:
掌握顺序程序设计与调试方法
二、实验内容:
编程实现如下功能:
若有一个数为X=10,利用加法指令和移位指令完成:
(1)X*2
(2)X*4
(3)X*10
三、实验要求:
1、上机前先根据要求画出程序流程图并编写源程序
2、上机完成程序的编辑、连接以及调试,记录此过程中出现的问题,调试的结果。

实验三分支程序设计
一、实验目的:
掌握分支程序设计与调试方法
二、实验内容:
编程实现如下功能:
设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将它们从大到小排列的程序。

三、实验要求:
3、上机前先根据要求画出程序流程图并编写源程序
4、上机完成程序的编辑、连接以及调试,记录此过程中出现的问题,调试的结果。

实验四分支程序设计
一、实验目的:
掌握循环程序设计与调试方法
二、实验内容:
编程实现如下功能:
ARRAY数组中有20个有符号字数据,编写程序将ARRAY数据中的数据按正、负分别存入PLUS和NEGA中,并统计正数和负数的个数分别存在MAX和MIN中。

三、实验要求:
5、上机前先根据要求画出程序流程图并编写源程序
6、上机完成程序的编辑、连接以及调试,记录此过程中出现的问题,调试的结果。

微机原理上机实验(八+十二)实验报告 8086中断实验 步进电机实验

微机原理上机实验(八+十二)实验报告 8086中断实验 步进电机实验

微机原理上机实验报告实验八:8086中断实验实验十二:步进电机实验微机原理上机实验(八)实验报告实验八:8086中断实验一、实验目的1、了解8086内部响应中断的机制;掌握中断向量的作用。

2、利用实验仪上单脉冲、74HC244电路,不使用8259,实现一个中断实例。

3、复习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。

二、实验内容1、编制程序:拨动单脉冲开关,“”送给8086的INTR,触发中断;8086通过INTA信号,读取中断向量;8086计数中断次数,显示于F5区的数码管上注意:给INTR高电平信号,8086就会相应中断,所以实验开始前,保证单脉冲开关给8086低电平;中断程序中,加一个较长的延时程序,在中断结束前,有时间拨动单脉冲开关,恢复给8086低电平。

三、实验原理图本实验,通过F4区的8个拨动开关,给74HC244设定中断向量;本实验的中断向量是08H,即IN7-IN0位数据是00001000。

同学可以自定义中断向量,实验程序中处理中断向量部分程序作相应调整四、实验步骤1、连线说明:B4区:CS244、BLE ——C1区:GNDB4区:RD(IO区)——A3区:INTAA3区:INTR ——B2区:单脉冲B4区:JP57(D0..D7) ——A3区:JP41B4区:JP52(IN0..7) ——F4区:JP27(1..8)D3区:CS、A0、A1 ——A3区:CS1、A0、A1D3区:PC0、PC1 ——F5区:KL1、KL2D3区:JP20、B、C ——F5区:A、B、C2、运行程序3、实验开始前,保证单脉冲开关给8086低电平;运行程序;向下拨动开关(触发中断),立即向上拨动开关,产生一个“”,观察结果,数码管上显示的次数与拨动开关次数是否对应。

五、实验代码EXTRN InitKeyDisplay:NEAR, Display8:NEAR_STACK SEGMENT STACKDW 100 DUP(?)_STACK ENDS_DATA SEGMENT WORD PUBLIC 'DATA'BUFFER DB 8 DUP(?)Counter DB ?ReDisplayFlag DB 0_DATA ENDSCODE SEGMENTSTART PROC NEARASSUME CS:CODE, DS:_DATA, SS:_STACKMOV AX,_DATAMOV DS,AXMOV ES,AXNOPCALL InitKeyDisplay ;对键盘、数码管控制器8255初始化CALL WriIntverMOV Counter,0 ;中断次数MOV ReDisplayFlag,1 ;需要显示STI ;开中断START1: LEA SI,BufferCALL Display8CMP ReDisplayFlag,0JZ START1CALL LedDisplayMOV ReDisplayFlag,0JMP START1WriIntver PROC NEARPUSH ESMOV AX,0MOV ES,AXMOV DI,20HLEA AX,INT_0STOSWMOV AX,CSSTOSWPOP ESRETWriIntver ENDPLedDisplay PROC NEARMOV AL,CounterMOV AH,ALAND AL,0FHMOV Buffer,ALAND AH,0F0HROR AH,4MOV Buffer + 1,AHMOV Buffer + 2,10H ;高六位不需要显示MOV Buffer + 3,10HMOV Buffer + 4,10HMOV Buffer + 5,10HMOV Buffer + 6,10HMOV Buffer + 7,10HRETLedDisplay ENDPINT_0: PUSH DXPUSH AXMOV AL,CounterADD AL,1DAAMOV Counter,ALMOV ReDisplayFlag,1CALL LedDisplayDELAY: PUSH BXPUSH CXPUSH DIPUSH SIMOV CX,20DELAY1: LEA SI,BufferCALL Display8loop DELAY1POP SIPOP DIPOP CXPOP BXPOP AX六、实验思考题1.绘制本实验的详细实验电路图?微机原理上机实验(十二)实验报告实验十二:步进电机实验一、实验目的1、了解步进电机的基本原理,掌握步进电机的转动编程方法2、了解影响电机转速的因素有那些二、实验内容编写程序:使用F5区的键盘控制步进电机的正反转、调节转速,连续转动或转动指定步数;将相应的数据显示在F5区的数码管上。

西电微机原理上机

西电微机原理上机

西电微机原理上机西电微机原理上机主要是通过实验的方式来验证微机原理课程中所学到的理论知识。

通过上机实验,我们可以更好地了解微机的工作原理、数据传输与控制、接口技术以及常见的微机系统组成。

在微机原理上机实验中,通常会有以下几个实验项目:1. 单总线存储器读写实验:通过这个实验项目,我们可以了解到微机存储器的基本原理及其在微机系统中的应用。

通过编写程序来完成对存储器的读写操作,进一步掌握总线操作的相关知识。

2. 中断控制实验:中断是微机系统中重要的一种输入/输出方式。

通过这个实验,我们可以深入了解中断的工作原理以及中断控制的编程技术。

3. 并行与串行接口实验:在微机系统中,与外部设备的数据交互离不开接口技术。

通过这个实验,我们可以学习并熟悉并行与串行接口电路的原理,掌握相应接口的编程技术。

4. 定时器/计数器实验:定时器/计数器是微机系统中常用的计时与计数设备。

通过这个实验,我们可以了解定时器/计数器的基本工作原理以及如何通过编程来实现相应的定时与计数功能。

5. 数字/模拟转换实验:在微机系统中,数字/模拟转换技术被广泛应用于数据采集、信号处理等方面。

通过这个实验,我们可以学习数字/模拟转换的基本原理及其在微机系统中的应用。

通过以上实验项目,我们可以逐步深入了解微机原理的相关知识,掌握相应的实验技术和方法,同时能够独立进行微机系统的设计、搭建与调试工作。

关于每个实验项目的具体操作步骤和实验结果分析,这里就以其中一个实验项目为例来进行详细的说明。

以单总线存储器读写实验为例,具体操作步骤和实验结果分析如下:1. 操作步骤:(1) 连接实验所需的硬件设备,包括微型机实验板、开发板和串口线等;(2) 打开相应的编程开发环境,如Proteus、Keil等;(3) 编写相应的存储器读写程序,包括初始化存储器、写入数据、读取数据等;(4) 下载程序并进行调试,观察存储器读写操作是否正确。

2. 实验结果分析:通过上述操作步骤,我们可以得到以下实验结果:(1) 存储器的读写操作是否正确,即写入的数据是否能够成功地被读取出来;(2) 存储器的读写速度是否满足要求,即存储器读写的时序是否正确;(3) 存储器的容量是否满足要求,即存储器能够存储的数据量大小。

微机原理课程上机实验指导书

微机原理课程上机实验指导书

第一部分汇编语言程序设计实验实验一汇编语言编程基础运行CmdC:cd..cd.cd..cd masmmasmdebug2000汇编语言是一种面向机器的“低级”语言,是计算机能够提供给用户的最快而最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

要真正理解计算机的工作过程,理解计算机程序的执行过程,就必须学习汇编语言。

也正是因为如此,汇编语言程序设计是计算机专业和电子,自动控制等相关专业的重要课程。

但是,对于刚开始学习汇编语言的学生而言,汇编语言的一些命令非常抽象,很难理解,往往学习了很长时间也编不出满意的程序,更别说自如的应用,以致我们认为汇编语言很难掌握,影响我们学习汇编语言的兴趣。

实际上,为了掌握好汇编语言,我们可以从熟悉、使用DEBUG调试工具开始,先来分析和读懂一些与硬件相关的小程序,这也是我们实验一的目的。

1.1 汇编语言程序的上机步骤以下列源程序为例,先学习汇编语言的上机步骤。

文件名为1.asm:DATA SEGMENTNUM1 DB 35,35HNUM2 DW 35,35HNUM3 DB 4 DUP (34,3 DUP (34H))NUM4 DB '34AB'NUM5 DW '34','AB'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV BX,OFFSET NUM1MOV AL,[BX]MOV BX,OFFSET NUM5MOV AX,[BX]MOV AH,4CHINT 21HCODE ENDSEND START一.上机步骤汇编语言程序MASM软件由编辑器,汇编MASM.EXE程序,连接LINK.EXE程序以及DUEBUG.EXE调试程序四个部分组成。

汇编语言编制完成后,在计算机上的操作过程就分为四个阶段。

1. 编辑首先输入源程序,有两种方法:(1)在记事本里录入,特别注意的是:在保存时文件格式必须选择所有文件,文件后缀名为.ASM, 即保存时文件名为XXX.asm。

微机原理上机 (5)

微机原理上机 (5)

子程序的返回是近返回,还是远返回。
显式的返回指令
返回类型
RET
可能是近返回,也可能是远返回
RETN
近返回指令Βιβλιοθήκη RETF远返回指令
RET 6
子程序返回后,(SP)←(SP) + 6
子程序使用的注意事项:
正确定义子程序的属性,即有:仅在段内调用则为 NEAR(如图 5.1 所示),只要出现
一次段间调用(包括在同一程序模块内或在不同程序模块间)则其属性就必须定义为
CALL BX
;BX 的内容是子程序的偏移量
CALL WORD1
;WORD1 是内存字变量,其值是子程序的偏移量
CALL DWORD1
;DWORD1 是双字变量,其值是子程序的偏移量和段值
CALL word ptr [BX] ;BX 所指内存字单元的值是子程序的偏移量
CALL dword ptr [BX] ;BX 所指内存双字单元的值是子程序的偏移量和段值
子程序的结构和调用:
如果子程序和调用它的程序在同一个代码段中,亦即段内调用,则子程序
定义为 NEAR 属性,如图 E5.1 示的程序段。
CODE
SEGMENT
或:
MAIN
PROC FAR
CODE
START: ……
MAIN
CALL SUB_P
START:
……
RET
MAIN
ENDP
SUB_P
SUB_P
近调用 如果被调用子程序的属性是近的,那么,CALL 指令将产生一个近调用,它把该指令 之后地址的偏移量(用一个字来表示的)压栈,把被调用子程序入口地址的偏移量送给 指令指针寄存器 IP 即可实现执行程序的转移。近调用指令的堆栈操作如图 E5.3 所示。

微机原理上机实验报告

微机原理上机实验报告

微机原理上机实验报告实验一基本输入/输出实验:本实验使8255端口A工作在方式0并作为输入口,端口B工作在方式0并作为输出口。

用一组开关信号接入端口A,端口B输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入/输出功能。

8255基本输入/输出实验参考接线图如图所示。

流程图:操作步骤:按图示连好线路,在TDPIT中输入如下程序,编译、连接、运行。

DATA SEGMENTCS0 EQU 300OHMY8255_A EQU CS0+00HMY8255_B EQU CS0+01HMY8255_C EQU CS0+02HMY8255_MODE EQU CS0+03HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV DX,3003HMOV AL,10000010BOUT DX,ALTEST_IT:MOV DX,3001HIN AL,DXMOV DX,3000HOUT DX,ALJMP TEST_ITCODE ENDSEND START实验现象:闭合开关,对应控制灯泡发光。

实验二流水线指示灯显示实验:首先分别将A口和B口写入7FH和FEH,然后分别将该数右移和左移一位,在送到端口上,这样循环下去,从而实现流水灯的显示。

8255流水灯显示实验参考接线图如图所示。

流程图:操作步骤:按图示连好线路,在TDPIT中输入如下程序,编译、连接、运行。

DATA SEGMENTCSO EQU 3000HA EQU CSO+0000HB EQU CSO+0001HC EQU CSO+0002HM EQU CSO+0003HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXXOR AX,AXMOV AL,10000000BMOV DX,MOUT DX,AL;MOV DX,B;IN AL,DXL1:MOV AL,00001000BMOV DX,AOUT DX,ALMOV AL,00000001BMOV DX,BOUT DX,ALMOV CX,00FFHC1: MOV BX,CXMOV CX,0FFFFHD1:LOOP D1MOV CX,BXLOOP C1MOV AL,00000100BMOV DX,AOUT DX,ALMOV AL,00000010BMOV DX,BOUT DX,ALMOV CX,00FFHC2: MOV BX,CXMOV CX,0FFFFHD2:LOOP D2MOV CX,BXLOOP C2MOV AL,00000010BMOV DX,AOUT DX,ALMOV AL,00000100BMOV DX,BOUT DX,ALMOV CX,00FFHC3: MOV BX,CXMOV CX,0FFFFHD3:LOOP D3MOV CX,BXLOOP C3MOV AL,00000001BMOV DX,AOUT DX,ALMOV AL,00001000BMOV DX,BOUT DX,ALMOV CX,00FFHC4: MOV BX,CXMOV CX,0FFFFHD4:LOOP D4MOV CX,BXLOOP C4JMP L1MOV AX,4C00HINT 21HCODE ENDSEND START实验现象:灯泡如流水般从左至右依次流动发光,并始终保持在同一时间只有一个灯亮着。

计算机微机原理上机实验

计算机微机原理上机实验

声光报警器接口实验一、实验目的熟悉可编程并行接口芯片8255的使用和学习开关量接口电路及其控制程序的设计方法。

二、实验内容基本实验按下SW开关,开始报警,即喇叭发声,同时LED灯闪光。

按任意键,结束报警,喇叭停止发声,LED熄灭。

三、实验要求利用MFID实验平台和声-光报警器模块板进行硬件电路连接,利用MF集成开发环境进行声光报警器软件控制程序设计、调试,直到报警器正常工作。

四、实验原理a)声-光报警器模块板电路原理如图1所示。

模块板上包括4种简单的I/O外设:扬声器、8个LED彩灯、8位DIP开关及按钮开关SW。

它们都是并行接口的对象,虽然功能单一,结构简单,但都必须通过接口电路才能进入微机系统,接受CPU的控制,发挥相应的作用。

b)声-光报警器接口的设计原理与方法,参考“微机接口技术及应用”教材第7.2节(P142)图1 声-光报警器模块板电路原理框图五、实验资源配置1.电源:机内供电,实验时将电源开关打到“内”的位置上。

2.I/O端口地址:8255的4个端口地址为300H~303H。

其中A口=300H,B口=301H,C口=302H,命令口=303H。

3.中断资源:IRQ10。

4.软件资源:MFID软件提供的用户应用程序集成开发环境与工具,包含了丰富的汇编语言和C语言程序开发软件包。

六、实验的硬件连接与软件编程c)实验资源配置好之后,使用26芯扁平电缆线(短型),将声-光报警器模块板与平台上的并行接口插座J5连接起来如图2所示,即可进行声-光报警接口实验。

图2 声-光报警器模块与CPU的连接d)实验步骤:步骤一:硬件连线:跳线设置:单线将模块电源L区JP7和JP8跳接;排线将模块电源L区JP8跳接。

单线连法如右图:排线接法如右图:步骤二:将平台的电源开关拔到“内”的位置上。

在配套集成环境下进行硬件检测,达到初始化芯片的目的.步骤三:(学生实验步骤)打开集成环境在“文件”菜单下学生可以选择新建自己的C++/ASM文件或者使用集成环境自带的C++/ASM参考程序进行调试、运行。

微机原理上机指导

微机原理上机指导

微机原理实验上机指导
一、录入程序
打开桌面上的快捷方式“emu8086”进入模拟环境环境
选择“new”新建一个汇编源程序文档
选择“EXE”建立一个模板或选择“empty workspace”建立一个空白文档
在文档中输入编写好的程序后存盘
注意:在输入程序的过程中,不要打开中文输入法,以免造成标点符号的错误。

二、编译程序
点击工具栏中的“compile”编译程序,如果程序有错误,会有提示
上图显示录入的程序有错误,并显示出了发生错误的行号与错误类型。

这时我们要返回文档,找出程序中的错误并改正。

改正后记得存盘,再重新编译程序,观
察提示信息,直到程序没有错误。

注意:最常见的错误是输入错误,比如命令拼写错误,符号输入错误,检查时要多加注意。

提示中发生错误的行不一定就是错误产生的地方,错误有可能出现在与提示行相关的其它代码行中。

三、运行程序,验证结果
编译成功后可以直接点击“run”或点击工具栏中的“emulate”进入运行界面。

点击“run”运行程序,“single step”表示单步运行。

界面下方的“vars”可查看定义的变量值,“debug”可查看寄存器状态,“stack”可查看堆栈内容,“flags”用于查看标志位。

微机原理上机实验(六+十)实验报告 74HC138译码器实验 16x16点阵显示实验

微机原理上机实验(六+十)实验报告 74HC138译码器实验 16x16点阵显示实验

微机原理上机实验报告实验六:74HC138译码器实验实验十:LED 16x16点阵显示实验微机原理上机实验(六)实验报告实验六:74HC138译码器实验一、实验目的1、掌握74HC138译码器的工作原理,熟悉74HC138译码器的具体运用连接方法,了解74HC138是如何译码的。

2、认真预习本节实验内容,尝试自行编写程序,填写实验报告二、实验内容1、编写程序:使用8255的PC0、PC1、PC2控制74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。

2、运行程序,验证译码的正确性。

三、实验原理图四、实验步骤1、连线说明:F7区:A、B、C ——D3区:PC0、PC1、PC2F7区:G1、G2A、G2B ——C1区:VCC、GND、GNDF7区:JP63 ——F4区:JP18(LED指示灯)D3区:CS、A0、A1 ——A3区:CS1、A0、A12、调试程序,查看运行结果是否正确五、实验代码Con_8255 EQU 0273H ;8255控制口PC_8255 EQU 0272H ;8255 PC口_STACK SEGMENT STACK ;设置堆栈段DW 100 DUP(?)_STACK ENDSCODE SEGMENTSTART PROC NEARASSUME CS:CODE, SS:_STACKMOV DX,Con_8255MOV AL,80HOUT DX,AL ;8255初始化,PC口作输出用,向8255的控制口输入置位/复位控制字10000000B,PC0~PC7全部复位MOV DX,PC_8255MOV AL,0START1: OUT DX,AL 将00000000B输入8255的PC口CALL Delay 延时INC AL AL加一JMP START1 循环Delay PROC NEAR ;延时Delay1: XOR CX,CX ;CX清零LOOP $ 当前位置循环一次后推出RETDelay ENDPSTART ENDPCODE ENDSEND START六、实验思考题1.在应用系统中,74HC138通常用来产生片选信号,请读者考虑一下,应如何处理?将输入信号转换为三位无符号二进制数,将转换后的数据由低到高分别输入74HC138的A、B、C口,即可实现对最多8的模块的片选功能。

西电微机原理上机报告上机报告

西电微机原理上机报告上机报告

2、利用移位、传送和相加指令实现AX的内容扩大10倍。

(1)流程图如下,是简单的顺序结构。

(2)设最初AX=0001H,则理论最终结果应为AX=000AH。

结果截图如下:由图可见,AX=000AH,结果正确。

(3)调试过程的全部单步操作如下:(4)程序代码:DATAS SEGMENT DATAS ENDSSTACKS SEGMENT DW100H DUP(?)TOP LABEL WORD STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AX,0003HMOV BX,AXSHL AX,1SHL BX,1SHL BX,1SHL BX,1ADD AX,BXMOV AH,4CHINT21HCODES ENDSEND START3、在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,再编写程序实现将其按递减关系排列。

(1)流程图如下。

第一个为无符号数的递增排列;第二个为有符号数的递减排列。

三个数字进行递增或者递减排列,最终结果仅有6种情况。

因此采用多重分支结构,对三个数字进行排列。

(2)将三个无符号数:2500、1000、4500进行递增排列,结果输出为:最终输出AX=03E8H=1000;BX=09C4H=2500;CX=1194H=4500。

结果正确。

将三个有符号数:-2500、-1000、-4500进行递减排列,结果输出为:最终输出AX=03E8H= -1000;BX=09C4H= -2500;CX=1194H= -4500。

结果正确。

(3)调试过程中的全部单步操作如下:(4)程序代码:<1>三个无符号数的递增排列:STACK SEGMENT STACKSTACK ENDSDATA SEGMENTVAR DW2500,1000,4500DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,VARCMP AX,VAR+2JBE S1JMP T1S1:CMP AX,VAR+4JAE S2MOV BX,VAR+2CMP BX,VAR+4JAE S3JMP S4T1:MOV AX,VAR+2CMP AX,VAR+4JAE T2MOV BX,VARJAE T3 JMP T4S2:MOV AX,VAR+4 MOV BX,VAR MOV CX,VAR+2 JMP FINS3:MOV AX,VAR MOV BX,VAR+4 MOV CX,VAR+2 JMP FINS4:MOV AX,VAR MOV BX,VAR+2 MOV CX,VAR+4 JMP FINT2:MOV AX,VAR+4 MOV BX,VAR+2 MOV CX,VAR JMP FINT3:MOV AX,VAR+2 MOV BX,VAR+4 MOV CX,VAR JMP FINT4:MOV AX,VAR+2MOV CX,VAR+4JMP FINFIN:MOV AH,4CHINT21HCODE ENDSEND START<2>三个有符号数的递减排序:STACK SEGMENT STACKSTACK ENDSDATA SEGMENTVAR DW-2500,-1000,-4500DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,VARCMP AX,VAR+2JGE S1JMP T1S1:CMP AX,VAR+4JLE S2MOV BX,VAR+2CMP BX,VAR+4JLE S3 JMP S4T1:MOV AX,VAR+2 CMP AX,VAR+4 JLE T2 MOV BX,VAR CMP BX,VAR+4 JLE T3 JMP T4S2:MOV AX,VAR+4 MOV BX,VAR MOV CX,VAR+2 JMP FINS3:MOV AX,VAR MOV BX,VAR+4 MOV CX,VAR+2 JMP FINS4:MOV AX,VAR MOV BX,VAR+2 MOV CX,VAR+4 JMP FINT2:MOV AX,VAR+4 MOV BX,VAR+2 MOV CX,VAR JMP FINT3:MOV AX,VAR+2MOV BX,VAR+4MOV CX,VARJMP FINT4:MOV AX,VAR+2MOV BX,VARMOV CX,VAR+4JMP FINFIN:MOV AH,4CHINT21HCODE ENDSEND START5、在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;(2)当两数均为奇数时,两个变量的内容不变;(3)当两数均为偶数时,两数缩小一半后存入原处。

微机原理上机实验报告

微机原理上机实验报告

微机原理上机实验报告微机原理上机实验报告姓名:刘⾃祥学号:04103154实验⼀ Debug程序的使⽤⼀、实验⽬的1.学习使⽤DEBUG调试命令。

2.学习⽤DEBU G调试简单程序。

3.通过程序验证码制及其对标志位的影响。

4.通过调试熟悉和掌握个寄存器的作⽤与特点。

⼆、实验内容⽤DEBUG调试简单程序。

三、实验仪器微机⼀台四、实验步骤1.由DOS进⼊DEBUG调试环境。

(1)C:>DEBUG将调试程序装⼊内存注意:当机器控制权由DOS成功地转移给调试程序后,将显⽰“-”号,它是DEBUG 的状态提⽰符,表⽰可以接受调试⼦命令了。

(2)-R 显⽰CPU中各寄存器当前初始内容,请记录下列各项:AX=0000 BX=0000 CX=0000 DX=0000 BP=0000 SI=0000 DI=0000 DS=13B2 ES=13B2 SS=13B2 SP=FFEE CS=13B2 IP=0100 FLAG寄存器中的8个标志位状态值是:OF DF IF SF ZF AF PF CF0 0 1 0 0 0 0 0 DEBUG⽤符号给出标志寄存器中8个标志位的当前状态,其含义如下表所⽰。

标志位含义‘1’的对应符号‘0’的对应符号OF溢出OV有NV⽆DF⽅向DN递减UP递增IF中断EI允许DI禁⽌SF符号NG负PL正ZF全零ZR零NZ⾮零AF辅助进位AC有NA⽆PF奇偶性PE偶PO奇CF进位CY有NC⽆2.⽤DEBUG调试简单程序例1 -A CS:0106MOV AX,1234MOV BX,2345MOV CX,0ADD AX,BXMOV CX,AXINT 20运⾏程序(注:执⾏程序时IP应指向要执⾏的指令,需要修改时-RIP当前值输⼊需要值该处为0106当然也可以在T或G命令中指出程序起始地址)-R 显⽰各寄存器当前内容及⾸条指令-T 3 跟踪执⾏三条赋值传送指令,观察寄存器及标志位变化-T 2跟踪执⾏相加及送和数指令,观察寄存器及标志位变化-G 执⾏软件中断指令INT 20,机器将显⽰“程序正常终⽌”的信息,并显⽰“-”,表明仍处在DEBUG的调试控制状态下,注意未⽤T命令,因为我们不想进⼊到20H 中断处理程序中去,P命令也可实现相同操作实验现象记录:观察每条指令执⾏后各相关寄存器值及标志位状态例2 -A CS:116MOV AX,[0124]MOV BX ,[0126]ADD AX,BXMOV [0128],AXINT 20DW 2222DW 8888DW 0设置断点分段运⾏程序-G=CS:116 11D 从指定⼊⼝运⾏程序,⾄断点11D停,可见两个数已取⾄AX,BX,但还没有求和-G122 从上⼀断点运⾏⾄新断点停,已完成求和并存⼊指定结果单元-G 完成程序观看内存内容-DCS:116 12A显⽰本程序⼩段⽬标代码和数据单元内容-UCS:116 12A反汇编指定范围的内存内容-实验现象记录:通过反汇编,记录程序执⾏前指定范围的内存内容,并记录每条指令执⾏后各相关寄存器值及指定范围的内存内容)例3 -A CS:0192MOV DX,19BMOV AH,9INT 21INT 20DB …HELLO,WORLD! $?-P 命令单步执⾏实验现象记录:观察每条指令执⾏后各寄存器的变化,记录DX,AX的变化。

微机原理上机(8次实验)ppt课件

微机原理上机(8次实验)ppt课件
③ 写出8253门控信号(GATE)的译码电路地址;
④ 若门控使能一直有效,完成8253的初始化及其应用编程(程 序基本框架已给出,加入相应初始化及其应用程序段),编 译仿真结果正确。(能看到LED闪烁,以及示波器波形)
⑤ 若门控使能信号每隔5秒翻转一次,请完成上述程序
9
微机原理上机7- 8251应用
10
微机原理上机8- ADC/DAC应用
1、ADC0808应用, (参考13.5节、 11.3.3节) 采样可变电阻端的电压值,利用电压表和数码管观察输出电
压值。 ① 掌握端口地址译码,8255应用,数码管显示原理; ② 掌握ADC0808工作过程,输入电压与输出数字量之间关系; ③ 理解程序;
6
微机原理上机4-IO接口
A7 A6 A5 A4 A3 A2 A1 A0 00110000 00100100 01101000 完成上述内容后,修改电路,将端口地址改成68H,并修改相应代码 ,重新仿真,搞清楚I/O端口译码电路和端口地址之间的对应关系。
7
微机原理上机5- 8255应用
① 练习lab2_8255例子,编译,运行,查看仿真状态(参考例9-3 和12.3节) ➢ 按键按下,数码管显示相应的键值,发光二极管低四位 对应键值的二进制数
❖ 掌握8086汇编上机调试方法及步骤:
① 编写汇编源程序(文件名:file.asm) ② 汇编:MASM file.asm ③ 链接:LINK file.obj ④ 运行:file.exe ⑤ 调试:DEBUG file.exe
❖ 掌握调试中常用的DEBUG命令:
➢ D(显示内存单元内容) ➢ R(显示寄存器内容) ➢ P/T(单步执行) ➢ G(运行) bat,填上相应扩展名后点“OK” 。 (参考6.3.2和12.1节) ① 点击“Source /Builde All” ② 点击左下角“运行/单步/暂停/停止”进行仿真

华科电气微机原理上机实验

华科电气微机原理上机实验

微机原理上机实验(第一二次上机)主要内容包括:1.汇编编程上机环境讲解,采用EMU8086V4.952.汇编程序规范编程3.上机编程作业(附提示)详细内容:1.汇编编程上机环境讲解,采用EMU8086V4.951)EMU8086程序简介一般汇编环境是masm软件环境,具体可以到华中大在线上下载。

但是MASM环境是一种在DOS下的编译环境,虽然有debug程序的支持,但对于初学者来说调试观察十分不方便,而且信息又不直观。

Emu8086仿真软件就是在Windows下的一种仿真软件,它可以仿真模拟8086的程序运行,并且可以直观地观察CPU寄存器的变化情况。

Emu8086 - Microprocessor Emulator结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。

这对刚开始学组合语言的人会是一个很有用的工具。

它会在模拟器中一步一步的编译程序码并执行,视觉化的工作环境让它更容易使用。

你可以在程序执行当中检视暂存器、旗标以及记忆体。

模拟器会在虚拟PC 中执行程序,这可以隔绝你的程序,避免它去存取实际硬体,像硬碟、记忆体,而在虚拟机器上执行组合程序,这可以让除错变得更加容易。

这个软件完全相容於Intel 的下一代处理器,包括了Pentium II、Pentium 4,而相信Pentium 5 也会继续支援8086 的。

这种现象让8086 程序码的可携性相当高,它可以同时在老机器以及现代的电脑是执行,8086 的另一个优势是它的指令比较小且相当容易学习。

对于程序类的各种实验,建议用Emu8086仿真软件来进行实验。

Emu8086本身也自带了一些例子程序。

初学者可以观摩别人的写法来安排自己的程序,也可以从中学习各种实用的伪指令及程序结构。

2)EMU8086安装提示安装过程比较简单,请大家自己研究,上机实验时可直接使用试用版本不影响使用,若希望继续使用可自己上网搜取RegKey。

微机原理上机实验

微机原理上机实验

2)基本指令的用法
在debug中输入各条基本指令并执行,观察指令的执行情况。
四、实验问题探讨
1. 2. 3. 4.
如何利用Debug去观察中断向量表? 机器复位后执行的第一条指令在哪儿?是什么指令? 在debug中输入16进制数时,需要键入H吗? 从当前位置开始执行指令到CS:0212H处,在Debug 中应该使用什么命令?
运行命令G
格式: 功能
G [=地址][地址[地址…]]
执行用户正在调试的程序,其中,地址为执行的 起始地址,以CS的内容作为段地址,以等号后面 的地址为偏移地址。后面的地址为断点地址。
命名命令N
格式:N 文件名 在调用DEBUG时,如果没有文件名,需要用N命令将
编译的的文件名格式化到CS:5CH的文件控制块中
实验2 简单程序的编制及汇编过程
一、实验目的:
1. 2. 掌握masm、link的基本用法 编制基本的宏汇编程序
3、能编制基本的宏汇编程序,能实现分支结构、循环结构
的程序编制。
4、熟悉汇编集成开发环境QTH。(可选)
二、实验设备:
QTH-2008PC实验设备一台,键盘、鼠标、显示器各
一件。
三、实验内容
8、可编程计数/定时器8253的使用 9、可编程中断控制器8259A的操作
10、综合实验
实验1
调试工具debug的使用及基本指令的用法
一、实验目的:
1、学习DEBUG常用命令的使用 2、了解程序运行的过程 3、熟悉所学指令的功能,给定指令,记录指令执行后的状态 4、了解上述各类指令对标志寄存器的影响
器语言
宏汇编程序在DOS下运行
MASM中的主要文件类型
汇编源程序(.ASM)

微机原理上机答案(西电)

微机原理上机答案(西电)

微机原理上机答案(西电)上机作业(三)编写如下程序,并在机器上调试成功。

程序采用菜单式选择,可以接收用户从键盘输入的五个命令(1-5),各命令功能分别为:(1)按下“1”键,完成字符串小写字母变成大写字母。

用户输入一由英文大小写字母或数字0-9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其他字符不变,并在屏幕上显示。

用户按任一键,重做,按ESC键,返回主菜单。

(2)按下“2”键,完成找最大值(二选一)。

a.接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来;b.接收用户输入若干个无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

(3)按下“3”键,完成排序(二选一)。

a.接收用户输入的可显示字符串,以回车结束。

程序按ASCII码值大小由大到小排序并输出显示;b.接收用户输入若干个有符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

(4)按下“4”键,显示时间。

首先提示用户对时,即用户输入时、分、秒(以空格或逗号为分隔符,以回车结束),然后,在屏幕上不断显示时间,格式为:XX(时): XX(分): XX(秒)最好定点显示。

用户按任一键,重新对时,按ESC键,返回主菜单。

(5)按下“5”键,结束程序运行,返回系统提示符。

程序代码:STACK SEGMENT STACKDB 256 DUP(?)TOP LABEL WORDSTACK ENDSDA TA SEGMENTTABLE DW G1, G2, G3, G4, G5STRING1 DB '1. Change small letters into capital letters of string;', 0DH, 0AH, '$' STRING2 DB '2. Find the maximum of string;', 0DH, 0AH, '$'STRING3 DB '3. Sort for datas;', 0DH, 0AH, '$'STRING4 DB '4. Show Time;', 0DH, 0AH, '$'STRING5 DB '5. Exit.', 0DH, 0AH, '$'STRINGN DB 'Input the number you select (1-5) : $'IN_STR DB 'Input the string (including letters & numbers, less than 60 letters) :', 0DH, 0AH, '$' PRESTR DB 'Original string : $'NEWSTR DB 'New string : $'OUT_STR DB 'The string is $'MAXCHR DB 'The maximum is $'IN_NUM DB 'Input the numbers (0 - 255, no more than 20 numbers) : ', 0DH, 0AH, '$' OUT_NUM DB 'Sorted numbers : ', 0DH, 0AH, '$'IN_TIM DB 'Correct the time (HH:MM:SS) : $'HINTSTR DB 'Press ESC, go back to the menu; or press any key to play again!$' KEYBUF DB 61DB ?DB 61 DUP (?)NUMBUF DB ?DB 20 DUP (?)DA TA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:MOV AX, DATAMOV DS, AXMOV AX, STACKMOV SS, AXMOV SP, OFFSET TOPMAIN: CALL FAR PTR MENU ; 设置显示器AGAIN:MOV AH, 2MOV BH, 0 ; 页号MOV DL, 41 ; 列号MOV DH, 10 ; 行号INT 10H ; 光标位置设置MOV AH, 1INT 21HCMP AL, '1'JB AGAINCMP AL, '5'JA AGAINSUB AL, '1' ; N-1SHL AL, 1 ; (N-1)*2CBW ; AL->AXLEA BX, TABLEADD BX, AXJMP WORD PTR [BX]G1:CALL FAR PTR CHGLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G1G2:CALL FAR PTR MAXLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G2G3:CALL FAR PTR SORTNUMMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G3G4:CALL FAR PTR TIMCHKMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G4G5:MOV AH, 4CHINT 21HMENU PROC FAR ; 显示主界面;设置显示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING1INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING2INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING3INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING4INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING5INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 10 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRINGNINT 21HRETMENU ENDPCHGLTR PROC FAR ; 将输入字符串中小写字母便换成大写字母RECHG:;设置显示器方式MOV AH, 0MOV AL, 3MOV BL, 0INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOV AH, 9LEA DX, IN_STRINT 21H ; 输入字符串提示MOV AH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入字符串光标位置设置MOV AH, 0AHLEA DX, KEYBUFINT 21H ; 输入字符串CMP KEYBUF + 1, 0JZ RECHG ; 判断输入字符串是否为空串LEA BX, KEYBUF + 2MOV AL, KEYBUF + 1CBWMOV CX, AXADD BX, AXMOV BYTE PTR [BX], '$' ; 在输入字符串尾加结束标志$MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 源字符串提示光标位置设置MOV AH, 9LEA DX, PRESTRINT 21H ; 输出源字符串提示MOV AH, 9LEA DX, KEYBUF + 2INT 21H ; 输出源字符串LEA BX, KEYBUF + 2LCHG:CMP BYTE PTR [BX], 61HJB NOCHGAND BYTE PTR [BX], 0DFHNOCHG:INC BXLOOP LCHG ; 将字符串中小写字母转换成大写字母MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 新字符串提示光标位置设置MOV AH, 9LEA DX, NEWSTRINT 21H ; 输出新字符串提示MOV AH, 9LEA DX, KEYBUF + 2INT 21H ; 输出新字符串MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息RETCHGLTR ENDPMAXLTR PROC FAR ; 在输入字符串中找出最大值REMAX:;设置显示器方式MOV AH, 0MOV AL, 3MOV BL, 0INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOV AH, 9LEA DX, IN_STRINT 21H ; 输入字符串提示MOV AH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入字符串光标位置设置MOV AH, 0AHLEA DX, KEYBUFINT 21H ; 输入字符串CMP KEYBUF + 1, 0JZ REMAX ; 判断输入字符串是否为空串LEA BX, KEYBUF + 2MOV AL, KEYBUF + 1CBWMOV CX, AXADD BX, AXMOV BYTE PTR [BX], '$' ; 在输入字符串位加结束标志$MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 源字符串提示光标位置设置MOV AH, 9LEA DX, OUT_STRINT 21H ; 输出字符串提示MOV AH, 9LEA DX, KEYBUF + 2INT 21H ; 输出字符串MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 新字符串提示光标位置设置MOV AH, 9LEA DX, MAXCHRINT 21H ; 输出字符串中最大值提示MOV DL, 0LEA BX, KEYBUF + 2LCMP:CMP [BX], DLJB NOLCHGMOV DL, [BX]NOLCHG:INC BXLOOP LCMP ; 找出字符串中最大字符,放入DLMOV AH, 2INT 21H ; 输出字符串中最大字符MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息RETMAXLTR ENDPSORTNUM PROC FAR ; 对输入数据组排序RESORT:;设置显示器方式MOV AH, 0MOV BL, 0INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOV AH, 9LEA DX, IN_NUMINT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入数据组光标位置设置MOV AH, 0AHLEA DX, KEYBUFINT 21H ; 输入数据组字符串CALL CIN_INT ; 字符串转换成数据串CMP AL, 0JZ RESORT ; 判断数据串是否有错CMP NUMBUF, 0JZ RESORT ; 判断数据串是否为空MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 输出提示光标位置设置MOV AH, 9LEA DX, OUT_NUMINT 21H ; 输出数据串提示MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 输出数据组光标位置设置CALL FAR PTR MPSORT ; 数据组排序CALL FAR PTR INT_OUT ; 数据组的输出MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息RETSORTNUM ENDPCIN_INT PROC NEAR ; 读入整型数; 入口参数:无; 出口参数为:AL(有无错误标志,0为有,1为无)MOV CL, KEYBUF + 1LEA SI, KEYBUF + 2MOV CH, 0 ; 数据组数据个数置0MOV DH, 10MOV AL, 0 ; 当前数据x=0MOV DL, 0 ; 有无数据标志置0,即无数据FNDNUM:CMP BYTE PTR [SI], ' 'JZ ADDNUM ; 判断当前字符是否为空格CMP BYTE PTR [SI], '0'JB ERRNUMCMP BYTE PTR [SI], '9'JA ERRNUM ; 判断当前字符是否在'0'-'9'之间MOV DL, 1 ; 有无数据标志置1,即有数据MUL DHXOR BH, BHMOV BL, [SI]ADD AX, BXSUB AX, '0' ; 计算出当前数据xCMP AH, 0JA ERRNUM ; 判断x是否越界JMP NEXTADDNUM:CMP DL, 1JNZ NEXT ; 判断是否有数据INC CH ; 数据组数据个数加1CALL ADDNEWMOV DL, 0MOV AL, 0 ; 清零NEXT:INC SIDEC CLCMP CL, 0JNZ FNDNUM ; 依次检查各字符CMP DL, 1JNZ TOTAL ; 判断是否有未加入的数据INC CHCALL ADDNEWTOTAL:MOV NUMBUF, CH ; 置数据组数据个数MOV AL, 1 ; 输入数据无错误JMP CRTNUMERRNUM:MOV AL, 0 ; 输入数据有错误CRTNUM:RETCIN_INT ENDPADDNEW PROC NEAR ; 增加新数; 入口参数:CH(数据组数据个数)、AL(当前数据x); 出口参数:无PUSH AXLEA BX, NUMBUFMOV AL, CHCBWADD BX, AXPOP AXMOV [BX], ALRETADDNEW ENDPMPSORT PROC FAR ; 数据组排序MOV AL, NUMBUFCMP AL, 1JBE NOSORT ; 若只有一个元素,停止排序CBWMOV CX, AXLEA SI, NUMBUF ; SI指向数据组首地址ADD SI, CX ; SI指向数据组末地址DEC CX ; 外循环次数LP1: ; 外循环开始PUSH CXPUSH SIMOV DL, 0 ; 交换标志置0LP2: ; 内循环开始MOV AL, [SI]CMP AL, [SI - 1]JAE NOXCHGXCHG AL, [SI - 1] ; 交换操作MOV [SI], ALMOV DL, 1 ; 交换标志置1 NOXCHG:DEC SILOOP LP2POP SIPOP CXCMP DL, 1JNZ NOSORT ; 判断交换标志LOOP LP1NOSORT:RETMPSORT E NDPINT_OUT PROC FAR ; 输出数据组MOV AL, NUMBUFCBWMOV CX, AXMOV BL, 10HLEA SI, NUMBUF + 1PRINT:MOV AL, [SI]CALL OUTNUMINC SIMOV AH, 2MOV DL, ' 'INT 21HLOOP PRINTRETINT_OUT ENDPOUTNUM PROC NEAR ; 将十进制数以十六进制输出; 入口参数:AL(待转换的数据),BL(转换进制数16); 出口参数:无MOV AH, 0DIV BLPUSH AXCMP AH, 10JB PNUMADD AH, 7PNUM: ADD AH, 30HMOV DL, AHPOP AXPUSH DXCMP AL, 0JZ OUTNCALL OUTNUMOUTN:POP DXMOV AH, 2INT 21HRETOUTNUM ENDPTIMCHK PROC FAR ; 设定并显示时间;设置显示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 设置提示光标位置设置MOV AH, 9LEA DX, IN_TIMINT 21H ; 时间串提示MOV AH, 0AHLEA DX, KEYBUFINT 21H ; 输入时间串MOV BL, 10MOV AL, KEYBUF + 2SUB AL, '0'MUL BLADD AL, KEYBUF + 3SUB AL, '0'CMP AL, 0JB INV ALIDCMP AL, 24JAE INV ALID ; 判断时有效性MOV CH, ALMOV AL, KEYBUF + 5SUB AL, '0'MUL BLADD AL, KEYBUF + 6SUB AL, '0'CMP AL, 0JB INV ALIDCMP AL, 60JAE INV ALID ; 判断分有效性MOV CL, ALMOV AL, KEYBUF + 8SUB AL, '0'MUL BLADD AL, KEYBUF + 9SUB AL, '0'CMP AL, 0JB INV ALIDCMP AL, 60JAE INV ALID ; 判断秒有效性MOV DH, ALMOV DL, 0MOV AH, 2DHINT 21H ; 置系统时间INV ALID:CALL TIMERETTIMCHK ENDPTIME PROC ; 显示时间子程序;设置显示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 10 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息DISP1:MOV AH, 2MOV BH, 0 ; 页号MOV DL, 72 ; 列号MOV DH, 0 ; 行号INT 10H ; 提示光标位置设置MOV AH, 2CH ; 取系统时间,CH,CL,DH分别存放时/分/秒INT 21HMOV AL, CH ; 显示时CALL SHOWNUMMOV AH, 2MOV DL, ':'INT 21HMOV AL, CL ; 显示分CALL SHOWNUMMOV AH, 2MOV DL, ':'INT 21HMOV AL, DH ; 显示: 秒CALL SHOWNUMMOV AH,02H ; 设置光标位置MOV DX,090AHMOV BH,0INT 10HMOV BX,0018HRE: MOV CX,0FFFFH ; 延时REA: LOOP READEC BXJNZ REMOV AH, 0BH ; 或MOV AH, 01HINT 21H ; INT 16HCMP AL, 0 ; JE DISP1JZ DISP1 ; 检查键盘状态RETTIME ENDPSHOWNUM PROC ; 把AL中的数字以十进制输出; 入口参数:AL(待显示的数据); 出口参数:无CBWPUSH CXPUSH DXMOV CL, 10DIV CLADD AH, '0'MOV BH, AHADD AL, '0'MOV AH, 2MOV DL, ALINT 21HMOV DL, BHINT 21HPOP DXPOP CXRETSHOWNUM ENDPCODE ENDSEND START五、实验结果运行程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上机作业2
一.实验目的
1.熟练掌握汇编语言程序设计的方法及上机步骤。

2.掌握算术运算中,十进制数调整指令的应用。

3.掌握子程序的设计方法。

4.掌握DOS功能的调用方法。

二.实验仪器
586微机 1台
三.实验内容
2.有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次
序排列。

[1] 参加排序的数据及个数由自己定义。

[2] 要将排序前的数组和排序后的数组在屏幕上显示出来。

[3] 实验步骤
a. 用全屏幕编辑软件建立源程序
N=2
STACK SEGMENT STACK 'STACK'
DW 100H DUP(00)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
DATABUF DW N
DB N DUP(?)
ORIGINAL DB 13,10,13,10,'THE ORIGINAL DATA:$'
ORDERED DB 13,10,13,10,'THEORDERED DATA:$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV CX,DATABUF
LEA SI,DATABUF+2
MOV BL,18
MOV AL,13
L:
MOV [SI],AL
INC SI
ADD AL,BL
LOOP L
LEA DX,ORIGINAL MOV AH,9
INT 21H
CALL DISPAL
MOV CX,DATABUF DEC CX
LEA SI,DATABUF+2
ADD SI,CX
L1:
PUSH CX
PUSH SI
L2:
MOV AL,[SI]
CMP AL,[SI-1]
JBE NOXCHG
XCHG AL,[SI-1] MOV [SI],AL NOXCHG:
DEC SI
LOOP L2
POP SI
POP CX
LOOP L1
LEA DX,ORDERED MOV AH,9
INT 21H
CALL DISPAL EXITPROC:
MOV AH,4CH
MOV AH,1
INT 21H
DISPAL PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
LEA DI,DATABUF+2 MOV CX,20 DISPAL2:
MOV AL,[DI]
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
CALL CHANG
MOV AH,2
MOV DL,AL
INT 21H
MOV AL,[DI]
AND AL,0FH
CALL CHANG
MOV AH,2
MOV DL,AL
INT 21H
MOV AH,2
MOV DL,20H
INT 21H
INC DI
LOOP DISPAL2
POP DI
POP DX
POP CX
POP BX
POP AX
RET
DISPAL ENDP
CHANG PROC NEAR
CMP AL,10
JNGE CHANG1
ADD AL,7
CHANG1:
ADD AL,30H
RET
CHANG ENDP
CODE ENDS
END START
b.用masm.exe汇编程序对源程序进行汇编,形成目标程序。

c. 用link.exe连接程序对目标程序进行连接形成可执行文件。

d. 用DEBUG对连接通过的可执行程序进行调试。

四.问题讨论
1.在以十进制数形式参加运算的程序设计中,应注意那些问题。

进位,溢出
2.总结循环程序设计的步骤及方法。

(1)首先设置循环次数和初始状态
(2)然后进入循环工作部分,编译循环代码
(3)然后要进行循环调整,更新循环中的数据
(4)进行出口判定,至少有一个出口,也可以有多个出口,保证循环正常结束。

相关文档
最新文档