微机原理实验报告——统计数据个数程序

合集下载

北京邮电大学微机原理软件实验报告

北京邮电大学微机原理软件实验报告

信息与通信工程学院微机原理软件实验报告班级:姓名:学号:班内序号:时间:微机原理软件实验·报告实验一DEBUG 的使用一、实验目的1.掌握汇编程序的编辑,编译,连接和执行的全过程;2.学习和掌握用DEBUG 调试程序的方法。

二、实验内容1. 用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20 ;(自定)B DB 15 ;(自定)Y DB 3 DUP (0)Z DB 0, 0DAT ENDSSTA SEGMENT STACKDW 50 DUP (?)STA ENDSCOD SEGMENTASSUME CS: COD, DS: DATSTAR PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATMOV DS, AXMOV AX, STAMOV SS, AXMOV AL, AMOV Z, ALMOV Z+1, ALCALL SUB1MOV AL,B微机原理软件实验·报告MOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL, ZMOV AH, Z+1MUL AHADD WORD PTR Y, AXADC BYTE PTR[Y+2], 0RETSUB1 ENDPCOD ENDSEND STAR2. 通过编译,连接形成可执行文件。

3. 用DEBUG 将可执行文件调入,并进行调试。

1) 用D 命令观察数据区在内存中的具体内容,记录单元A 和B 的具体地址。

2) 用U 命令对目标代码反汇编,观察反汇编后的结果。

注意发现源程序的起始位置,并记录这个起始地址。

3) 用T 命令作单步跟踪调试。

比较每条指令执行后的结果和原来的理解是否一致,得出程序运行的结果:它们是写在什么单元,具体内容是什么;并判断结果是否正确。

微机原理统计个数

微机原理统计个数

微机原理统计个数微机原理统计个数通常是指在微机原理领域中的一些常用数值,如寄存器个数、地址总线个数、数据线个数等。

下面我将从不同的方面来介绍微机原理统计个数。

1. 寄存器个数:在微机原理中,寄存器是用于暂时存储数据的重要部件,通常分为通用寄存器、专用寄存器和数据指针寄存器等。

在不同的微处理器架构中,寄存器的个数也有所不同。

例如,Intel 8086处理器有14个16位通用寄存器,其中包括AX、BX、CX、DX等;而Intel Core i7处理器有16个64位通用寄存器,其中包括RAX、RBX、RCX、RDX等。

2. 地址总线个数:地址总线是用于传输地址信息的一组线,它决定了微机所能寻址的内存空间的大小。

例如,8086处理器有20根地址总线,最大能够寻址的内存空间为1MB;而80286处理器有24根地址总线,最大能够寻址的内存空间为16MB。

3. 数据总线个数:数据总线是用于传输数据的一组线,它决定了微机在一次传输中能够传输的数据量。

例如,8086处理器有16根数据总线,可以同时传输16位的数据;而80386处理器有32根数据总线,可以同时传输32位的数据。

4. 控制总线个数:控制总线是用于传输控制信号的一组线,它们用于控制各个部件的工作状态以及数据的传输过程。

例如,8086处理器有4根控制总线,分别是RD(读)、WR(写)、M/IO(内存/外设)、INTR(中断请求)。

5. 中断信号个数:中断是用于处理外部事件的一种机制,当外部事件发生时,微机会暂停当前任务,转而执行中断服务程序。

不同的微机架构支持的中断信号个数也不同。

例如,8086处理器支持256个中断源,使用中断向量表来管理中断服务程序;而80286处理器支持4096个中断源,使用中断描述符表来管理中断服务程序。

6. 输入输出端口个数:输入输出端口用于与外部设备进行数据交互,它们通常分为输入端口和输出端口。

不同的微机原理中,支持的输入输出端口个数也有所不同。

微机原理实验报告

微机原理实验报告

软件实验四:统计显示输入的各类字符实验内容从键盘键入字母数字串,统计各类字符个数并以十进制形式在显示器上显示出来。

显示格式要求1、在显示器上显示提示信息:Pleace input any digital and letter string2、在显示器上显示The string you inputed is:XXXXXXXXXX3、在显示器上分行显示十进制统计结果The Nembers of Digital is:XXThe Nembers of Capital Letters is:XXThe Nembers of Small Letters is:XX4、在显示器上显示提示信息Are you continue?(Y/N)按Y继续1~3的统计显示过程,按N或其它字符均退出统计返回DOS。

这里建议:不区分输入Y或N的大小写,均为有效。

程序要求:1、提示字符串的显示功能用宏指令INOUT实现2、回车换行用CRLF宏指令实现3、单个字符输入用INPUT宏指令实现4、分类统计功能由子程序TONGJI实现5、二进制转十进制并显示功能由子程序BTOD 实现流程图:统计等过程与前面的实验相同,总的流程图及二、十进制的数转化流程图如下:实验程序:CRLF MACRO ;回车宏定义MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HENDMINOUT MACRO ADDRESS ;字符串显示的宏定义LEA DX,ADDRESSMOV AH,9INT 21HENDMOUTPUT MACRO ;字符显示的宏定义MOV DL,LABMOV AH,2INT 21HENDMINPUT MACRO ;单个字符输入的宏定义MOV AH,1INT 21HENDMDATA SEGMENT ;数据段定义常用的字符和存储单元SHUZI DB 0DAXIE DB 0XIAOXIE DB 0BUFSIZE DB 50 ;为键入的字符串定义存储地址ACTCHAR DB ? ;统计输入字符串的字符个数CHARTEXT DB 50 DUP(?)DB '$'MESG1 DB 'The Nubers of Digital is:$' ;常用的几个字符串MESG2 DB 'The Nubers of Capital Letters is:$'MESG3 DB 'The Nubers of Small Letters is:$'TISHIYU1 DB 'Please input any digital and letter string!$'SHUCHU DB 'The string you input is:$'TISHIYU2 DB 'Are you continue?(Y/N)$'LAB DB 'H$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:PUSH DX ;初始化MOV AX,0PUSH AXMOV AX,DATAMOV DS,AXINOUT TISHIYU1 ;提示键入字符串CRLFMOV DX,OFFSET BUFSIZE ;存储键入字符串的首地址MOV AH,0AHINT 21HINOUT SHUCHU ;输出定义的提示的字符串MOV BH,0MOV BL,ACTCHARMOV CHARTEXT[BX],'$'MOV DX,OFFSET CHARTEXTMOV AH,09H ;显示所键入的字符串INT 21HCRLFCALL TONGJI ;调用子过程,统计各类字符MOV DI,0745HMOV AL,SHUZIMOV [DI],ALMOV AL,DAXIEINC DIMOV [DI],ALMOV AL,XIAOXIEINC DIMOV [DI],ALMOV DI,0745HCRLFINOUT MESG1 ;将统计结果按要求的格式显示在DOSMOV BL,[DI]CALL BTOD ;调用子过程实现二进制到十进制的转化及显示CRLFINC DIINOUT MESG2MOV BL,[DI]CALL BTODCRLFINC DIINOUT MESG3MOV BL,[DI]CALL BTODCRLFINOUT TISHIYU2 ;输出提示语是否继续CRLFINPUTCRLFCMP AL,'Y' ;不区分大小写的识别是否继续JNE NT1JMP STARTNT1:CMP AL,'y'JNE K2 ;不能响应的字符需重新输入JMP START ;继续则重复运行上述程序K2: MOV AH,4CH ;不继续则返回DOSINT 21HTONGJI PROC ;定义子过程,实现各类字符的统计MOV AX,DATAMOV DS,AXXOR AX,AXMOV SHUZI,0MOV DAXIE,0MOV XIAOXIE,0LEA SI,CHARTEXTMOV CL,ACTCHAR ;ACTCHAR即键入字符串的长度CLDNEXT: LODSBCMP AL,39HJNC LOOP1INC SHUZIJMP AGINLOOP1: CMP AL,61HJNC LOOP2INC DAXIEJMP AGINLOOP2: INC XIAOXIEAGIN: LOOP NEXTTONGJI ENDPBTOD PROC ;子过程实现二、十进制的转换即显示MOV BH,0L0:CMP BL,0AHJAE L1JMP L2L1:SUB BL,0AH ;是否大于九INC BH ;大于的时候向高位进一JMP L0L2:ADD BL,30H ;小于九则直接显示ADD BH,30HMOV DL,BHMOV AH,02HINT 21HMOV DL,BLMOV AH,02HINT 21HRETBTOD ENDPCODE ENDSEND STARTEND START实验结果:。

