微机实验报告
微机实验报告

微机实验报告第⼀次实验1.写出完成下列功能的指令序列(1)传送20H到AL寄存器MOV AL , 20H(2)将(AL)*2 MOV AL , 02H MUL AL (3)传送25H到BL寄存器MOV BL , 25H (4)(AL)*BL MUL BL问最后结果(AX)=?AX=0940H2.分别写出完成下列指令要求的指令(1)将BX的低4位清零AND BX , F0H(2)将AX的⾼4位置1 OR AX , F0H(3)将DX的低4位取反;XOR DX , 0FH(4)将CX的中间⼋位清零AND CX , 0FF0H(5)将AX中与BX中的对应位不相同的位均置1 XOR AX , BX3.上机运⾏下⾯指令序列,分析运⾏后(AX)=?mov cl , 8sar ax ,cldec axmov cx ,8mul cxax=210.9h4. 4.设DS=当前段地址,BX=0300H,SI=0002H,请⽤DEBUG的命令将存储器偏移地址300-304H连续单元装⼊0AH0BH0CH0DH0EH。
在DEBUG状态下送⼊下⾯的程序,并⽤单步执⾏的⽅法,分析每条指令原源地址的形成过程?当数据传送完毕时,AX中的内容是什么?8.编程:求两个数的平均值。
这两个数分别放在X单元和Y单元中,⽽平均值放在Z单元中。
即Z=(X+Y)/2 data segmentx db 2y db 6z db ?data endscode segmentassume cs:code, ds;datastart:mov ax, datamov ds,axmov al, xmov ah,0add al,ymov bl,2div blint 21hcode endsend start9.输⼊下⾯源程序,并对程序进⾏会变,连接,调式并说明程序的功能。
data segment number dw 0168hdata endscode segmentassume cs;code, ds: dataorg 0100hstart:mov ax, datamov ds, axmov dx,0mov bx, 0001hmov di, 8000hmov si, 0mov ax, numbermov cx, 16next;test ax, bxjz continueor dx, diinc sicontinue:ror di, 1mov ah,4chint 21hcode endsend start1.编写程序: 求1+2+3+…..+100的和data segment number db 01hdata endscode segmentassume cs:code , ds:datastart:mov ax , datamov ds , axmov ax , datamov bx , numbermov ax , 0mov cx , 64hnext:add ax ,bxinc bxloop nextmov ah , 4chint 21hcode endsend start2.在内存中tab为⾸的地⽅存有1-9的平⽅值,从键盘输⼊⼀个数(1-9),将该数存⼊X单元,⽴⽅值存⼊XXX单元中data segmenttab db 0,1,4,9,16,25,36,49,64,81x db 10dup(?)xxx db 10dup(?)data endscode segmentassume cs:code ,ds: datastart:mov ax ,datamov ds , ax mov ax , datamov cx ,09hnext:mov ah , 1int 21hand ah ,0fhmov bx ,ahmov si , offset tabmov sp , offset xmov di , offset xxxmov dx , byte ptr[bx+si]mov al, blmul dxmov [bx+di] ,axmov [sp+bx] , bxmov ah , 4chint 21hcode endsend start第⼆次实验顺序程序设计从键盘输⼊两个1位⼗进制数,求这两个数的和,并将结果显⽰在屏幕上data segment infor1 db 'please input the first data (<10):$'infor2 db 0ah,0dh,'please input the second data (<10):$'infor3 db 0ah,0dh,'the result is:$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset infor1mov ah,9int 21hmov ah,1int 21hand al,0fhmov ah,00000000000000000000mov bl,almov dx,offset infor2int 21hmov ah,1int 21hand ax,000fhadd al,blaaaor ax,3030hpush axmov dx,offset infor3 mov ah,9int 21hpop axmov dl,ahpush axmov ah,2int 21hpop axmov dl,almov ah,2int 21hmov ah,4chint 21hcode endsend startresult db 0ah,0dh,'cube result is :$' data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset numbermov ah,9int 21hmov ah,1int 21hand ax,000fhmov bx,axmul blmul blmov cl,64hdiv clor al,30hpush axmov dx,offset resultmov ah,9int 21hpop axmov dl,alpush axmov ah,2int 21hpop axmov cl,0ahmov al,ahmov ah,0div clor ax,3030hpush axmov ah,2int 21hpop axmov dl,ahmov ah,2int 21hmov ah,4chint 21hcode endsend start分⽀程序设计1.某程序可从键盘接收命令(0-5),分别专项6个⼦程序,⼦程序⼊⼝地址分别为p0-p5,编制程序,⽤跳转表实现分⽀结构程序设计,记录实验结果data segmentmessage db 'please input key (0-5):$'crmessage db 0ah,0dh,'$'errormessage db 'you hit error key !',0ah,0dhdb 'please try again(0-5):$'message0 db 'you hit the key 0',0ah,0dh,'$'message1 db 'you hit the key 1',0ah,0dh,'$'message2 db 'you hit the key 2',0ah,0dh,'$'message3 db 'you hit the key 3',0ah,0dh,'$'message4 db 'you hit the key 4',0ah,0dh,'$'message5 db 'you hit the key 5',0ah,0dh,'$'code segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov ah,9lea dx,messageint 21htryagain:mov ah,1int 21hmov bl,almov ah,9mov dx,offset crmessage int 21hcmp bl,'0'jz key0cmp bl,'1'jz key1cmp bl,'2'jz key2cmp bl,'3'jz key3cmp bl,'4'jz key4cmp bl,'5'jz key5error:mov ah,9mov dx,offset errormessage int 21hjmp tryagainkey0:lea dx,message0mov ah,9int 21hjmp exitkey1:lea dx,message1 mov ah,9int 21hjmp exitkey2:lea dx,message2 mov ah,9int 21hjmp exitkey3:lea dx,message3 mov ah,9int 21hjmp exitkey4:lea dx,message4 mov ah,9int 21hjmp exitkey5:lea dx,message5 mov ah,9int 21hexit:mov ah,4chint 21hcode endsend start第三次实验循环程序设计1.从⾃然数1开始累加,直到累加和⼤于1000为⽌,统计被累加的⾃然数的个数,并把统计的个数送⼊N单元,把累加和送⼊SUM单元。
微机软件实验报告

