西电微机原理上机
- 格式:doc
- 大小:11.68 KB
- 文档页数:3
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],AXNOXCHG:LOOP L3POP SIPOP CXLOOP L2MOV CX,100LEA SI,BUFFER L4:MOV AX,[SI] CALL DISPAX ADD SI,2CALL XIAOYU CALL XUHAOCALL DAYUCALL DISPCR LOOP L4MOV AH,4CHMOV AL,0INT 21H DISPAX PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV BX,10MOV CX,3L7:XOR DX,DXDIV BXMOV [DI],DX INC DIINC DILOOP L7MOV CX,3L8:DEC DIDEC DIMOV AL,[DI] ADD AL,30HMOV AH,02MOV DL,ALINT 21HLOOP L8POP 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 L6ADD SI,2LOOP 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>算法流程图:调试问题、心得体会:通过该问题,进一步练习了通过流程图分析设计程序的功能,掌握了随机数产生,子函数调用,分支程序,循环程序,中断调用等过程,进行了调试,找出了数值无法转化为十进制并显示的问题,原因在于未定义临时存储单元。
编写程序实现将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:数据1 <原序号>数据2 <原序号>数据3 <原序号>················程序如下(效果图):N=100DATAS SEGMENTBUFFER LABEL WORDX=55519REPT 100X=(X+7517)mod 65535DW XENDMNUMBER LABEL BYTEY=0REPT 100Y=Y+1DB YENDMDECIMAL DB 5 DUP(?)M DW 1 DUP(?)DATAS ENDSSTACKS SEGMENTDW 100H DUP(?)TOP LABEL WORDSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV ES,AXMOV AX,STACKSMOV SS,AXLEA SP,TOPXOR AX,AX ;开始程序LEA SI,BUFFERLEA DI,NUMBERCALL SORTMOV CX,N ;显示程序开始L1:MOV AX,[SI]MOV M,5CALL DISPAXDCALL DISPEMADD SI,2 ;显示数值XOR AX,AXMOV AL,[DI]MOV M,3CALL DISPAXDCALL DISPCRINC DI ;显示序号LOOP L1MOV AH,4CHMOV AL,0INT 21HSORT PROC NEARPUSH SIPUSH DIPUSH AXPUSH BXPUSH CXMOV CX,N;开始冒泡程序DEC CXLP1: ;外循环PUSH SIPUSH DIPUSH CXLP2: ;内循环MOV AX,[SI]CMP AX,[SI+2]JBE NOXCHGXCHG AX,[SI+2]MOV [SI],AXMOV BL,[DI]XCHG BL,[DI+1]MOV [DI],BLNOXCHG:ADD SI,2INC DILOOP LP2POP CXPOP DIPOP SILOOP LP1 ;冒泡结束POP CXPOP BXPOP AXPOP DIPOP SIRETSORT ENDPDISPAXD PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DILEA DI,DECIMALCALL TRANS16TO10MOV CX,MMOV BX,CXDEC BXLEA DI,DECIMAL[BX];指向最高位MOV AH,2DISPAXD2:MOV DL,[DI]ADD DL,30HDEC DIINT 21HLOOP DISPAXD2POP DIPOP DXPOP CXPOP BXPOP AXRETDISPAXD ENDPTRANS16TO10 PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV BX,10MOV CX,MTRANS1:XOR DX,DXDIV BXMOV [DI],DLINC DILOOP TRANS1POP DIPOP DXPOP CXPOP BXPOP AXRETTRANS16TO10 ENDPDISPEM PROC NEARPUSH AXPUSH DXMOV AL,20HMOV AH,02MOV DL,ALINT 21H ;显示一位字符POP DXPOP AXRETDISPEM ENDPDISPCR PROC NEARPUSH AXPUSH DXMOV AL,0AHMOV AH,02MOV DL,ALINT 21H ;显示一位字符POP DXPOP AXRETDISPCR ENDPCODES ENDSEND START。
微机原理与系统设计上机报告学号:*******姓名:**指导老师:**时间:2016年11月西安电子科技大学内容一 Debug程序的使用一、实验目的1. 学习使用DEBUG调试命令。
2. 学习用DEBUG调试简单程序。
3. 通过程序验证码制及其对标志位的影响。
4. 通过调试熟悉和掌握各寄存器的作用与特点。
二、实验内容用DEBUG调试简单程序。
三、实验仪器微机一台四、实验步骤1.由DOS进入DEBUG调试环境。
(1)DEBUG将调试程序装入内存注意:当机器控制权由DOS成功地转移给调试程序后,将显示“-”号,它是DEBUG的状态提示符,表示可以接受调试子命令了。
(2)-R 显示CPU中各寄存器当前初始内容,请记录下列各项:AX=0000 BX=0000 CX=0000 DX=0000 BP=0000 SI=0000 DI=0000 DS=13E0 ES=13E0 SS=13E0 SP=FFEE CS=13E0 IP=0100 FLAG寄存器中的8个标志位状态值是:OF DF IF SF ZF AF PF CFNV UP EI PL NZ NA PO NC 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命令也可实现相同操作实验现象记录:观察与记录按照上述要求命令执行后,哪些寄存器和标志位发生了变化。
西电机电院微机原理上机答案汇编语⾔上机题姓名:学号:成绩:实验⼀、上机过程及DEBUG应⽤编写程序,建⽴数据段DA TA,将你的姓名(汉语拼⾳)及学号存⼊DATA数据段的BUFFER1区域,然后利⽤程序将BUFFER1区域中的字符串(姓名及学号)依次传送到从BUFFER2开始的内存区域中去。
上机过程与要求1.建⽴原程序:源程序⽂件名为buffer.asm ,源程序清单如下:data segmentbuffer1 db 'hepan04105038'buffer2 db 13 dup(?)data endscode segmentASSUME CS:CODE,DS:DA TASTART:mov ax,datamov ds,axmov es,axlea si,buffer1lea di,buffer2mov cx,0dcldrep movsbmov ah,4chint 21hcode endsend start2.汇编后⽣成的obj⽂件名为buffer .OBJ3.连接后⽣成的⽬标⽂件名为buffer .EXE4.DEBUG调试:在DEBUG下,利⽤U、D、G、R等命令对EXE⽂件进⾏调试后,相关信息如下:(1)表1-1 反汇编清单中所反映的相关信息段地址偏移地址机器码助记符最后⼀条指令14B4 001E D1E3 SHL BX,1*注:最后⼀条指令是对应于代码段中最后⼀条指令(2)在未执⾏程序之前,⽤D命令显⽰内存区域BUFFER1及BUFFER2中的内容,其相关信息如表1-2所⽰。
表1-2 未执⾏程序之前的数据区内容变量区段地址值偏移地址变量值(或字符串)BUFFER1 14B2 0000 hepan04105038BUFFER2 14B2 000D ………….(3)执⾏程序以后⽤D命令显⽰内存区域的相关信息,如表1-3。
表1-3 执⾏程序之后的数据区内容变量区段地址值偏移地址变量值(字符串)BUFFER1 14B2 0000 hepan04105038BUFFER2 14B2 000D hepan04105038(4)⽤R命令检查寄存器的内容如表1-4所⽰。
西安电子科技大学微机原理大作业第一次上机一、实验目的1. 熟练掌握8086/8088的各种寻址方式及应用。
2.掌握DEBUG调试程序中的一些常用命令的使用方法,为以后的实验打下基础二、实验仪器586微机 1台三、实验内容1.关于数据的寻址方式练习8086/8088 提供多种方式实现操作数寻址,大体可分为7种:a. 立即寻址b. 寄存器寻址c. 直接寻址d. 寄存器间接寻址e. 寄存器相对寻址f. 基址变址寻址g. 基址变址且相对寻址掌握8086/8088的这些寻址方式,是学习汇编语言编程的关键。
指令SRC 寻址方式SRC的地址AX 推算值AX 实际值MOV AX, CX寄存器寻址0005 0005 MOV AX, 500H 立即寻址0500 0500 MOV AX, TABLE 直接寻址1541:0004 A5A 4 A5A 4MOV AX, ES:[BX] 寄存器间接寻址 1542:0004 C5C 4 C5C4MOV AX, [BX+05H] 寄存器相对寻址 1541:0009 AAA 9 AAA 9 MOV AX,寄存器相153FB8B B8B7 MOV AX, TABLE [BX] 寄存器相对寻址 1541:0008 A9A 8 A9A8MOV AX, 07H [BX] 寄存器相对寻址 1541:000B ACA B ACA BMOV AX, [BP]寄存器间接寻址 153F :0003 B4B 3 B4B 3 MOV AX, TABLE [BP] 寄存器相对寻址 1541:0007 A8A 7 A8A 7 MOV AX, 08H [BP] 寄存器相对寻址 153F :000B BCB B BCB B MOV AX, [BP+06H] 寄存器相对寻址 153F :0009 BAB 9 BAB 9 MOV AX,寄存器相1541A7A A7A6MOV AX, [BP]+05H 寄存器相对寻址153F:0008B9B8B9B8MOV AX, ES: [SI+03H] 寄存器相对寻址1542:0005C6C5C6C5MOV AX, [DI+06H] 寄存器相对寻址1541:0007A8A7A8A7MOV AX, [DI]+05H 寄存器相对寻址1541:0006A7A6A7A6MOV AX, TABLE [SI] 寄存器相对寻址1541:0006A7A6A7A6MOV AX, [SI] 寄存器间接寻址1541:0002A3A2A3A2MOV AX, TABLE 寄存器相1541A6A A6A[DI] 对寻址:00055 5MOV AX, [SI]+05H 寄存器相对寻址1541:0007A8A7A8A7MOV AX, [BX] [DI+01H] 基址变址且相对寻址1541:0006A7A6A7A6MOV AX, [BX] [SI]+03H 基址变址且相对寻址1541:0009AAA9AAA9MOV AX, TABLE [BX] [SI] 基址变址且相对寻址1541:000AABAAABAAMOV AX, ES:[BX] [DI] 基址变址寻址1542:0005C6C5C6C5MOV AX, [BP] [DI+02H] 基址变址且相对寻址153F:0006B7B6B7B6MOV AX, TABLE 基址变址1541A9A A9A[BP] [DI] 且相对寻址:00088 8MOV AX, ES:[BP] [SI] 基址变址寻址1542:0005C6C5C6C5MOV AX, [BP] [SI+05H] 基址变址且相对寻址153F:000ABBBABBBAMOV AX, 03H [BP] [DI] 基址变址且相对寻址153F:0007B8B7B8B7MOV AX, [BP] [SI] 基址变址寻址153F:0005B6B5B6B5MOV AX, [BP+02H] [DI+03H] 基址变址且相对寻址153F:0009BAB9BAB9MOV AX, TABLE [BP+02H][DI+03H] 基址变址且相对寻址1541:000DAEADAEAD第二次上机一、实验目的1. 熟练掌握汇编语言程序设计的方法及上机步骤。
西安电子科技大学微机原理上机必做题目及汇编程序答案1、编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。
编程要求与提示:[1]两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。
[2]和以压缩十进制数的形式存入SUM以下单元。
[3]将和送到屏幕显示部分功能的实现采用子程序的形式。
汇编语言实现如下:STACK SEGMENT STACKDB10H DUP(00)STACK ENDSDATA SEGMENTADD1DB12H,67H,85H,32HADD2DB21H,73H,65H,43HSUM DB4H DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,DATAMOV ES,AXMOV AX,STACKMOV SS,AXLEA SI,ADD1[3]LEA BX,ADD2[3]LEA DI,SUM[3]MOV CX,4CLCL1:MOV AL,[SI]ADC AL,[BX]DAAMOV[DI],ALDEC SIDEC BXDEC DILOOP L1CALL DISPAL;-------------------------------------EXITPROC:MOV AH,4CH;结束程序MOV AH,1INT21H;-------------------------------------DISPAL PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DILEA DI,SUMMOV CX,4DISPAL2:MOV AL,[DI]SHR AL,1SHR AL,1SHR AL,1SHR AL,1MOV AH,2MOV DL,ALADD DL,30HINT21HMOV AL,[DI]AND AL,0FHMOV AH,2MOV DL,ALADD DL,30HINT21HINC DILOOP DISPAL2POP DIPOP DXPOP CXPOP BXPOP AXRETDISPAL ENDPCODE ENDSEND START2、有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
西电微机原理上机
西电微机原理上机主要是通过实验的方式来验证微机原理课程中所学到的理论知识。
通过上机实验,我们可以更好地了解微机的工作原理、数据传输与控制、接口技术以及常见的微机系统组成。
在微机原理上机实验中,通常会有以下几个实验项目:
1. 单总线存储器读写实验:通过这个实验项目,我们可以了解到微机存储器的基本原理及其在微机系统中的应用。
通过编写程序来完成对存储器的读写操作,进一步掌握总线操作的相关知识。
2. 中断控制实验:中断是微机系统中重要的一种输入/输出方式。
通过这个实验,我们可以深入了解中断的工作原理以及中断控制的编程技术。
3. 并行与串行接口实验:在微机系统中,与外部设备的数据交互离不开接口技术。
通过这个实验,我们可以学习并熟悉并行与串行接口电路的原理,掌握相应接口的编程技术。
4. 定时器/计数器实验:定时器/计数器是微机系统中常用的计时与计数设备。
通过这个实验,我们可以了解定时器/计数器的基本工作原理以及如何通过编程来实现相应的定时与计数功能。
5. 数字/模拟转换实验:在微机系统中,数字/模拟转换技术被广泛应用于数据采集、信号处理等方面。
通过这个实验,我们可以学习数字/模拟转换的基本原理及其在微机系统中的应用。
通过以上实验项目,我们可以逐步深入了解微机原理的相关知识,掌握相应的实验技术和方法,同时能够独立进行微机系统的设计、搭建与调试工作。
关于每个实验项目的具体操作步骤和实验结果分析,这里就以其中一个实验项目为例来进行详细的说明。
以单总线存储器读写实验为例,具体操作步骤和实验结果分析如下:
1. 操作步骤:
(1) 连接实验所需的硬件设备,包括微型机实验板、开发板和串口线等;
(2) 打开相应的编程开发环境,如Proteus、Keil等;
(3) 编写相应的存储器读写程序,包括初始化存储器、写入数据、读取数据等;
(4) 下载程序并进行调试,观察存储器读写操作是否正确。
2. 实验结果分析:
通过上述操作步骤,我们可以得到以下实验结果:
(1) 存储器的读写操作是否正确,即写入的数据是否能够成功地被读取出来;
(2) 存储器的读写速度是否满足要求,即存储器读写的时序是否正确;
(3) 存储器的容量是否满足要求,即存储器能够存储的数据量大小。
通过对实验结果的分析,我们可以进一步检验和验证所学到的微机原理课程中的相关理论知识。
在实验过程中,我们可能会遇到一些问题和挑战,这就需要我们动手解决和调试,培养我们的实践能力和创新思维。
总的来说,西电微机原理上机是很重要的一门实验课程,通过实验来巩固和应用所学到的理论知识,提高我们的动手实践能力和创新思维能力。
希望同学们能够认真对待每一个实验项目,深入理解每一个实验的原理和过程,努力提高自己的实验技术水平,为以后的工作和学习打下良好的基础。