微机原理实验一报告

微机原理实验一报告

微机原理实验一1.DEBUG 的基本操作:(1)从WINDOWS 进入DOS 之后,输入命令启动DEBUG:C:>DEBUG 回车(2)输入R 命令,查看和记录CPU 各个寄存器的内容:-R 回车看到什么?AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=0100 NV UP EI PL NZ NA PO NC 16D3:0100 0000 ADD [BX+SI],AL DS:0000=CD(3)输入 A 命令,汇编下面的字符“WINDOWS”显示程序(DEBUG 调试环境中,默认为十六进制,因此源程序中十六进制数后面不写H):-A 100 ;从偏移地址是0100H 处开始写指令MOV AH,2MOV DL, 57 ;57H 是“W”的ASCII 码INT 21 ;INT 21 是DOS 功能调用,AH=2 代表2 号功;能。

这3 句合起来的功能是:显示DL 中的字符MOV DL, 49INT 21MOV DL, 4EINT 21MOV DL, 44INT 21MOV DL, 4FINT 21MOV DL, 57INT 21MOV DL, 53INT 21INT 3 ;功能是产生一个断点,不要省略(4)输入U 命令反汇编上面的程序:-U 100问:这里100代表什么?反汇编从0100开始(5)输入G命令连续运行上面的程序,记录运行结果:-G=100AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=0100 NV UP EI PL NZ NA PO NC 16D3:0100 B402 MOV AH,02(6)输入E命令把上面程序中的数据57,49,4E,44,4F,57,53依次分别改为57,45,4C,43,4F,4D,45:-E 103 回车(以下同)-E 107-E 10B-E 10F-E 113-E 117-E 11B(7)输入D命令查看程序机器码的存放情况:-D 100 11E ;看从100开始到11E的机器码(8)输入G命令再连续运行程序,并记录运行结果:-G=100WELCOMEAX=0245 BX=0000 CX=0000 DX=0045 SP=FFEE BP=0000 SI=0000 DI=0000DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=011E NV UP EI PL NZ NA PO NC 16D3:011E CC INT 3(9)依次输入下面的T命令(单步执行)和G命令(设置断点并启动运行),记录各命令的运行结果:-T=100 回车-G=100 106 回车-G=100 10A 回车-G=100 10E 回车-G=100 11E 回车T=100AX=0245 BX=0000 CX=0000 DX=0045 SP=FFEE BP=0000 SI=0000 DI=0000DS=16D3 ES=16D3 SS=16D3 CS=16D3 IP=0102 NV UP EI PL NZ NA PO NC 16D3:0102 B257 MOV DL,57-g=100 106W-g=100 10aWE-g=100 10eWEL-g=100 11eWELCOME2.一字节十六进制数转换为ASCII码(只考虑大写字母)用E命令在DS:1000单元中存放十六进制数5A,用A命令从CS:0100单元开始存放下面程序的机器码,并调试运行(DEBUG调试环境中,源程序中十六进制数后面不写H):CS:0100 8D360010 LEA SI,[1000] ;将EA=1000送入SI中0104 8D3E2010 LEA DI,[1020] ;将EA=1020送入DI中0108 8A04 MOV AL,[SI] ;(AL)←((SI))010A 240F MOV BL,AL ;将AL中的一个字送入BL010C 240F AND AL,0F ;(AL)←(AL)^(01H)010E E80E00 CALL 011F ;调用EA=011F中的指令0111 80E30 AND BL,F0 ;(BL)←(BL)^(F0H)0114 B90400 MOV CX,4 ;将立即数4送入CX中0117 D2EB SHR BL,CL ;将BL中的内容左移CL;中指出的位数,且每次移位最低位补0 0119 88D8 MOV AL,BL ;将BL中的一个字送入AL011B E80100 CALL 011F ;调用EA=011F中的指令011E F4 RET :返回指令011F 3C09 CMP AL,09 ;(AL)-09,根据结果设置标志位0121 7602 JBE 0125 ;执行EA=0125的指令0123 0407 ADD AL,07 ;(AL)←(AL)+07H0125 0430 ADD AL,30 ;(AL)←(AL)+30H0127 8805 MOV [DI],AL ;(AL)送入EA=(DI)的单元中0129 47 INC DI ;(DI)←(DI)+1012A C3 RET ;返回指令运行结果:1)写出执行上述程序的命令行-G=1002)程序执行后,[1020]=_____41_____,[1021]=___35______。

微机原理实验报告

微机原理实验报告

微机原理实验报告一、实验目的本次微机原理实验的主要目的是通过实际操作和观察,深入理解微机系统的工作原理和组成结构,掌握微机系统的编程和调试方法,提高我们对微机原理的实际应用能力。

二、实验设备1、计算机一台2、微机原理实验箱一套三、实验内容1、 8255 并行接口实验了解 8255 芯片的工作原理和编程方法。

通过编程实现 8255 芯片的 A 口、B 口、C 口的输入输出控制。

2、 8253 定时/计数器实验掌握 8253 芯片的工作方式和编程要点。

利用 8253 芯片实现定时和计数功能。

3、 8259 中断控制器实验学习 8259 芯片的中断管理机制。

编写中断服务程序,实现中断响应和处理。

四、实验原理1、 8255 并行接口8255 是一种可编程的并行接口芯片,具有 A、B、C 三个 8 位端口。

通过对控制字的编程,可以设置各个端口的工作方式为输入或输出。

2、 8253 定时/计数器8253 包含三个独立的 16 位计数器,每个计数器可以工作在不同的方式下,如方式 0 到方式 5。

通过对计数器的初值设置和控制字编程,可以实现定时和计数功能。

3、 8259 中断控制器8259 用于管理外部中断请求,可实现中断优先级的判断和中断嵌套。

通过对 8259 的初始化编程,可以设置中断触发方式、中断向量等。