一、实验目的1. 熟悉微机软件的基本概念和原理。
2. 掌握微机软件的开发流程和常用工具。
3. 提高编程能力和软件设计能力。
4. 理解微机软件在各个领域的应用。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 20194. 实验设备:个人电脑一台三、实验内容本次实验主要分为以下几个部分:1. 微机软件概述- 微机软件的概念及分类- 微机软件的发展历程- 微机软件在各个领域的应用2. C++编程基础- 变量和数据类型- 运算符和表达式- 控制结构(条件语句、循环语句) - 函数- 数组- 指针3. Visual Studio 2019开发环境- 创建项目- 编写代码- 编译和调试程序4. 实验项目:计算器程序设计- 界面设计- 功能实现- 测试与优化四、实验步骤1. 微机软件概述- 通过查阅资料,了解微机软件的基本概念、分类、发展历程和应用领域。
- 思考微机软件在日常生活、工作学习中的应用。
2. C++编程基础- 学习C++编程基础,包括变量、数据类型、运算符、控制结构、函数、数组、指针等。
- 通过编写简单的程序,巩固所学知识。
3. Visual Studio 2019开发环境- 安装并熟悉Visual Studio 2019开发环境。
- 创建一个新项目,并编写简单的C++程序。
4. 实验项目:计算器程序设计- 设计计算器界面,包括按钮、文本框等控件。
- 编写程序实现计算器的功能,如加、减、乘、除等运算。
- 对程序进行测试,确保功能正确无误。
- 优化程序,提高运行效率。
五、实验结果与分析1. 微机软件概述- 通过实验,掌握了微机软件的基本概念、分类、发展历程和应用领域。
- 认识到微机软件在各个领域的广泛应用,如操作系统、办公软件、游戏、数据库等。
2. C++编程基础- 通过实验,掌握了C++编程基础,包括变量、数据类型、运算符、控制结构、函数、数组、指针等。
南邮微机原理实验报告

