微机原理上机

合集下载

微机原理上机 (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内。

微机原理课程上机实验内容

微机原理课程上机实验内容

该课程在微机房实验共分为4次,8个学时,两大部分实验内容,请每次预习下次试验内容,并把程序编好,再来上机调试!最后实验环节的成绩按上机实验时的表现和实验报告两部分相加,请认真对待!第一次实验第一部分汇编语言程序设计实验一熟悉、使用DEBUG调试工具一.上机目的:1.了解并逐步熟悉汇编语言的编辑方法及特点.2.复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。

3.掌握汇编语言的编辑、汇编及连接的过程。

4.了解并逐步掌握运用DEBUG进行调试汇编语言程序。

二.实验内容:1.运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。

2.运用MASM﹒EXE文件进行汇编,修改发现的各种语法错误,直至正确,形成*.OBJ文件。

3.运用LINK.EXE文件进行连接,形成*.EXE文件。

4.仔细阅读附录中的DEBUG部分,掌握各种命令的所有方法。

5.运用DEBUG。

EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。

6.再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。

练习一熟悉DEBUG程序的使用上机要求:一. 运用8086汇编语言,编辑两数排队的简单程序,文件名取为*.ASM。

二. 运用MASM.EXE文件进行汇编,直至正确,形成*.OBJ文件。

三. 运用LINK .EXE文件进行连接,形成*.EXE文件。

四. 认真阅读DEBUG中的命令与功能。

五. 运用DEBUG .EXE文件进行调试。

使用单步执行命令一-T两次,观察寄存器中内容的变化:使用查看存储器数据段命令一-D,观察存储器数据段内数值。

六. 再使用连续执行命令-→G,及使用查看存储器数据段命令一-D,观察存储器数据段内数值的结果是否符号要求。

七. 在以上步骤完成后,可以运用DEPUG中的其它命令,如N、L、u、A、R、Q 等等命令,以进一步了解DEBUG的功能及特点。

微机原理上机

微机原理上机

微机原理上机实验报告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>算法流程图:调试问题、心得体会:通过该问题,进一步练习了通过流程图分析设计程序的功能,掌握了随机数产生,子函数调用,分支程序,循环程序,中断调用等过程,进行了调试,找出了数值无法转化为十进制并显示的问题,原因在于未定义临时存储单元。

西安电子科技大学微机原理上机要求及必做题目答案(汇编实现)

西安电子科技大学微机原理上机要求及必做题目答案(汇编实现)

西安电子科技大学微机原理上机要求及必做题目答案(汇编实现)必做题目:1、编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。

2、有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。

1、编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。

编程要求与提示:[1]两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。

[2]和以压缩十进制数的形式存入SUM以下单元。

[3]将和送到屏幕显示部分功能的实现采用子程序的形式。

汇编语言实现如下:STACKSTACKDATAADD1ADD2SUMDATACODESTART:MOVA某,DATAMOVDS,A某MOVA某,DATAMOVES,A某MOVA某,STACKMOVSS,A某LEASI,ADD1[3]LEAB某,ADD2[3]LEADI,SUM[3]MOVC 某,4CLCL1:MOVAL,[SI]ADCAL,[B某]DAAMOV[DI],ALDECSIDECB某DECDILOOPL1SEGMENTSTACKDB10HDUP(00)ENDSSEGMENTDB12H,67H,85H,32HDB21H,73H,65H,43HDB4HDUP()ENDSSEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK必做题目:1、编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。

2、有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。

CALLDISPAL;-------------------------------------E某ITPROC:MOVAH,4CH;结束程序MOVAH,1INT21H;-------------------------------------DISPALPROCNEARPUSHA某PUSHB某PUSHC某PUSHD某PUSHDILEADI,SUMMOVC某,4 DISPAL2:MOVAL,[DI]SHRAL,1SHRAL,1SHRAL,1SHRAL,1MOVAH,2MOVDL,ALADDDL,3 0HINT21HMOVAL,[DI]ANDAL,0FHMOVAH,2MOVDL,ALADDDL,30HINT21HINCDILOOPDISPAL2POPDIPOPD某POPC某POPB某POPA某RETDISPALENDPCODEENDSENDSTART2、有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。

微机原理上机实验(八+十二)实验报告 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区的数码管上。

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

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

第一部分汇编语言程序设计实验实验一汇编语言编程基础运行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。

西电机电院微机原理上机答案

西电机电院微机原理上机答案

西电机电院微机原理上机答案汇编语⾔上机题姓名:学号:成绩:实验⼀、上机过程及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所⽰。

微机原理汇编语言的上机过程 实验报告

微机原理汇编语言的上机过程 实验报告

微机原理技术与接口实验报告学院:专业:班级:姓名:学号:汇编语言程序的上机过程实验目的通过简单地操作了解汇编语言程序的基本内容,体会汇编语言的运行,为以后的实验打下一定的基础。

实验原理及操作步骤一、上机环境❖要运行调试汇编语言程序,至少需要以下程序文件:▪编辑程序:或其他文本编辑工具软件,用于编辑源程序。

▪汇编程序:MASM.EXE,用于汇编源程序,得到目标程序。

▪连接程序:LINK.EXE,用于连接目标程序,得到可执行程序。

▪调试程序:DEBUG.EXE,用于调试可执行程序。

二、上机过程❖汇编语言程序上机操作包括:编辑、汇编、连接和调试几个阶段。

1.编辑源程序❖用文本编辑软件创建、编辑汇编源程序。

常用编辑工具有:、记事本、Word等。

❖无论采用何种编辑工具,生成的文件必须是纯文本文件,所有字符为半角,且文件扩展名为.asm(文件名不分大小写,由1~8个字符组成)。

2.汇编❖用汇编工具对上述源程序文件(.asm)进行汇编,产生目标文件(.obj)等文件。

❖汇编程序的主要功能是:检查源程序的语法,给出错误信息;产生目标程序文件;展开宏指令。

❖汇编过程如下:❖在DOS状态下,输入命令:MASM MYFILE.ASM(回车),即启动了汇编程序。

❖此命令执行后,会出现下面的3行信息,依次按回车键(即选择默认值)即可建立3个输出文件,其扩展名分别为:.OBJ(目标文件),.LST(列表文件)和.CRF(交叉引用文件)。

Object Filename [MYFILE.OBJ]:Source Listing [Nul.LST]:Cross Reference [Nul.CRF]:依次按回车键,进行选择后,汇编程序就对汇编源程序进行汇编。

如果汇编过程中发现有语法错误,则屏幕上会显示出错语言的位置和出错的类型。

此时,需要进行修改,然后再进行汇编。

❖如此进行,直至汇编无错误,得到目标文件为止。

3.连接❖汇编产生的目标文件(.obj)并不是可执行的程序,还要用连接程序把它转换为可执行的EXE文件。

计算机微机原理上机实验

计算机微机原理上机实验

声光报警器接口实验一、实验目的熟悉可编程并行接口芯片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”用于查看标志位。

微机原理汇编实验-汇编语言程序上机操作方法实验

微机原理汇编实验-汇编语言程序上机操作方法实验

学生实验报告实验课程名称:微机原理汇编实验开课实验室:年月日年级、专业、班学号姓名成绩实验项目名称汇编语言程序上机操作方法实验指导教师教师评语一、实验目的学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,为后继课程打下坚实的基础。

二、实验原理使用MASM汇编语言设计工具,设计简单的汇编语言程序并进行运行调试,以便掌握汇编语言设计、编写、调试和运行程序的方法。

三、实验仪器、材料1.软件MASM5.02.PC微机一台四、实验步骤1.建立asm文件在windows系统环境下,应用写字板或其它文字编辑软件编写汇编语言源文件。

注意保存的源文件以asm为后缀。

2.用汇编程序MASM对源文件汇编产生目标程序.OBJ。

3.用连接程序LINK产生可执行文件.EXE。

4.执行程序。

5.程序调试五、实验源代码;------------------------------------------------- ;程序名:Lab101;功能:把NUM数组中的最大值取出并显示输出;-------------------------------------------------DATA SEGMENTNUM DB 12,52,36,14,25,32,14,126 COUNT EQU ($-NUM)DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV CX,COUNT ;初始化循环次数MOV SI,OFFSET NUMMOV AL,[SI]MOV DL,ALINC SIAGAIN:MOV AL,[SI]INC SICMP DL,ALJL SWAPLOOP AGAINJMP FINISHSWAP:MOV DL,ALLOOP AGAINJMP FINISH;--------------------------------;子程序名:TRANNUM;功能:将数字转换为字符串;入口参数:AL;出口参数:无;--------------------------------TRANNUM PROC NEARMOV AL,DLXOR AH,AHMOV CX,3MOV DL,10TRAN1:DIV DLXCHG AH,ALADD AL,'0'PUSH AXXCHG AH,ALMOV AH,0LOOP TRAN1MOV CX,3TRAN2:POP DXCALL DISPLAYLOOP TRAN2RETTRANNUM ENDP;--------------------------------;子程序名:DISPLAY;功能:将单个字符显示输出;入口参数:DL;出口参数:无;--------------------------------DISPLAY PROC NEARMOV AH,02HINT 21HRETDISPLAY ENDPFINISH:CALL TRANNUMMOV AH,4CH ;程序结束返回DOSINT 21HMAIN ENDPCODE ENDSEND START六、实验过程原始记录(数据图表、计算等)1、打开命令提示符:输入cmd2、输入:cd G:/asm/tos3、输入:G:4、输入:masm lab1015、输入:link lab1016、输入:lab101七、实验结果分析从程序代码分析,所给数值中最大值为126,运行程序后输出结果为126,说明程序能够实现其功能。

微机原理汇编语言的上机过程 实验报告

微机原理汇编语言的上机过程 实验报告

微机原理技术与接口实验报告学院:专业:班级:姓名:学号:汇编语言程序的上机过程实验目的通过简单地操作了解汇编语言程序的基本内容,体会汇编语言的运行,为以后的实验打下一定的基础。

实验原理及操作步骤一、上机环境要运行调试汇编语言程序,至少需要以下程序文件:▪编辑程序:或其他文本编辑工具软件,用于编辑源程序。

▪汇编程序:MASM.EXE,用于汇编源程序,得到目标程序。

▪连接程序:LINK.EXE,用于连接目标程序,得到可执行程序。

▪调试程序:DEBUG.EXE,用于调试可执行程序。

二、上机过程汇编语言程序上机操作包括:编辑、汇编、连接和调试几个阶段。

1.编辑源程序用文本编辑软件创建、编辑汇编源程序。

常用编辑工具有:、记事本、Word等。

无论采用何种编辑工具,生成的文件必须是纯文本文件,所有字符为半角,且文件扩展名为.asm(文件名不分大小写,由1~8个字符组成)。

2.汇编用汇编工具对上述源程序文件(.asm)进行汇编,产生目标文件(.obj)等文件。

汇编程序的主要功能是:检查源程序的语法,给出错误信息;产生目标程序文件;展开宏指令。

汇编过程如下:在DOS状态下,输入命令:MASM MYFILE.ASM(回车),即启动了汇编程序。

此命令执行后,会出现下面的3行信息,依次按回车键(即选择默认值)即可建立3个输出文件,其扩展名分别为:.OBJ(目标文件),.LST(列表文件)和.CRF(交叉引用文件)。

Object Filename [MYFILE.OBJ]:Source Listing [Nul.LST]:Cross Reference [Nul.CRF]:依次按回车键,进行选择后,汇编程序就对汇编源程序进行汇编。

如果汇编过程中发现有语法错误,则屏幕上会显示出错语言的位置和出错的类型。

此时,需要进行修改,然后再进行汇编。

如此进行,直至汇编无错误,得到目标文件为止。

3.连接汇编产生的目标文件(.obj)并不是可执行的程序,还要用连接程序把它转换为可执行的EXE文件。

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

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

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” ② 点击左下角“运行/单步/暂停/停止”进行仿真

微机原理上机实验

微机原理上机实验

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五、实验结果运行程序。

微机原理上机 (4)

微机原理上机 (4)

实验四分支程序的设计〇、实验目的和要求:1.熟练掌握分支程序的两种结构形式:即相当于高级语言中的IF_THEN_ELSE语句和CASE语句。

2.熟练掌握使用条件转移指令实现分支程序设计的基本方法。

3.掌握使用跳转表方法实现CASE结构的分支程序的设计。

一、实验提要●分支程序的两种基本结构,如图E4.1所示。

(1) IF_THEN_ELSE结构(2) CASE 结构图E4.1 分支程序的两种基本结构它们分别相当于高级语言中的IF_THEN_ELSE语句和CASE语句,适用于要求根据不同条件作不同处理的情况。

I F_THEN_ELSE语句可以引出两个分支。

C ASE语句则可以引出多个分支。

CASE结构可以使用跳跃表法实现,使程序能根据不同的条件转移到多个程序分支中去。

跳跃表法是一种很有用的分支程序设计方法。

●分支程序两种基本结构的共同特点是:运行方向是向前的,在某一种特定条件下,只能执行多个分支中的一个分支。

●分支程序设计方法条件转移指令——一般用来产生程序的分支,下面来看一个例子。

例如:在附加段中,有一个按从小到大顺序排列的无符号数数组,其首地址存放在DI寄存器中,数组中的第一个单元存放着数组长度。

在AX中有一个无符号数,要求在数组中查找(AX),如找到,则使CF = 0,并在SI中给出该元素在数组中的偏移地址;如未找到,则使CF = 1。

✓对于一个已经排序的数组,可以采用折半查找法以提高查找效率。

所谓折半查找法先取有序数组的中间元素与查找值相比较,如相等则查找成功;如查找值大于中间元素,则再取高半部的中间元素与查找值相比较;如查找值小于中间元素,则再取低半部的中间元素与✓折半查找算法的程序流程图如4.2所示。

图E4.2 折半查找算法的程序流程图✓折半查找算法的程序段(不是可以独立运行的完整程序)如下:DATA SEGMENTSTART_ADDR DW ?DATA ENDS;CODE SEGMENTB_SEARCH PROC FARASSUME CS:CSEG, DS:DSEGPUSH DSPUSH AXMOV AX, DSEGMOV DS, AXPOP AX;CMP AX, ES:[DI+2] ; (AX)与第一个元素比较JA CHK_LAST ; (AX)大于第一个元素则转到CHK_LASTLEA SI,ES:[DI+2] ; 第一个元素地址送SIJE EXIT ; (AX)等于第一个元素则找到退出STC ; (AX)小于第一个元素则给CF置1JMP EXIT ; 未找到退出CHK_LAST:MOV SI,ES:[DI] ; 数组长度送SISHL SI,1 ; (SI)*2ADD SI,DI ; SI中存放最后一个元素的地址CMP AX,ES:[SI] ; (AX)与最后一个元素比较JB SEARCH ; (AX)小于最后一个元素则转到SEARCHJE EXIT ; (AX)等于最后一个元素则找到退出STC ; (AX)大于最后一个元素则给CF置1JMP EXIT ; 未找到退出; (AX)大于第一个元素而小于最后一个元素SEARCH: MOV START_ADDR,DI ; 把数组首地址存入内存单元START_ADDR MOV SI,ES:[DI] ; 数组长度送SI以形成中间元素下标EVEN_IDX:TEST SI,1 ; (SI)是否为偶数JZ ADD_IDX ; (SI)为偶数则转ADD_IDXINC SI ; (SI)为奇数则加1变成偶数ADD_IDX: ADD DI,SI ; 计算中间元素地址COMPARE: CMP AX,ES:[DI] ; (AX)与中间元素比较JE ALL_DONE ; 相等则找到转ALL_DONEJA HIGHER ; 大于则转HIGHER; 在低半部查找CMP SI,2 ; (SI)=2?JNE IDX_OK ; 不等转IDX_OKNO_MATCH:STC ; (SI)=2查找失败给CF置1JE ALL_DONE ; 转ALL_DONEIDX_OK: SHR SI,1 ; (SI)/2TEST SI,1 ; (SI)是否为偶数JZ SUB_IDX ; (SI)为偶数则转SUB_IDXINC SI ; (SI)为奇数则加1变成偶数SUB_IDX: SUB DI,SI ; 计算中间元素地址JMP SHORT COMPARE ; 转COMPARE; 在高半部查找HIGHER: CMP SI,2 ; (SI)=2?JE NO_MATCH ; (SI)=2转NO_MATCHSHR SI,1 ; (SI)/2JMP SHORT EVEN_IDX; 转EVEN_IDXALL_DONE:MOV SI,DI ; 比较地址送SIMOV DI,START_ADDR ; 恢复数组首地址EXIT: POP DSRETB_SEARCH ENDPCODE ENDS如果数组如下:LIST DW 12, 11, 22, 33, 44, 55, 66, 77, 88, 99, 111, 222, 333 要求查找的数为(AX)= 55,数组长度为12,则第一次比较的是数组的第六个元素。

微机原理实验一

微机原理实验一

实验一环境搭建及上机基本流程
一、实验目的
1. 学会搭建汇编程序环境.
2. 学会汇编源程序的编辑、汇编、链接、执行的操作。

3. 学会使用调试工具DEBUG 的基本命令。

二、实验环境
1. 硬件:PC 微机
2. 软件:DOSBox、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE
三、实验内容
1.前期准备
2.建立ASM 源程序
3.EXE 汇编源程序产生OBJ 目标文件
4.用LINK.EXE 产生EXE 可执行文件
5.运行程序
6.调试工具DEBUG.EXE 的使用
四、实验总结
在本次上机实验中我学会了一些DOSbox的基本操作包括安装软件建立程序运行程序等,在安装的时候由于自己的粗心也是遇见了一些问题,将masm文件夹没有建立在D盘中导致耽误了很久。

之后初步了解了如何使用汇编语言。

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

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

2.掌握算术运算指令的应用。

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

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

三.沁仪器
586微机一台
四. 实验内容
编写程序求两个十进制数之和,并将和以十进制数的形式送屏慕显示。

编程要求与提示:
[1]从键盘输入两个十进制数(如与),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。

[2]和以二进制数的形式存入SUM以下单元。

[3]将和送到屏幕显示采用子程序形式。

[4]实验步骤如下:
a.用全屛幕编辑软件建立源程序。

b.用汇编程序对源程序进行汇编,形成目标程序。

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

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

五. 源程序
STACK SEGMENT STACK 'STACK'
DW 100H DUP ()
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
FAKE DW 0
KEYBUFFER DB 100
DB
DB 100 DUP()
BUF DB8DUP()「$
ADD1 DW
Al DW
ADD2 DW
A2 DW
SUM DW
SI DW
STRING1 DB 1 PLEASE input decimal 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 t AX
LEA SP.TOP
CALL INPUT1
CALL TRANS1OTO16
MOV ADD1,AX
MOV Al.DX
CALL DISPCR
CALL INPUT1
CALL TRANS1OTO16
MOV ADD2,AX
MOV A2.DX
• ••
CALL DISPCR
MOV SUM,AX
MOV Sl.DX
ADD AX.ADD1
ADC DX,A1
MOV SUM,AX
CALL far ptr ADISP
MOV AH.4CH
MOV AL.O
INT 21H
INPUT1 PROC NEAR
LEA DX.STRING1
MOV AH.09H
INT 21H
MOV AII.OAH
LEA DX.KEYBUFFER
INT 21H
LEA SI.KEYBUFFER+1
ret
INPUT1 endp
TRANS1OTO16 PROC NEAR PUSH CX
PUSH SI; PUSH BX XOR AX.AX
XOR DX.DX
XOR CX.CX
MOV CL.[SI]
INC SI
MOV AL.[SI]
INC SI
SUB AL.30H
DEC CX
JCXZ TRANSF2
MOV BXJO
TRANSFI: CALL MULAXI
JO TRANSF.ERR
MOV DL t[SI]
INC SI
SUB DL.30H
ADD AL t DL
ADC AILO
JC TRANSF ERR
POP DX
LOOP TRANSFI
MOV BX.O
TRANSF2: JMP TRANSF OK
TRANSF ERR: MOV BX,-1 TRANSF_OK: POP SI
POP CX
ret
TRANS1OTO16 endp
MULAXI PROC NEAR
PUSH CX
PUSH AX
MOV AX.DX
MUL BX
MOV CX,AX
POP AX :
XOR DX.DX
MUL BX
PUSH AX
MOV AX XX
ADD AL.DL
ADC AILDH
MOV DX,AX
POP AX
POP CX
ret
MULAXI endp
DISPCR PROC NEAR PUSH AX
PUSH DX
MOV AH.2
MOV DL.OAH
INT 21H
MOV AH.2
MOV DL.ODH
I NT 21H
POP DX
POP AX
ret
DISPCR endp
ADISP PROC FAR PUSH AX
PUSH CX
PUSH DX
PUSH BX
LEA SLBUF+7
MOV BX.1OOOO
>
DIV BX
PUSH AX
MOV AX,DX
XOR DX.DX
MOV BXJO
MOV CX.4
LI: DIV BX
MOV [SI],DL
)
XOR DL t DL
ADD BYTE PTR [SI1.30H DEC SI
LOOP LI
CMP SI,OFFSET BUF
JC L2
POP AX
MOV CX.4
JMP LI
L2:
LEA DX.BUF
MOV AH.09H
INT 21H
POP BX
POP DX
POP CX
POP AX
retf
ADISP endp
CODE ENDS
END START
五、实验体会
实验中遇到的问題以及解决方法:在这几次的编程实验中,我遇到了许多问题。

首先,在最开始的时候,无论怎么输入都显示:'masm'不是內部或外部命令,也不是可运行的程序或批处理文件。

后来发现把自己编写的asm文件放到E盘masm文件夹里就行了,之后的每一步实验按照要求一步一步做,就都能出来结果。

还有就是不懂得如何输出自己所得到的结果,于是先抄写课本上所给的程序,当出现自己想要的结果之后,再与同学讨论输出结果的语句,充分理解其内涵。

心得体会:通过几次的上机实验课,我懂得了如何使用txt文档编写asm文件。

然后对其进行编译和连接。

当完成上述过程后,可以使用DEBUG功能来对程序进行调试,这样,就可以清楚地看到每一步运行时各个寄存器的状态。

同时,通过自己编译程序,我能够更好地理解课本中的许多程序,也能够自己编写一些简单的程序。

总而言之,通过这几次的上机实验课,我学会了通过用计算机编译程序来处理自己在理论课学习上遇到的各种问题。

希望在以后的实验中能够积累的越来越多,对此体会也越来越深。

相关文档
最新文档