五、实验步骤1、 8255 并行接口实验连接实验电路,将 8255 芯片与实验箱上的相关引脚连接好。

编写程序,设置 8255 的控制字,使 A 口为输出,B 口为输入。

向 A 口输出数据,从 B 口读取数据,并观察实验结果。

2、 8253 定时/计数器实验连接实验电路,将 8253 芯片与实验箱上的相关引脚连接好。

编写程序,设置 8253 计数器 0 的工作方式为方式 2,初值为 1000。

启动计数器,观察输出引脚的波形变化。

3、 8259 中断控制器实验连接实验电路,将 8259 芯片与实验箱上的相关引脚连接好。

微机原理的实验报告

微机原理的实验报告

微机原理的实验报告一、实验目的本实验旨在深入理解微机原理的相关知识,并通过实践操作,掌握微机原理的实验方法与技巧。

二、实验内容1. 搭建微机实验系统:根据实验所需,搭建适当的微机实验系统,包括各种硬件设备的连接与设置。

2. 硬件接口的实验:通过连接不同的硬件接口,进行实验操作,学习硬件接口的使用方法和原理。

3. 程序设计与调试实验:使用相应的汇编语言或高级语言,编写程序并进行调试,观察程序的执行结果。

4. 中断实验:通过调用不同的中断服务例程,进行实验操作,学习中断的使用原理和应用场景。

三、实验步骤与结果1. 实验步骤:(1) 搭建微机实验系统:按照实验指导书的要求,连接各种硬件设备,确保能够正常工作。

(2) 硬件接口的实验:选择一个硬件接口,例如并行口,通过编写相应的程序,实现读取和输出数据的功能。

观察实验现象并记录。

(3) 程序设计与调试实验:根据实验要求,选择适当的编程语言,编写相应的程序,并进行调试。

观察程序的执行结果,并记录相关数据。

(4) 中断实验:选择一个中断服务例程,例如键盘中断,通过编写相应的程序,实现对键盘输入的响应。

观察实验现象并记录相关数据。

2. 实验结果:(1) 硬件接口的实验结果:通过编写程序并连接硬件接口,成功读取和输出数据,实现了相应的功能。

(2) 程序设计与调试实验结果:编写的程序能够正确执行,并得到了预期的结果。

(3) 中断实验结果:编写的程序能够响应相应的中断信号,并实现了对键盘输入的处理。

四、实验分析与讨论1. 实验分析:通过本次实验,我们深入了解了微机原理的相关知识,并通过实践操作,掌握了微机原理的实验方法和技巧。

2. 实验讨论:在实验过程中,我们遇到了一些困难和问题,例如硬件接口的连接和调试,程序的编写和调试等。

但通过彼此的合作与讨论,我们最终解决了这些问题,并成功完成了实验。

五、实验总结通过本次实验,我们对微机原理有了更深入的理解,并通过实践操作,掌握了微机原理的实验方法和技巧。

微机原理(单片机汇编)实验报告

微机原理(单片机汇编)实验报告

软件实验报告软件实验一一、实验目的1.熟悉软件实验的基本步骤和汇编程序的调试方法;2.了解内存块的移动方法;3.了解将十六进制数转换成ASCII值的方法。

二、实验原理用MOV和MOVX指令可以进行数据的赋值和移动,用循环可以完成大量数据的复制。

三、实验内容及步骤1、软件设置为模拟调试状态,在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。

打开CPU窗口,观察CPU窗口各寄存器的变化。

打开View菜单中的Memory Window,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。

在Address窗口输入X:8000H后回车,观察8000H-800FF起始的256个字节单元的内容。

2、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。

打开View菜单中的Memory Window,在Address 窗口的Memory#1输入X:3000H后回车,点击运行按钮后, 在Memory#2输入X:4000H后回车,观察外部RAM3000H和4000H中的内容。

3、添加将片内30H-3FH单元的内容复制片外片外1030H~103FH中的源程序,编译运行,观察比较30-3FH单元中的内容和片外1030H-103FH中的内容。

4、添加将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中的源程序,编译运行,观察结果。

5、添加求内部RAM 30H—37H单元中8个无符号数的算术和的源程序,8个无符号数设定为25H,36H,4AH,65H,7FH,82H,9BH,1DH,观察39H,38H中的数字是否分别为02H,C3H。

四、实验结果1.步骤1的结果为8000H-80FFH的内容都为1.2.步骤2的结果为3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同。

微机原理实验报告

微机原理实验报告

微机原理实验报告1实验的目的是学习8086/8088指令系统中一些基本指令的用法和程序的基本方法。

2熟悉8086.8088汇编语言程序在PC机上建立、组装、连接、调试和运行的全过程。

实验中,a、B、C、D四个数字以单字节压缩BCD码的形式存储在num存储器的四个单元中。

然后,计算(a+b)-(c+D)并以Y1为单位,结果显示在屏幕上。

在调试过程中,不断更改a、B、C、D的内容,并检查结果。

本文提供了几组数据:1。

A=09,B=06,C=04,d=072。

A=38,B=41,C=29,d=34 3。

A=70,B=23,C=42,d=41 4。

A=63,B=73,C=62,d=50 3。

实验调试过程1。

使用DOS工具掩码和链接生成EXE文件2。

使用调试工具编译并中断单击调试器。

1使用-U命令反汇编程序②设置断点1检查a+B的结果是否正确。

结果在23小时存储在A1中,结果正确。

③设置断点2检查C+D的结果是否正确。

如果结果存储在Al中30小时,则结果正确。

④运行程序后,使用-D命令检查最终结果是否正确。

数据段中的第五个地址是计算结果,它是正确的。

⑤尤其在(a+b)-(c+D)中使用-E。

如果前者比后者小,结果可能不正确。

这时,我们应该判断借阅符号是否为负数。

如果是负数,则使用(c+D)-(a+b),并在结果中输出一个负号。

三。

已成功调试并检查结果。

直接在DOS命令下运行程序添加.exe 或者在调试期间使用-G命令运行程序,并检查程序结果。

4实验程序和DSEG程序框图。

定义数据段编号DB 13h、27h、11h、12h;定义A、B、C、D Y1 DB?DSEG结束;数据段结束sseg段标准堆栈;定义堆栈DB 20 dup(?)sseg结束cseg段假设CS:cseg,ds:DSEG,SS:sseg start:MOV AX,DSEG MOV ds,AX MOV AX,sseg MOV SS,AX MOV AL,[NUM];将A复制到AL以添加AL,[NUM+1];A+B DAA MOV CL,AL;保存AL MOV AL,[NUM+2];将C复制到AL 以添加AL,[NUM+3];C+D DAA SUB CL,AL;(A+B)-(C+D)MOV AL,CL DAS MOV[NUM+4],AL MOV BL,AL;save AL和AL,0F0H;R SHIFT MOV CL,4 SHR AL,CL ADD AL,30H;获取ASCII MOV DL,AL MOV AH,02h int 21h MOV AL,BL;还原AL和AL,0Fh;取低位4位,加上AL,30H MOV DL,AL MOV AH,02h int 21h MOV ax,4c00h int 21h cseg end start end end 5。

微机原理与单片机实验报告

微机原理与单片机实验报告