微机原理硬件实验报告实验一 I/O 地址译码一、实验目的1、掌握 I/O 地址译码电路的工作原理。
二、实验内容及原理实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。
译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,…… 当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。
根据图1-1,我们可以确定A9~A3,AEN,IOW,IOR的值。
要使译码电路正常工作,必须使处于低电平有效。
因而可以确定A6=A8=0,A7=A9=1,AEN=0,IOW与IOR不可同时为1(即不能同时读写)。
当要从Y4输出低脉冲时,A5A4A3=100;从Y5输出时,A5A4A3=101。
综上所述,Y4输出时,应设置值2A0H(A9~A0=1010100000B);Y5输出时,应设置值2A8H(A9~A0=1010101000B)。
执行下面两条指令MOV DX,2A0HOUT DX,AL(或IN AL,DX)Y4输出一个负脉冲到D触发器的CLK上,因为D=1(接了高电平+5V),所以Q被赋值为1.延时一段时间(delay);执行下面两条指令;MOV DX,2A8HOUT DX,AL(或IN AL,DX)Y5输出一个负脉冲到CD,D触发器被复位,Q=0。
再延时一段时间,然后循环上述步骤。
利用这两个个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
三、硬件接线图与软件流程图硬件接线:Y4/IO 地址接 CLK/D 触发器Y5/IO地址接 C/D触发器D/D触发器接 SD/D角发器接+5VQ/D触发器接 L7(LED灯)或逻辑笔软件流程图:四、源程序OUTPORT1 EQU 2A0H ;预置,方便修改OUTPORT2 EQU 2A8HCODE SEGMENTASSUME CS:CODESTART: MOV DX,OUTPORT1 ;根据原理图设定A9~A0 的值(Y4)OUT DX,AL ;让译码器Y4 口输出一个负脉冲CALL DELAY ;延时MOV DX,OUTPORT2 ;根据原理图设定A9~A0 的值(Y5)OUT DX,AL ;让译码器Y5 口输出一个负脉冲CALL DELAY ;延时MOV AH,1 ;调用1 号DOS 功能,等待键盘输入INT 16HJE START ;若有键盘输入则退出程序,否继续循环MOV AH,4CHINT 21HDELAY PROC NEAR ;延时子程序MOV BX,200 ;时延长度 (200)A: MOV CX,0B: LOOP BDEC BXJN E ARETDELAY ENDPCODE ENDSEND START五、实验结果LED 灯处于闪烁状态,键盘有输入后,成功退出。
8086微机原理实验报告

8086微机原理实验报告实验名称:8086微机原理实验实验目的:1.深入了解8086微处理器的内部结构和指令系统。
2.掌握汇编语言的编程方法和技巧。
3.熟悉微机系统的输入输出操作原理。
4.掌握8086微机系统的调试方法和程序调试技巧。
实验器材:1.8086微处理器芯片2.Intel 8086学习板3.编程器4.示波器5.实验箱实验步骤:1.熟悉8086微处理器的内部结构和指令系统在开始实验前,首先需要熟悉8086微处理器的内部结构和指令系统。
通过阅读教材和讲义,了解到8086微处理器采用16位结构,具有4个寄存器组,支持16种不同寻址方式的指令。
熟练掌握常用的指令系统和汇编语言的编程方法。
2.设计并编制简单的汇编程序在熟悉8086微处理器的内部结构和指令系统后,我们开始设计并编制简单的汇编程序。
本实验中,我们编写了一个简单的汇编程序,用于实现两个数的加法操作,并将结果存储在内存中。
程序中使用了mov指令将操作数送入寄存器,add指令将它们相加,再用mov指令将结果存储到内存中。
程序流程图如下所示:a. 将第一个数送入累加器A中。
b. 将第二个数送入寄存器B中。
c. 执行add指令,将A和B相加,结果保存在A中。
d. 将结果存储到内存中。
e. 程序结束。
3.调试程序并进行测试在完成汇编程序的编写后,我们需要使用调试器对程序进行调试,并进行测试。
首先,将程序加载到学习板上进行调试。
在调试过程中,我们使用示波器观察各个信号的波形,以确定程序的正确性。
通过逐步单步执行程序并观察寄存器和标志位的变化,我们验证了程序的正确性。
接下来,我们使用输入设备输入两个数,并观察输出结果是否正确。
测试结果表明程序正确实现了两个数的加法操作。
4.总结体会和改进建议通过本次实验,我们深入了解了8086微处理器的内部结构和指令系统,掌握了汇编语言的编程方法和技巧,熟悉了微机系统的输入输出操作原理,以及掌握了8086微机系统的调试方法和程序调试技巧。
微机保护实验报告