微机原理与单片机实验报告Prepared on 22 November 2020北京联合大学信息学院实验报告课程名称:微型计算机原理学号:姓名:2012 年 6 月 9 日目录实验1 EMU8086模拟器的使用一实验要求利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的:熟悉EMU8086实验环境三 EMU8086环境:1 模拟器编辑窗口2 模拟器调试窗口四实验内容实验内容1:新建文件。

运行 emu80861. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码:MOV AX, 1020HMOV BX, 2030HMOV AX, BXADD AX, BXMOV [BX], AXMOV [2032H], AXHLT2. 编译:单击“编译”按钮,对程序段进行编译;3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。

4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。

5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。

6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。

7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为 400毫秒,单击“全速”按钮,运行程序,8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序的关联。

10.将“存储器”中地址改为1000:0100,并将从其开始的连续10个单元的内容改为55H。

实验内容2:运行范例在模拟器编辑窗口中1.点击典型范例2.选择:hellow,word程序,编译,运行,观察结果。

微机原理实验报告(排序,计算)

微机原理实验报告(排序,计算)

《微机原理与接口技术实验报告》汇编语言循环结构程序设计一、实验目的1. 理解各种指令的功能。

2. 进一步学习程序的调试。

二、实验内容:1.编制程序,对这组数进行排序,并输出原数据及排序后数据; 2.利用DEBUG 调试工具,用D0命令,查看排序前后,内存数据的变化; 3.去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值; 4.用学过的压栈PUSH 和出栈POP 指令,将平均值按位逐个输出; 5.将平均值转化为二进制串,并将这组二进制串输出。

6. 所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。

三、程序流程图四、程序清单DATA SEGMENTSR DB 100,?,50 DUP (?)VAR DW 5 DUP (0)AVG DW ?TEN DW 10P DW3D DW 2X DW?Y DW?MESG1 DB 13,10,'PLEASE INPUT:$'XS1 DB 13,10,'ORIGIN:$'XS2 DB 13,10,'NOW:$'XS3 DB 13,10,'MAX:$'XS4 DB 13,10,'MIN:$'XS5 DB 13,10,'AVG:$'XS6 DB 13,10,'AVG2:$'DATA ENDSSTACK SEGMENTDW 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV ES,AXMOV DX,OFFSET MESG1MOV AH,09HINT 21HLEA DX,SRCLDMOV CX,5LEA SI,SRADD SI,2LEA DI,VARIN_LOOP:MOV x, 0MOV Y,0_INX:MOV AH, 01HINT 21H;-------------------------------- CMP AL, '0'JB OKKCMP AL, 3AHJB SUB_30H;-------------------------------- JMP OKK;-------------------------------- SUB_30H:SUB AL, '0'MOV AH, 0MOV Y, AXMOV AX, xMUL TENADD AX, YMOV x, AXJMP _INX;-------------------------------- OKK:MOV AX,xSTOSWINC SILOOP IN_LOOP;-------------------------ORIGIN--- MOV DX,OFFSET XS1MOV AH,09HINT 21HMOV CX,5LEA SI,VARLOOPXS1:CALL XSLOOP LOOPXS1;-------------------------------CLDMOV CX,4MOV DX,1LOOPPX: CALL PXINC DXLOOP LOOPPX;----------------------------NOW-- MOV DX,OFFSET XS2MOV AH,09HINT 21HMOV CX,5LEA SI,VARLOOPXS2:CALL XSLOOP LOOPXS2;----------------------------MAX--- MOV DX,OFFSET XS3MOV AH,09HINT 21HLEA SI,VARADD SI,8CALL XS;-----------------------------MIN--- MOV DX,OFFSET XS4MOV AH,09HINT 21HLEA SI,VARCALL XS;-----------------------AVG------ MOV DX,OFFSET XS5MOV AH,09HINT 21HMOV AX,[SI]MOV BX,[SI+2]ADD AX,BXMOV BX,[SI+4]ADD AX,BXCWDIDIV PLEA SI,AVGMOV [SI],AXCALL XS;----------------------AVG2---------- MOV DX,OFFSET XS6MOV AH,09HINT 21HMOV CX,16LEA SI,AVGMOV AX,[SI]LPAVG: CWDSHR AX,1 ;to CFJB ONEMOV DX,0JMP PPONE: MOV DX,1PP: PUSH DXLOOP LPAVGMOV CX,16AVG2XS:POP DXADD DL,30HMOV AH,02HINT 21HLOOP AVG2XSEXIT: MOV AH,4CHINT 21HXS PROCLODSWMOV BX,1ZL1: CWDIDIV TENPUSH DXCMP AX,0JZ ZL2INC BXJMP ZL1ZL2: POP DXADD DL,30HDEC BXMOV AH,2INT 21HJNZ ZL2MOV DL,20HMOV AH,02HINT 21HRETXS ENDPPX PROCPUSH CXMOV CX,5SUB CX,DXMOV SI,0RECMP: MOV AX,VAR[SI]CMP AX,VAR[SI+2]JLE NOCHXCHG AX,VAR[SI+2]XCHG AX,VAR[SI]NOCH: ADD SI,2LOOP RECMPPOP CXRETPX ENDPCODE ENDSEND START五、运行结果按照实验要求,我们输入了“300,250,280,240,260,”。

微机原理实验报告程序

微机原理实验报告程序

实验2—1(1)定义字DA TA SEGMENTA DW 855CHB DW 0AB43HNUM DW ?DA TA ENDSCODE SEGMENT Assume CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV AX,AMOV BX,BADD AX,BXMOV NUM,AXMOV AH,4CHINT 21HCODE ENDSEND START实验2—1直接寻址DA TA SEGMENTA DB 5CH,85HB DB 43H,0ABHNUM DW ?DA TA ENDSCODE SEGMENT Assume CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV AX,AMOV BX,BADD AX,BXMOV NUM,AXMOV AH,4CHINT 21HCODE ENDSEND START实验2—3拆字DA TA SEGMENTORG 1000HNUM DW 1234HORG 4000HA DB ?B DB ?DA TA ENDSCODE SEGMENTAssume CS:CODE,DS:DA TASTART:MOV AX,NUMMOV A,AHMOV B,ALMOV AH,4CHINT 21HCODE ENDSEND START实验3—3DA TA SEGMENTINFOR1 DB 0AH,0DH, 'Please Press any key to input a letter:$' ;0AH为换行,0DH为回车INFOR2 DB 0AH,0DH, 'You Input a lowercase letter! $'INFOR3 DB 0AH,0DH, 'You input a uppercase letter! $'INFOR4 DB 0AH,0DH, 'You input a digit! $'INFOR5 DB 0ah,0dh, 'You input other letter! $'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET INFOR1MOV AH,09H ;输出字符串INFOR1;MOV AH,1INT 21HMOV AH,01H ;从键盘输入一个字符INT 21HCMP AL, '0'JB OTHER ;小于0,为其他字符CMP AL, '9'JBE DIGIT ;大于等于0,小于等于9,为数字CMP AL, 'A'JB OTHERCMP AL, 'Z'JBE UPPERCMP AL, 'a'JB OTHERCMP AL, 'z'JBE LOWERJMP PENDLOWER: MOV DX,OFFSET INFOR2 MOV AH,09HINT 21HJMP PENDUPPER: MOV DX,OFFSET INFOR3 MOV AH,09HINT 21HJMP PENDDIGIT: MOV DX,OFFSET INFOR4MOV AH,09HINT 21HJMP PENDOTHER: MOV DX,OFFSET INFOR5 MOV AH,09HINT 21HJMP PENDPEND: MOV AH,4CHINT 21HCODE ENDSEND START实验3—1DA TA SEGMENTSTRING DB 'I am a student'LEN EQU $-STRINGDA TA ENDSCODE SEGMENTAssume CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET STRINGMOV CL,LENNEXT:MOV AL,[BX]CMP AL,'a'JB LOPCMP AL,'z'JA LOPSUB AL,20HMOV [BX],ALLOP:INC BXDEC CLJNZ NEXTMOV AH,4CHINT 21HCODE ENDSEND START实验4—1DA TA SEGMENTA DB '1234567890'N EQU $-AB DB N DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,ALEA DI,BADD DI,NMOV CX,NMOVE:MOV AL,[SI]MOV ES:[DI],ALINC SIDEC DILOOP MOVEMOV AH,4CHINT 21HCODE ENDSEND START实验4—2DA TA SEGMENTORG 1000HDB 100 DUP('A')ORG 1050HDB 100 DUP('B')DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATAMOV DS,AX;MOV ES,AXMOV SI,1000HMOV DI,1050HMOV CX,100AGAIN: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START实验4—3DA TA SEGMENTBUF DW 1,2,3,4,5,6,7,8,9,0MAX DW 0DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFMOV CX,10AGAIN: MOV AX,[SI]CMP AX,MAXJB NEXTMOV MAX,AXNEXT: INC SIINC SILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START实验6—1DA TA SEGMENTSTR DB 'Please input a character:$'STR1 DB 0ah,0dhSTR3 DB ?,'H$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRMOV AH,09HINT 21HMOV AH,01HINT 21HMOV STR1,ALMOV DX,OFFSET STR1MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验6—2DA TA SEGMENTSTR1 DB 0dh,0ah,'Please input a character:$'STR2 DB 0dh,0ah,'You input a number!$'STR3 DB 0dh,0ah,'The character you input is not a number!$' DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STR1MOV AH,09HMOV AH,01HINT 21HCMP AL,30HJB NEXT1CMP AL,39HJA NEXT1MOV DX,OFFSET STR2MOV AH,09HINT 21HJMP NEXT2NEXT1:MOV DX,OFFSET STR3 MOV AH,09HINT 21HNEXT2:MOV AH,4CHINT 21HCODE ENDSEND START实验6—3DA TA SEGMENTinfo1 db 0dh,0ah, 'input string:$' info2 db 0dh,0ah, 'output string:$' STR DB 20 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRADD SI,10MOV [SI],BYTE PTR '$'MOV DX,OFFSET info1MOV AH,09HINT 21HMOV CX,10AGAIN:MOV AH,01HINT 21HDEC SIMOV [SI],ALLOOP AGAINMOV DX,OFFSET STRMOV AH,09HMOV AH,01HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验6—1;输入字符后回车CODE SEGMENTASSUME CS:CODE,DS:CODE START:MOV AX,CODEMOV DS,AXMOV AH,01HINT 21HMOV DL,0AHINT 21HPUSH AXAND AX,00FFHMOV CL,4SHR AL,CLADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP AXAND AL,0FHCMP AL,0AHJNC NEXTADD AL,30HJMP finalNEXT:ADD AL,37Hfinal:MOV DL,ALMOV AH,02HINT 21HMOV DL,'H'INT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验6—3DATA SEGMENTinfo1 DB 0dh,0ah,'input string:$' info2 DB 0dh,0ah,'output string:$' STR DB 0Bh,0,20 dup(?)n EQU $-STRDB '$'DATA ENDSCODE SEGMENTASSUME cs:code,ds:data START:mov ax,DATAmov DS,axlea DX,info1mov AH,09HINT 21Hlea DX,STRmov AH,0AHINT 21HMOV CX,0lea SI,STRmov DI,SIadd DI,n-1INC SIINC SInumber:MOV BL,[SI]CMP BL,0DHJZ NEXTINC CXINC SIJMP numberNEXT:lea SI,STRINC SIINC SIagain:mov bl,[SI]mov [DI],blINC SIDEC DIloop againlea DX,info2mov AH,09HINT 21HINC DImov DX,DImov AH,09HINT 21Hmov AH,4chINT 21h CODE endsend startcode segment assume cs:code start:mov ah,1int 21hcmp al,1bhjz tjmov bl,almov ch,2rotate:mov cl,4rol bl,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printitadd al,7hprintit:mov dl,almov ah,2int 21hdec chjnz rotatejmp starttj:mov ax,4c00hint 21hcode endsend start。

微机原理软件实验报告

微机原理软件实验报告

信息与通信工程学院微机原理软件实验报告班级:姓名:班内序号:学号:日期:2012年11月实验一 DEBUG地使用一、实验目地:1.掌握汇编程序地编辑,编译,连接和执行地全过程。

2.学习和掌握用DEBUG调试程序地方法.二、实验内容:1.用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20 。

(自定)B DB 15 。

(自定)Y DB 3 DUP(0)Z DB 0,0DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DATSTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AL,AMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSUB1 ENDPCOD ENDSEND STAR2.通过编译,连接形成可执行文件.3.用 DEBUG 将可执行文件调入,并进行调试.(1)用 D 命令观察数据区在内存中地具体内容,记录单元 A 和 B 地具体地址.(2)用 U 命令对目标代码反汇编,观察反汇编后地结果.注意发现源程序地起始位置, 并记录这个起始地址.(3)用 T 命令作单步跟踪调试.比较每条指令执行后地结果和原来地理解是否一致.得出程序运行地结果:它们是写在什么单元,具体内容是什么。