实验十一微机变压器差动速断特性实验一、实验目的1、掌握微机变压器差动速断的检验方法。
2、掌握微机保护综合测试仪的使用方法。
3、掌握微机变压器差动速断的构成方法。
二、实验项目1、微机变压器差动速断保护的测试。
三、实验步骤1、实验接线图如下图所示:2、将接线图中的IA、IB、IC、IN分别接到保护屏端子排对应的5(I-1)、6(I-2)、7(I-3)、12(I-8)号端子;UA、UB、UC、UN分别接到保护屏端子排对应的1(I-13)、2(I-14)、3(I-15)、4(I-16)号端子;K1、K2分别接到保护屏端子排对应的33(I-33)、34(I-34)号端子;n1、n2分别接到保护屏端子排对应的72(220VL)和73(220VN)号端子。
3、微机变压器差动速断保护的测试,方法如下:⑴,连接好测试线(包括电压线、电流线及开关量信号线的连接,包括电压串联和电流并联),打开测试仪,选择测试主界面,可选择用“装置定检”中的差动测试、“任意测试”中的“连续输出”方式、“常用测试”中的“静态测试”等方式来完成。
(具体参见M2000使用手册)。
这里以选择“任意测试”方式来完成,其主界面如下:⑵、触发方式测试方法:第一步:连接好需要测试项目的电流线、电压线及开关量信号线(不需要的可以不接)(下同);第二步:进入任意测试,选择触发测试方式。
第三步:参数设置。
设置故障前电流电压值;故障前时间、最长故障时间、故障后时间,设置动作开关量通道及动作方式;第四步:设置故障态参数。
选择故障类型,设置故障时的各相参数及Vz的输出参数,选择是否需要输出开关量。
第五步:开始测试。
点击测试按钮或者点键盘的F5键。
测试自动完成。
⑶、手动测试方法第一步:接好线,打开测试仪。
选择手动测试,设置参数电流(幅值)、电压(幅值)、频率、相位的变化步长,是否选择联动及设置需要联动相;第二步:设置各相输出的初始值,是否为直流等,Vz.的输出方式;第三步:开始测试。
微机实验 交通灯实验报告

微机实验交通灯实验报告微机实验交通灯实验报告引言交通灯作为城市交通管理的重要组成部分,对于保障交通安全和顺畅起着至关重要的作用。
本次实验旨在通过微机控制,模拟交通灯的工作原理,并实现交通灯的自动控制。
一、实验目的本次实验的主要目的是通过搭建一套微机控制系统,实现交通灯的自动控制,并通过实验验证交通灯在不同道路情况下的工作原理和效果。
二、实验原理1. 交通灯的工作原理交通灯通常由红、黄、绿三个信号灯组成。
红灯表示停止,黄灯表示准备,绿灯表示可以通行。
交通灯通过不同颜色的灯光变化,指示车辆和行人何时可以通行,以保障交通的有序进行。
2. 微机控制系统微机控制系统是利用计算机和相应的软硬件实现对设备、机器等的控制和管理。
在交通灯实验中,我们可以通过编程控制计算机输出不同的信号,从而实现交通灯的自动控制。
三、实验器材和步骤1. 实验器材- 微机控制系统:包括计算机、编程软件和控制接口等。
- 交通灯模型:模拟真实的交通灯,包括红、黄、绿三个信号灯。
2. 实验步骤- 连接交通灯模型和微机控制系统。
- 编写程序,设置交通灯的工作时间和信号灯变化规律。
- 运行程序,观察交通灯的工作状态和变化过程。
四、实验结果和分析通过实验,我们成功地实现了交通灯的自动控制。
在程序中,我们设置了红灯亮10秒,黄灯亮3秒,绿灯亮15秒的时间间隔,模拟了真实交通灯的工作规律。
在实验过程中,我们观察到交通灯按照预设的时间间隔循环变化,红灯亮起时车辆停止,绿灯亮起时车辆可以通行。
这样的交通灯控制方式可以有效地维持交通的有序进行,减少交通事故的发生。
五、实验总结通过本次实验,我们深入了解了交通灯的工作原理和微机控制系统的应用。
微机控制系统作为一种高效、精确的控制手段,可以广泛应用于各个领域,提高设备的自动化程度和工作效率。
在今后的学习和工作中,我们将继续深入学习微机控制系统的原理和应用,掌握更多的编程技巧和控制方法,为实现更多实际问题的自动化解决方案做出贡献。
微机实验报告(DOC)

微机实验报告学生姓名专业班学号指导老师年月日注:红色为程序修改部分实验一1、用命令A 汇编下列指令,判断指令正误并说明原因。
(1)ROR AX,8(2)LEA DI,[AX](3)MOV DS,2010(4)PUSH AL(5)OUT 900,AL(6)MOV [BX],0答:(1)ROR 为右移指令,每次移位只能移一个位。
(2)不能对累加器去偏移地址。
(3)立即数不能直接发送给段寄存器。
此程序正确应该改为:MOV AX,2010MOV DS,AX(4)字压入堆栈指令,它允许将 16 位的源操作数压入堆栈。
(5)OUT 指令是把累加 AL/AX 中的内容输出到指定的端口。
(6)错在不知道 0 是以字节型数据存储到[BX]还是以字型数据存储到[BX]。
2、说明可读写内存 RAM 和只读内存 ROM 的区别。
答:ROM 和 RAM 是计算机内存储器的两种型号,ROM 表示的是只读存储器,即:它只能读出信息,不能写入信息,计算机关闭电源后其内的信息仍旧保存,一般用它存储固定的系统软件和字库等。
RAM 表示的是读写存储器,可其中的任一存储单元进行读或写操作,计算机关闭电源后其内的信息将不在保存,再次开机需要重新装入,通常用来存放操作系统,各种正在运行的软件、输入和输出数据、中间结果及与外存交换信息等,我们常说的内存主要是指 RAM。
3、说明命令 T 和 P 的差别。
答:两个都是单步执行指令。
区别在于遇到调转程序 call 指令时,T 指令会跳到 call 指令中去一步一步的执行;而 p 指令遇到 call 指令时,它一下子全部执行后就跳出来,而不会一步一步的去执行。
指出任务 6 中程序段的出错原因,给出修改后的程序段。
4、利用T,P,G 命令,执行下列指令段,注意它们的不同之处。
(1) MOV DI,300MOV SI,400MOV CX,3CLDREP MOVSBINT 3--T 指令---G 指令---P 指令(2) MOV AH,2MOV DL,41INT 21INT 3---P 指令---G 指令实验总结:指令异同T一步一步执行G执行一段代码执行指令操作P在执行的过程中跳过循环(7)先在CS:200 处汇编一条RET 指令,再在CS:100 处汇编。
微机保护 功能实验报告