并判断结果是否正确.(4)在子程序 SUB1 地入口处设一断点,用 G 命令执行程序. 在断点处观察堆栈地内容,比较堆栈地内容和程序返回地址是否一致.(5)用 E 命令修改单元 A,B 地内容,重新执行程序,并记录结果.(6)用 M 命令和 A 命令对程序进行修改: 将主程序中最后两条指令 (ADD 和ADC) 修改为一条 CALL SUB1 指令,重新执行程序.(7)退出 DEBUG.4.重新使用编辑软件,把源程序最后一句中地 STAR 去掉.再次生成可执行文件,并用 DEBUG 调入内存.当使用 U 命令时,显示地结果与前一次(未加 STAR) 地结果有何不同?三、预习题:1.熟悉常用地 DEBUG 命令.2.阅读并分析程序地功能.3.若 SS=2000H,SP=FFFFH, 向堆栈中压入 4 字节数据后,如何用 D 命令显示压入堆栈地内容?答:使用debug 指令“d 2000:0000”即可显示压入堆栈地内容,这是因为SP+1 会溢出,变成0000.四、实验过程如上图,通过masm和link命令程序编译连接成功.进入debug中,用u命令查看反编译结果.得出A地地址为:0B88:0000,值为1BH,即十进制地27D;B地地址为:0B88:0001,值为33,即十进制地51D. Y地偏移地址为0002H,Z地偏移地址为0005H.DATA段基地址为0B88H.SUB1子程序段入口地址为003F.如上图所示,用E命令将A和B地值由1EH,33H改为10H,20H,通过d命令重新查看A,B地数值,发现改变成功.通过U命令查看反汇编结果,在CALL SUB1即CALL 003F处设置一个断点,单步调试.上图为用t命令单步运行结果,执行SUB1之后返回主程序时CS为0B88,IP为001A,压入堆栈地IP值已经弹出,CS,IP已经指向下一条指令.上图为用用 M 命令和 A 命令对程序进行修改: 将主程序中最后两条指令 (ADD 和ADC) 修改为一条 CALL SUB1 指令,重新执行程序.如上图所示,将源代码中最后一句END STAR改成EDN,发现编译连接均可通过,但是DEBUG时出现了严重地错误,没有END STAR语句,编译器将不知道代码段地入口地址是多少,导致从数据段开始译码,后续译码全部紊乱.END STAR地作用是指示编译器程序结束,同时告诉编译器程序执行时代码段地入口地址.五、实验总结本次实验我初步了解了汇编语言地调试过程.实验之前我还觉得汇编语言过于抽象,难以看懂.实验中我使用-t与-d相结合地方法,逐步调试并查看该步对寄存器及内存地影响,终于对汇编语言有了入门地认识.实验中应注意以下几点:在debug 过程中,任何存储器单元都无法用标号来识别,要使用它们,只能使用物理地址调用.使用u 指令修改asm 代码时要对照反汇编地结果,若要删去某条指令,可以找到那条指令在代码段地偏移地址,再用u 指令将其修改为NOP(从该指令开始到下一条指令开始地地址-1 处).可以结合r 指令、t 指令、已经用g 指令设置断点来诊断问题.实验二分支、循环程序设计一、实验目地1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单地 DOS 功能调用.二、实验内容1.安排一个数据区,内存有若干个正数,负数和零.每类数地个数都不超过 9.2.编写一个程序统计数据区中正数,负数和零地个数.3.将统计结果在屏幕上显示.4.(扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零地个数.三、预习思考1. 十进制数 0 ~ 9 所对应地 ASCII 码是什么?如何将十进制数 0 ~ 9 在屏幕上显示出来?答:0~9分别对应ASCII码地30H~39H.欲将十进制数0~9显示在屏幕上,只需要用二进制数0~9分别加上30H即可.2. 如何检验一个数为正,为负或为零?你能举出多少种不同地方法?答:方法有多种,现举出两种.一是直接用CMP命令和0比较,然后用JZ 等命令进行判断;二是和0相比是否相等,然后用该数(假设为8位)和10000000相与,取出符号位判断,可区分正负.其余方法大同小异,核心地思想是要么直接和0相比,要么使用逻辑或移位运算,取出符号为进行判断.四、实验流程图五、实验源代码DATA SEGMENTBUFF DB -1,-4,0,1,2,3,4,-1,-2,-3,-4,-5,-8,-10COUNT EQU $-BUFFCOUNT1 DB 0 。

(完整word版)微机原理完整实验报告+程序

(完整word版)微机原理完整实验报告+程序

实验题目8253定时/计数器实验 一、 实验目的与要求: 1. 学会8253芯片和微机接口原理和方法。

2. 掌握8253定时器/计数器的工作方式和编程原理。

二、 实验内容: 1、实验原理 本实验原理图如图 1所示,8253A 的A0、A1接系统地址总线 A0、A1,故8253A 本实验通道2 有四个端口地址,如端口地址表 1所示。

8253A 的片选地址为 48H~ 4FH 。

因此, 仪中的8253A 四个端口地址为 48H 、49H 、4AH 、4BH ,分别对应通道 0、通道1、 和控制字。

采用8253A 通道0,工作在方式3(方波发生器方式),输入时钟CLK0为 输出OUTO 要求为1KHZ 的方波,并要求用接在 GATE0引脚上的导线是接地("0" 甩空("1"电平)来观察GATE 对计数器的控制作用,用示波器观察输出波形。

2、实验线路连接 (1) 8253A 芯片的CLK0引出插孔连分频输出插孔 (2) 8253A 的 GATE0 接+5V 。

实验步骤 (1) 按图1连好实验线路(2) 运行实验程序 1. 按“调试”按钮2. 选“窗口” “进入示波器窗口” ,然后最小化3. 按“运行按钮”4.将模拟示波器窗口打开,选择“串行口 2”,再按 Ctrl + F2按钮即可看到波形 显示“ 8253-1 ”用示波器测量8253A 的OUT2输出插孔,方波输出,幅值0〜4V 三、实验代码: 1MHZ ,电平)或 3、 CODE SEGMENT ASSUME CS:CODE TCONTRO EQU 004BH TCON2 EQU 004AH CONT PORT EQU 00DFH DATA PORT EQU 00DEH DATA1 EQU 0500H START: JMP TCONT TCONT: CALL FORMATCALL LEDDIS P MOV DX,TCONTRO1MHZ 。

微机原理软件实验

微机原理软件实验

微机原理实验报告专业:工业工程姓名:刘雷学号:089094082指导老师:陈全目录软件实验一汇编语言程序的调试与运行 (3)一.实验目的 (3)二.实验内容 (3)三.程序框图 (3)四.程序清单 (4)五.调试步骤 (6)六.思考题 (6)软件实验二分支程序设计 (14)一.实验目的 (14)二.实验内容与要求 (14)三.程序框图 (15)四.程序清单: (16)五.思考题 (17)软件实验三循环程序设计 (18)一.实验目的 (18)二.实验内容与要求 (18)三.程序框图 (19)四.程序清单(将程序补充完整) (20)软件实验四子程序结构 (22)一.实验目的 (22)二.实验内容与要求 (22)三.程序框图: (23)四.部分程序清单 (23)五.步骤 (25)六.思考题 (25)软件实验一汇编语言程序的调试与运行一.实验目的1.学习数据传送和算术运算指令的用法2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。

二.实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DA TA2为首的5个内存单元中,结果送回DATA1处。

三.程序框图图1.1 两个多位十进制相加程序流程图四.程序清单DISP MACRO XMOV DL,X ;要显示的字符送DL寄存器MOV AH,02H ;DOS功能调用号是02HINT 21H ;21H中断程序是DOS功能调用ENDMDATA SEGMENTDATA1 DB '12732'DATA2 DB '06815'N EQU $-DA TA2DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DA TA START:MOV AX,DA TAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXLEA SI,DATA1 ;☆MOV BX,0MOV CX,NCALL DISPL ;显示被加数DISP '+'LEA SI,DATA2MOV BX,0MOV CX,NCALL DISPL ;显示加数DISP '='LEA DI,DA TA1MOV CX,NCALL ADDA ;调用加法子程序LEA SI,DATA1MOV BX,0MOV CX,NCALL DISPL ;显示运算结果DISP 0DHDISP 0AHMOV AX,4C00HINT 21HDISPL PROC ;显示子程序DS1: MOV AH,02HMOV DL,[SI+BX]INT 21HINC BXLOOP DS1RETDISPL ENDPADDA PROC ;加法子程序PUSH CXMOV BX,0AD1: SUB BYTE PTR [SI+BX],30HSUB BYTE PTR [DI+BX],30HINC BXLOOP AD1POP CXPUSH CXMOV BX,N-1 ;☆☆CLCAD2: MOV AL,[SI+BX]ADC AL,[DI+BX]AAAMOV [DI+BX],ALDEC BXLOOP AD2POP CXPUSH CXMOV BX,0 ;☆☆☆AD3: ADD BYTE PTR [DI+BX],30HINC BXLOOP AD3POP CXRET ;☆☆☆☆ADDA ENDPCODE ENDSEND START五.调试步骤1.编辑源程序,建立一个以后缀为.ASM的文件.2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。

微机原理 统计成绩 汇编语言程序

微机原理  统计成绩  汇编语言程序

微机原理统计成绩汇编语言程序题目要求:通过键盘输入需要统计的学生的个数和成绩,按照优秀(>=90),良好,中等,及格,不及格,进行分类,并显示各个等级的人数。

提示:1.要求先输入学生的人数,后输入成绩;程序中输入人数时,若是一位数需按enter 键表示输入人数完成;若是2位数,程序自动跳转至下一步;2.程序按照子程序编写,若要进行改动,可以直接改动或复制所需的子程序,注意变量的传递;3.程序多加了查错的功能,若成绩大于100,则认为输入的成绩错误;4.输入成绩时,成绩之间用一个空格隔开,另外程序长度有限,未引入delete键功能,即不小心输入错误的成绩时,不能用delete删除,以重新成绩,否则会出错。

5.程序已验证无误。

6.本人能力有限,程序仅供初级学习汇编语言者交流与讨论。

DA TA SEGMENTtishi1 DB 'please input number of people:',0DH,0AH,'$' ;显示提示信息tishi2 DB 0DH,0AH,'please input the mark:',0DH,0AH,'$'tishi3 DB 0DH,0AH,'A:','$'tishi4 DB 0DH,0AH,'B:','$'tishi5 DB 0DH,0AH,'C:','$'tishi6 DB 0DH,0AH,'D:','$'tishi7 DB 0DH,0AH,'E:','$'tishi8 DB 0DH,0AH,'ERROR:','$'renshu DW ?MARKS DW 100 DUP(?)A DB 0B DB 0C DB 0D DB 0E DB 0F DB 0SHUJU DB ?SHI DB ?GEI DB ?DA TA ENDSSTACK SEGMENTTOP DB 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV SS,AXLEA DX,tishi1 ;提示输入人数MOV AH,09H ;显示INT 21HXOR BX,BX ;寄存器清零XOR CX,CXXOR AX,AXXOR DX,DXMOV AH,01HINT 21HSUB AL,30H ;ASC码变成十进数MOV BL,ALMOV AH,01HINT 21HCMP AL,0DH ;比较回车?不是**,存储JZ cunrenshuSUB AL,30HMOV DL,ALMOV AL,BLMOV CL,0AHMUL CLADD AL,DLMOV BX,AXcunrenshu:MOV renshu,BXXOR BX,BX ;寄存器清零XOR CX,CXXOR SI,SILEA DX,tishi2 ;提示输入成绩MOV AH,09HINT 21Hshuchengji:MOV AH,01HINT 21HCMP AL,0DH ;是否为回车键JZ jieshu ;是,跳到jieshuCMP AL,20H ;是否为空格JZ cunchengji ;是,跳cunchengjiSUB AL,30H ;变为数字MOV CL,4SHL BX,CL ;左移四位ADD BL,ALJMP shuchengjicunchengji:MOV MARKS[SI],BX ;保存到MARKS中ADD SI,2JMP shuchengjijieshu: MOV MARKS[SI],BXXOR SI,SIMOV CX,renshu ;人数->CXLOP: MOV BX,MARKS[SI] ;比较大小CMP BX,60HJAE MARK_60 ;大于等于60跳MARK_60INC E ;否则E加1JMP QUIT ;跳QUITMARK_60:CMP BX,70HJAE MARK_70INC DJMP QUITMARK_70:CMP BX,80HJAE MARK_80INC CJMP QUITMARK_80:CMP BX,90HJAE MARK_90INC BJMP QUITMARK_90:CMP BX,100HJA SERRORINC AJMP QUITSERROR: INC FJMP QUITQUIT: ADD SI,2 ;指针加2LOOP LOPJZ shuchuA ;CX=0,跳至输出shuchuA:LEA DX,tishi3MOV AH,09HINT 21HXOR BX,BXXOR DX,DXMOV BL,A ;A给SHUJUMOV SHUJU,BLCALL CHANGE ;调用转换子程序CALL SHOW ;调用显示子程序shuchuB:LEA DX,tishi4MOV AH,09HINT 21HMOV BL,BMOV SHUJU,BLCALL CHANGECALL SHOWshuchuC:LEA DX,tishi5MOV AH,09HINT 21HMOV BL,CMOV SHUJU,BLCALL CHANGECALL SHOWshuchuD:LEA DX,tishi6MOV AH,09HINT 21HMOV BL,DMOV SHUJU,BLCALL CHANGECALL SHOWshuchuE:LEA DX,tishi7MOV AH,09HINT 21HMOV BL,EMOV SHUJU,BLCALL CHANGECALL SHOWSCERROR:LEA DX,tishi8MOV AH,09HINT 21HMOV BL,FMOV SHUJU,BLCALL CHANGECALL SHOWJMP $MOV AH,4CHINT 21HSHOW PROC NEAR ;定义SHOW子程序PUSH AX ;现场保护PUSH CXMOV AL,SHI ;输出十位数ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,GEI ;输出个位数ADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP CXPOP AXRETSHOW ENDPCHANGE PROC NEAR ;十六进制转换为十进制PUSH AX ;现场保护PUSH CXMOV AL,SHUJUMOV AH,0MOV BL,0AH ;BL赋值为10DIV BL ;AL除以10MOV SHI,AL ;商给SHIMOV GEI,AH ;余数给GEIPOP CXPOP AXRETCHANGE ENDPCODE ENDSEND START。

微机原理实验报告

微机原理实验报告

实验一显示程序实验一、实验目的1. 掌握在PC机上以十六进制形式显示数据的方法;2. 掌握部分DOS功能调用使用方法;3. 熟悉Tddebug调试环境和Turbo Debugger的使用。

二、实验所用设备1. PC微机一台。

三、实验内容一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。

本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。

实验中可使用DOS功能调用(INT21H)。

(1) 显示单个字符输出入口:AH=02H调用参数:DL=输出字符(2) 显示字符串入口:AH=09H调用参数:DS:DX=串地址,’$’为结束字符(3) 键盘输入并回显入口:AH=01H返回参数:AL=输出字符(4) 返回DOS系统入口:AH=4CH调用参数:AL=返回码四、实验步骤1.运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;3.使用Rmrun菜单中的Run,运行程序,观察运行结果;4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;5.更改数据区中的数据,考察程序的正确性。

图1-1 显示程序实验流程图五、参考程序清单六、实验报告内容及要求写出程序调试过程及运行情况。

1.将参考程序写入轻松汇编编辑框。

2.点击保存,然后编译,结果框显示编译成功。

3.点击生成,显示链接成功。

4.点击运行,显示如图:实验二数据传送实验一、实验目的1. 熟悉Tddebug调试环境和Turbo Debugger的使用;2. 掌握与数据有关的不同寻址方式。

二、实验所用设备1. PC微机一台。

三、实验内容将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。

微机原理软件实验报告

微机原理软件实验报告

微机原理软件实验报告班级:姓名:学号:班内序号:日期:实验B 分支,循环程序设计实验报告一.实验目的:开始独立进行汇编语言程序设计;; 掌握基本分支,循环程序设计;;掌握 DOS调用. 二.实验内容:安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9; .编写一个程序统数据区中正数,负数和零的个数;.将统计结果在屏幕上显示.统计出正奇数,正偶数,负奇数,负偶数以及零的个数.。

三.预习题:1、十进制数 0 -- 9 所对应的 ASCII 码是什么?答:30H,31H,32H,33H,34H,35H,36H,37H,38H,39H2、如何将十进制数 0 -- 9 在屏幕上显示出来?答:转化为ASCII 码,然后: MOV AH,02H MOV DL,Y INT 21H3、如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:和零作比较,判断是否为零,CMP NUM ,00H ; AND NUM, 00H;判正:AND NUM,80H ; OR NUM ,7FH; SUB NUM,00H; SHL NUM,1; 判负:AND NUM,80H ; OR NUM,7fh ; SUB NUM,00H ; SHL NUM,1;四、实验过程(一)、流程图从数据区读入数字宏定义开始是 否是 否否 是 否是 否是判零操作零计数器数加判断负数是否为偶数 是否为奇数负数计数器加1 正数计数器加1负偶计数器负奇计数器加正奇计数器正偶计数器加数据读完显示结束(二)、源代码SHOW MACRO X ;;宏定义用于显示提示语句MOV AH,09HMOV DX, OFFSET XINT 21HENDMSHOW1 MACRO Y ;;宏定义用于显示数值MOV AH,02HMOV DL,YINT 21HENDMDAT SEGMENTA DB 1,16,70,-1,-2,1,0,-2,0,-2,9S EQU $-A ;待分类的数PLUS DB ? ;存储正数MINUS DB ? ;存储负数LING DB ? ;存储零EVE DB 0 ;存负偶数ODD DB 0 ;存负奇数ZEVE DB 0 ;存正偶数ZODD DB 0 ;存正奇数STRING DB 'THE NUMBER OF POSITIVE NUMBERS IS ', '$'STRINM DB 0DH,0AH,'THE NUMBER OF NEGATIVE NUMBERS IS ', '$' STRINN DB 0DH,0AH,'THE NUMBER OF ZERO IS ', '$'STRING1 DB 0DH,0AH,'THE NUMBER OF POSITIVE ODD NUMBERS IS ', '$'STRING2 DB 0DH,0AH,'THE NUMBER OF POSITIVE EVEN NUMBERS IS ', '$'STRING3 DB 0DH,0AH,'THE NUMBER OF NEGATIVE ODD NUMBERS IS ', '$'STRING4 DB 0DH,0AH,'THE NUMBER OF NEGATIVE EVEN NUMBERS IS ', '$'DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DAT,SS:STASTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV CX,SLEA BX,ACON: MOV AL,BYTE PTR[BX]OR AL,ALJZ ZERO ;判断是零JS FU ;判断是负数JMP ZHENG ;判断是正数ZERO: INC LING ;零个数自加JMP DONEFU: INC MINUS ;负数个数自加AND AL,01HJZ OU ;判断是负偶数INC ODD ;判断是负奇数,负奇数个数自加 JMP DONEOU: INC EVE ;负偶数个数自加JMP DONEZHENG: INC PLUS ;正数个数自加AND AL,01HJZ ZOU ;判断是正偶数INC ZODD ;正奇数个数自加JMP DONEZOU: INC ZEVE ;正偶数个数自加JMP DONEDONE: INC BX ;指向下一个内存数LOOP CONADD LING,30H ;转换为ASCII码ADD MINUS,30HADD PLUS,30HADD ODD,30HADD EVE,30HADD ZODD,30HADD ZEVE,30HSHOW STRING ; 提示语句SHOW1 PLUS ;大于0的数SHOW STRINN ;提示语句SHOW1 LING ; 等于0的数 SHOW STRINM ;提示语句SHOW1 MINUS ;小于0的数 SHOW STRING1 ;提示语句SHOW1 ZODD ;正奇数个数数 SHOW STRING2 ;提示语句SHOW1 ZEVE ;正偶数个数SHOW STRING3 ;提示语句SHOW1 ODD ;负奇数个数SHOW STRING4 ;提示语句SHOW1 EVE ;负偶数个数RETSTAR ENDPCODE ENDSEND STAR(三)、实验分析数据区待统计的数据为:1,16,70,-1,-2,1,0,-2,0,-2,9实验结果如下图所示。

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

本科实验报告
课程名称:微机原理及接口技术
实验项目:统计数据个数程序
实验地点:微机原理实验室
专业班级:信息1002 学号:39
学生姓名:王兴
指导教师:
2013/6/12
一、实验目的:
掌握将多位16进制数转换成多位10进制数ASCII码的方法。

二、实验内容:
统计内存数组中大于0和小于0的元素个数,并将统计结果分别存放在LRESULT和HRESULT变量中,并显示个数。

三、程序流程图
实验程序:
DATA SEGMENT
ARY DB 1,3,-1,2,6,-9,-5,7,8,1,3,8,-6,8,-9,-7,2,4,-3,-3 DB -4,7,7,8,3,1,3,6,8,5,5,6,4,5,7,-4,2,4,5,-7,5,4
DB 2,5,7,8,8,8,7,6,-5,4,3,2,1,-1,2,2,3,-4,5,6,7
N=$-ARY
LRESULT DW 0
HRESULT DW 0
TJJG DB 'STATISTICS RESULT:', 0DH,0AH,'$' DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
SHOW MACRO B
PUSH DX
PUSH AX
MOV DX,B
MOV AH,02H
INT 21H
POP AX
POP DX
ENDM
XOR CX,CX
MOV CX,N
LEA SI,ARY
LOP: MOV AL,[SI]
CMP AL,0
JNS PLUS
INC LRESULT
JMP CONT
PLUS: INC HRESULT
CONT: INC SI
LOOP LOP
LEA DX,TJJG
MOV AH,09H
INT 21H
SHOW '+'
MOV AX,HRESULT
CALL DISPL
SHOW 0DH
SHOW 0AH
SHOW '-'
MOV AX,LRESULT
CALL DISPL
MOV AX,4C00H
INT 21H
DISPL PROC
PUSH DX
PUSH AX
MOV CX,10
MOV DX,00H
MOV BX,00H
DIV CX
MOV BX,DX
ADD AL,30H DISPL1: MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
POP AX
POP DX
RET
DISPL ENDP
CODE ENDS
END START
实验结果:。

相关文档
最新文档