微机保护功能实验报告引言随着计算机应用的普及和发展,我们越来越依赖于计算机进行工作和生活。
然而,计算机作为一种电子设备,也存在各种潜在的风险,如病毒和黑客攻击等。
为了保护计算机的安全和正常运行,我们进行了一系列微机保护功能的实验。
本报告旨在总结和分享这些实验的过程和结果。
实验目的1. 了解计算机系统的基本架构和工作原理;2. 学习常见的微机保护功能并掌握其原理和使用方法;3. 分析和评估各类微机保护功能的效果和局限性。
实验内容实验一:防病毒程序的安装和使用1. 了解病毒的分类和感染方式;2. 下载并安装主流的防病毒软件;3. 进行病毒扫描并清除感染的文件。
实验二:防火墙的配置和使用1. 了解防火墙的原理和分类;2. 配置操作系统内置的防火墙或使用第三方防火墙软件;3. 模拟攻击并测试防火墙的效果。
实验三:网络安全认证1. 学习网络安全认证的概念和原理;2. 配置和使用无线网络的加密认证功能;3. 进行无线网络攻击和抵抗的测试。
实验四:数据备份与恢复1. 了解数据备份和恢复的方法和工具;2. 配置自动或手动定期备份重要数据;3. 模拟数据丢失并进行恢复操作。
实验五:密码管理与安全使用习惯1. 学习创建强密码的原则和方法;2. 应用密码管理工具进行账户和密码的管理;3. 养成良好的密码安全使用习惯。
实验结果通过以上实验,我们获得了以下结果和收获:1. 防病毒程序的安装和使用可以有效提升计算机的安全性,及时清除病毒并保护系统;2. 配置和使用防火墙可以阻止外部攻击并控制程序的网络访问权限;3. 网络安全认证可以保护无线网络的安全,防止未经授权的设备接入;4. 数据备份与恢复是防止数据丢失的重要手段,及时备份可以最大程度减少数据损失;5. 密码管理和安全使用习惯是保护个人账户安全的基础,创建强密码和定期更换密码是必要的。
实验总结通过完成以上实验,我们深入了解了计算机保护功能的原理和使用方法。
同时,我们也发现了一些局限性,如病毒无法完全杜绝、防火墙可能导致误拦截、密码管理仍然面临被猜测等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 汇编语言上机操作训练——比较字符串 一、实验目的
1、学习程序设计的基本方法和技能; 2、熟练掌握汇编语言设计、编写、调试和运行; 二、实验内容和要求 1、汇编语言程序上机操作方法 编写一程序,比较两个字符串STRING1和STRING2所含字符是否相同,若相同刚在屏幕上显示‘MATCH’,否则,显示‘NOT MATCH’。
三、实验主要仪器设备和材料 计算机一台 四、程序 略 五、调试过程: 1、执行程序
表示两字符串相同 2、u命令反汇编:
3、在程序执行以前的寄存器情况: 内存情况: 4、用E命令修改数据区字符串及修改前后内存数据区的对比:
5、用G命令查看修改后的情况: 修改后的字符串不相同了。 六、程序功能与调试过程中遇到的问题 1、分析程序功能 程序的功能是比较string1与string2所含字符是否相同,若相同则在屏幕上显示‘MATCH’,否则,显示‘NOT MATCH’。 因为string1为‘Move the cursor backward’,string2为’ Move the cursor backward’。所以string1与string2相同,显示’MATCH’。后面用重新修改了下这些字符,会显示“not Match”
2、调试程序过程中遇到的问题 对汇编认识停留在上课老师的文字表达,至于实际操作,可以说完全不懂,只能在实验室里对着实验书一步步做下去,没遇到什么问题。但是回到宿舍中,连在哪输入都不知道,可想而知对汇编的认知度。好在在同学们的帮助下,还是能够顺利的完成了实验。只是做的时候对有些过程与指令不太明白,经过查阅相关资料后之后,也弄明白了个大概,希望在以后的微机课程学习中多用心。
七、思考题 1、将内存DATA1单元开始的0~15共16个数传送到DATA2单元开始的数据区中。 MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,DATA1 LEA DI,DATA2 MOV CX,16 CLD REP MOVSB
2、将程序中的指令JZ MATCH改为JNZ MATCH,程序结果如何?为什么? JZ为零标志为1转移,而JNZ为零标志为0转移。所以当为JNZ MATCH后,当两字符串比较时,输出为‘NO MATCH’,不相同时为‘MATCH’。因此,程序结果为‘NO MATCH’。 实验二 分支、循环、及子程序设计 一、 实验目的
1、 学习循环程序的基本结构和设计方法; 2、 熟练掌握程序的调试方法;
二、 实验内容和要求
本程序采用两重循环来实现,内层对应学生的名次计算,外层解决所有学生的名次;以GRADE为首地址的10个字保存学生的成绩,RANK为地址的10个字填入学生的名次。本程序对应的寄存器分配情况说明如下:
AX:存放当前被测学生的成绩; BX:存放当前被测学生的相对地址指针; CX:内循环计数值; DX:当前被测学生的名次计算值; SI:内循环测试时的地址指针; DI:外循环计数值; 三、 实验主要仪器设备和材料: 计算机一台; 四、 实验方法、步骤及结构测试 1程序略 2程序框图如下: 开始 外循环初始化工作: 外循环计数器(DI)= 10 外循环指针(BX)= 0
AX = 学号为[BX]的学生的成绩
内循环初始化工作: 名词值(DX)= 0 内循环计数值(CX)= 10 内循环指针SI=GRADE首地址
AX > SI ? DX++ 内循环指针SI+2 CX--
CX = 0 ? Rank[BX] = DX BX+2 DI--
DI = 0 ?
结束
N N N
Y
Y Y 3程序执行 在调试模式下,利用反汇编指令(U)得到的程序代码段如下截图所示:
五 实验报告要求 1 程序框图上图即是,双重循环结构外循环包含内循环,当外循环结构每执行
一次循环时,内循环结构在一般情况下要从循环的开始到循环的正常结束从头到尾执行一遍。 2改变程序的结果为10进制 通过修改程序代码,实现了将程序结果改为10进制形式。程序代码及运行结果截图如下(修改或增加部分用下划线标识):
Data SEGMENT Grade dw 88H,75H,95H,63H,98H,78H,87H,73H,90H,60H ;实际上,若将两个十六进制数(各位数字仅限于(0~9))直接看成十进制数用以相比较,则大者恒大。
;所以可以在定义数据段就直接将分数(十进制数)当十六进制数输入,虽然缩小了可以支持的数字大小
;范围,但不影响程序功能。通过这样可以实现输出结果更加直观。 Rank dw 10 dup(?) Data ENDS Program segment Main proc far Assume cs:program,ds:data Start: Push ds Sub ax,ax Push ax Mov ax,data Mov ds,ax Mov di,10 Mov bx,0 Loop1: Mov ax,grade[bx] Mov dx,0 Mov cx,10 Lea si,grade Next: Cmp ax,[si] Jg no_count Push ax ;将ax的内容压入堆栈进行保护 Mov ax,dx ;将dx的内容传给ax并加一,同时用Daa指令调整为十进制 Add ax,1 Daa Mov dx,ax ;将调整后的内容返回给dx Pop ax ;恢复ax的原内容 No_count: Add si,2 Loop Next Mov rank[bx],dx Add bx,2 Dec di Jne loop1 ret Main endp Program ends end Start 结果截图:
六 思考题 1、 调试程序时,当用户数据设置好后,程序应运行到什么位置才可以查看结果
答:应通过G命令运行到RET指令所在行,并用D指令查看数据段起始地址的内容。
2、 程序的数据段定义为字单元,可否用字节来定义? 答:可以,只需在数据段定义里把DW修改为DB,并且在程序里作出相应修改则可。
七 总结 两次微机上机实验真的让我受益良多,上课的时候几乎都不知道那些指令指的的什么意思,按照课本做完了,才回到宿舍去找资料填补这方面的知识欠缺,还有很多不懂的,希望老师能多多指教。 实验三 显示程序设计实验(一) 一.实验目的 1,学习显示器I/O程序设计方法; 2,了解系统功能中断的设计方法; 3,了解键盘光标键是如何公职;
二.实验内容和要求 1,用键盘上的上下左右键控制光标的移动. 2,按行号*列号的形式给方块字符(ACS2码为0BDH)在屏幕上定位,按上下左右光标键使光标在屏幕上移动,光标的移动由方块字符组成的图形而在屏幕上保留下轨迹.
三.实验主要仪器设备和材料 计算机
四.实验方法,步骤及结构测试 源程序略 运行结果
五,实验报告要求 1,显示器是如何定义窗口的大小的? 显示器根据数据显示的单元数,v_buff db 25*80*2 dup(?)定义窗口大小的. 2,在文本方式下,什么是属性值? block equ 0dbh是定义的属性值,v_buff+bx+1,是放每个单元(一共25*80个)属性值的地方,即每个单元的高字节。
六,思考题 光标轨迹运行到边界后,为什么光标会闪烁和改变颜色?若要光标不变,应如何修改程序?
答:光标移位所使用的语句是循环移位,当光标由边界移到另一边边界时方块字符的属性值发生错位相乘,所以光标会闪烁和改变颜色。若要光标不变,应将循环移位ROL改为逻辑移位SHL。
七,实验心得 在第一次按照书上输入代码后发现运行不了,检查后发现书上代码有误,根据错误显示排除了错误Jnz not_down,还有一些标点加上后,在运行后根据代码内容了解了光标移位为循环移位.另外根据程序修改了前背景色和后背景色 0700h可以根据自己的想法去修改,最后还添加了7色光标效果,感觉很神奇,贪食蛇游戏应该与这个程序有关。
显示程序设计实验 (二) 一,实验目的 1)了解INT 21H部分功能号的功能和使用方法 2)掌握字符方式下PC机显示器显示控制. 实验程序1运行结果:
修改程序: stack SEGMENT DW 64 DUP(?) stack ENDS code SEGMENT ASSUME CS:code,SS:stack start: MOV CX,0008h a0: PUSH CX MOV BL,31h MOV CX,0009h MOV AH,02h a1: MOV DL,BL INT 21h INC BL PUSH CX a2: LOOP a2 POP CX DEC CX JNZ a1 MOV AH,02h MOV DL,20h INT 21h POP CX DEC CX JNZ a0 MOV AH,4ch INT 21h code ENDS END start 结果: