微原软件实验报告

合集下载

微机原理实验报告清零程序

微机原理实验报告清零程序

竭诚为您提供优质文档/双击可除微机原理实验报告清零程序篇一:微机原理实验报告微机原理与应用课程实验报告实验分工:报告人同组人实验时间:20XX.12.10课程设计一、题目要求(1)在数据段首址为0100h开始的内存区1按从大到小的顺序顺次存入二进制数15~0共16个字节的数据;(2)将上述源区内容传送到目的内存区2(首址为1100h)中;(3)检验上述传送过程是否正确,如有错误,在紧跟内存区2后的第一个字节开始写入AscII码“eRRoR”,否则写入“oK”。

(4)用冒泡法将上述内存区2的数据,按从小到大的次序重新排列,排列后存放在内存区3(开始地址为2100h)。

(5)将上述内存区2和内存区3的第100个数据分别乘以2,并转为bcD码,保存在各自存储区的末尾。

再将上述两个bcD码相乘,其结果保存在内存区1的末尾处。

二、实验程序框图三、程序代码codesegmentassumecs:codeDATA1db16dup(?)DATA2dbeRRoRDATA3dboK;在数据段首址为0100h开始的内存区1按从大到小的顺序顺次存入二进制数15~0共16个字节的数据start:movax,0100h;规定目标程序存放单元的偏移量movds,ax;数据段地址moves,axmovsi,offsetDATA1;偏移地址movcx,0010h;循环次数movbx,0100hmoval,ofhs1:movcs:[si],almov[bx],cs:[si]incsiincbxdecalloops1nop;将内存区1数据搬移到内存区2中movcx,16movsi,0100hmovbx,1100hs2:moval,[si]mov[bx],alincbxloops2nop;对比内存区1的数据与内存区2的数据是否相同mov cx,16movsi,0100hmovbx,1100hcomp:movax,[si]movdx,[bx]cmpax,dxjneerroincsiincbxloopcomp;数据如果都相同,说明上述传输过程正确movsi,offsetDATA3movdi,1110hmovbl,0movcx,2enteroK:movbl,cs:[si]mov[di],blincsiincdiloopenteroKnopjmps3;如果有一个数据不相同,说明上述传输过程不正确err:movsi,offsetDATA2movdi,1110hmovbl,0movcx,5entereRR:movbl,cs:[si]mov[di],blincdiloopentereRR;将内存区2数据搬移到内存区3中s3:movsi,1100hmovcx,0010hmovbx,2100hmoval,0movcx,16fil:moval,[si]mov[bx],alincsiincbxloopfilnop;用冒泡法将内存区3的数据按从小到大重新排列s4: movbl,0movcx,16movsi,2110hdecsideccxagain:moval,[si]cmpal,[si-1]jaenextxchgal,[si-1]mov[si],almovbl,1next:decsiloopagaincmpbl,0jnestart1nopmovsi,1109hmoval,[si]movcl,2mulcl;结果在al中movdx,0movbx,10divbxshlal,4addal,dl;把二进制数转换成bcD码mov[1112h],almovsi,2109hmoval,[si]movcl,2mulcl;结果在al中movdx,0movbx,10divbxshlal,4addal,dl;把二进制数转换成bcD码mov[2110h],al;两个bcD码相乘,其结果保存在内存区1的末尾处。

微原短实验报告

微原短实验报告

一、实验目的本次实验旨在通过简单的物理实验,让幼儿了解和体验科学探究的乐趣,培养幼儿的观察能力和动手操作能力,同时激发幼儿对科学的兴趣。

二、实验仪器1. 玻璃杯一个2. 水3. 纸条一张4. 气球一个5. 吸管一支三、实验步骤1. 将玻璃杯中倒入适量的水,大约到杯子的1/3处。

2. 将纸条平铺在桌面上,用吸管将气球吹大,用气球将纸条顶起。

3. 将吹大的气球放入玻璃杯中,让气球在水中浮起来。

4. 观察气球在水中的状态,记录实验现象。

5. 将气球中的空气排空,让气球变小,再次将气球放入水中。

6. 观察气球在水中的状态,记录实验现象。

四、实验结论1. 气球在水中的浮力与气球内气体的体积有关。

当气球内气体体积较大时,气球在水中浮力较大;当气球内气体体积较小时,气球在水中浮力较小。

2. 气球在水中的浮力与水的密度有关。

水的密度越大,气球在水中浮力越大。

3. 气球在水中的浮力与重力有关。

当气球在水中的浮力大于重力时,气球会浮在水面上;当气球在水中的浮力小于重力时,气球会沉入水底。

五、反思体会1. 通过本次实验,幼儿了解了浮力的概念,认识到浮力与物体体积、水的密度和重力有关。

2. 实验过程中,幼儿积极参与,观察仔细,动手操作能力强,表现出对科学的浓厚兴趣。

3. 教师在实验过程中应注重引导幼儿观察、思考,让幼儿在实验中体验科学的乐趣,培养幼儿的探究精神。

4. 本次实验操作简单,易于理解,适合幼儿年龄段的特点,有助于提高幼儿的科学素养。

5. 在今后的教学活动中,教师可以结合幼儿的兴趣和认知水平,设计更多有趣、富有启发性的科学实验,让幼儿在快乐中学习,在学习中成长。

微原实验报告7

微原实验报告7

微原实验报告7实验目的本实验旨在通过微原实验,了解细胞的原核和真核结构,探索细胞的功能和相互关系。

实验材料和方法实验所需材料如下:- 显微镜- 细胞标本镜片- 水溶性染色剂- 盖玻片- 显微刀实验步骤如下:1. 取一个细胞标本镜片,加入适量的水溶性染色剂,使细胞组织显色。

2. 用盖玻片将标本和染色剂封装,避免氧化。

3. 将封装好的标本放置于显微镜下,调节合适的放大倍数。

4. 使用显微刀切取细胞标本的一小块,移至显微镜下进行观察。

5. 观察细胞的结构和特点,并记录相关数据。

实验结果与分析通过显微镜观察,我们发现细胞可以分为原核细胞和真核细胞两种类型。

原核细胞是原生生物的一种,没有细胞核和细胞器。

其细胞结构简单,一般只有细胞膜、细胞质和核糖体。

真核细胞则包含有明确的细胞核和多种细胞器,这些细胞器负责不同的功能。

在观察细胞结构时,我们发现原核细胞的细胞膜相对简单,没有明显的细胞壁。

细胞质内存在核糖体,这是细胞合成蛋白质的地方。

而真核细胞的细胞膜更为复杂,通常由两层脂质组成,其中包裹着细胞质。

细胞质内部可以观察到细胞器,如线粒体、高尔基体、内质网等。

细胞核则包含着遗传物质DNA,负责细胞的遗传信息存储和传递。

通过本实验,我们进一步认识到了细胞的结构和功能之间的相互关系。

细胞结构的复杂性直接关系着细胞的功能。

例如,线粒体是细胞中能量的产生器,通过细胞呼吸产生的能量,为细胞的各种功能提供动力。

内质网则参与蛋白质的合成和物质运输等功能。

实验总结本实验通过显微镜观察细胞结构,分析了原核细胞和真核细胞的特点和功能。

通过这次实验,我们深入理解了细胞的组成和功能之间的关系。

细胞是生物体的基本组织单位,是生命存在和功能发挥的基础。

了解细胞结构与功能对于理解生物学和医学等学科具有重要的意义。

通过不断的实验探索和研究,我们可以进一步探索细胞内部的奥秘,并为科学研究和应用提供支持和依据。

微程序实验报告

微程序实验报告

微程序实验报告微程序实验报告概述:微程序是一种指令执行的方式,它将指令集的操作分解为一系列微操作,通过微指令控制器逐步执行。

本次实验旨在通过设计和实现一个简单的微程序,深入理解微程序的工作原理和应用。

实验目的:1. 理解微程序的基本概念和原理;2. 学习如何设计和实现一个简单的微程序;3. 掌握微程序在指令执行过程中的作用和优势。

实验过程:1. 确定微指令集的操作和控制信号:根据实验要求,我们选择了一些常见的指令,如加法、减法、乘法等,并为每个指令定义了相应的微操作和控制信号。

2. 设计微指令控制器:根据微指令集的操作和控制信号,我们设计了一个简单的微指令控制器,用于逐步执行指令。

控制器包括状态寄存器、微指令存储器和控制逻辑电路等组件。

3. 实现微程序:根据设计的微指令控制器,我们编写了相应的微程序。

微程序是一系列微操作的有序序列,通过控制信号的变化逐步执行指令。

4. 运行实验样例:我们选择了几个实验样例,分别测试了加法、减法和乘法指令的执行过程。

通过观察指令执行的结果,验证了微程序的正确性和有效性。

实验结果:通过实验,我们成功设计和实现了一个简单的微程序,并验证了其在指令执行过程中的作用和优势。

微程序能够将复杂的指令集操作分解为一系列微操作,使得指令的执行过程更加灵活和高效。

结论:微程序是一种重要的指令执行方式,通过将指令集的操作分解为微操作,能够提高指令执行的效率和灵活性。

本次实验使我深入理解了微程序的工作原理和应用,掌握了微程序的设计和实现方法,为进一步研究和应用微程序打下了良好的基础。

展望:微程序作为一种重要的指令执行方式,在计算机体系结构和指令集设计中有着广泛的应用前景。

未来,我将进一步研究微程序的优化方法和应用场景,探索微程序在提高计算机性能和节约能源方面的潜力。

同时,我也期待能够参与更多的微程序设计和实现项目,不断提升自己在计算机体系结构领域的研究能力和创新能力。

总结:通过本次实验,我深入了解了微程序的工作原理和应用,掌握了微程序的设计和实现方法。

北邮微机原理与接口技术硬件实验报告

北邮微机原理与接口技术硬件实验报告

微原硬件实验报告班级:07118 班学号:070547班内序号:26姓名:杨帆实验一熟悉实验环境及IO的使用一,实验目的1. 通过实验了解和熟悉实验台的结构,功能及使用方法。

2. 通过实验掌握直接使用Debug 的I、O 命令来读写IO 端口。

3. 学会Debug 的使用及编写汇编程序二,实验内容1. 学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作,2.用汇编语言编写跑马灯程序。

(使用EDIT 编辑工具)实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。

B.通过输出端口控制灯的工作状态(低电平灯亮)三,实验步骤1.实验板的IO 端口地址为EEE0H在Debug 下,I 是读命令。

(即读输入端口的状态---拨码开关的状态)O 是写命令。

(即向端口输出数据---通过发光管来查看)进入Debug 后,读端口拨动实验台上八位拨码开关输入I 端口地址回车屏幕显示xx 表示从端口读出的内容,即八位开关的状态ON 是0,OFF 是 1 写端口输入O 端口地址xx (xx 表示要向端口输出的内容)回车查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。

2. 在Debug 环境下,用a 命令录入程序,用g 命令运行C>Debug -amov dx, 端口地址mov al,输出内容out dx, almov ah, 0bhint 21hor al, aljz 0100int 20h-g运行查看结果,修改输出内容再运行查看结果分析mov ah, 0bhint 21hor al, aljz 0100int 20h该段程序的作用3.利用EDIT 工具编写汇编写跑马灯程序程序实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。

B.通过输出端口控制灯的工作状态(低电平灯亮) C>EDIT 文件名.asm录入程序按Alt 键打开菜单进行存盘或退出编译文件C>MASM 文件名.asm连接文件C>LINK 文件名.obj运行文件或用Debug 进行调试。

微机原理实验报告

微机原理实验报告

微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。

⼆、实验要求1.掌握DEBUG的使⽤,调试程序。

2.读懂程序中各条指令,说明程序功能。

三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。

100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。

2.加深对指令的理解。

⼆、实验要求1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。

请编⼀程序将AX的内容和BX的内容进⾏交换。

请⽤堆栈作为两寄存器交换内容的中间存储单元,⽤DEBUG调试程序进⾏汇编与调试。

2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请⽤DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装⼊0AH、0BH、0CH、0DH、0EH。

在DEBUG状态下送⼊下⾯程序,并⽤单步执⾏的⽅法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.设(AX)=0002H,编⼀个程序段将AX的内容乘10,要求⽤移位的⽅法完成。

三、思想描述实验内容1将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。

微程序控制实验报告(共10篇)

微程序控制实验报告(共10篇)

微程序控制实验报告(共10篇)微程序控制器实验报告计算机组成原理实验报告一、实验目的:(1)掌握微程序控制器的组成原理。

(2)掌握微程序的编制、写入,观察微程序的运行过程。

二、实验设备:PC 机一台,TD-CMA 实验系统一套。

三、实验原理:微程序控制器的基本任务是完成当前指令的翻译和执行,即将当前指令的功能转换成可以控制的硬件逻辑部件工作的微命令序列,完成数据传送和各种处理操作。

它的执行方法就是将控制各部件动作的微命令的集合进行编码,即将微命令的集合仿照机器指令一样,用数字代码的形式表示,这种表示称为微指令。

这样就可以用一个微指令序列表示一条机器指令,这种微指令序列称为微程序。

微程序存储在一种专用的存储器中,称为控制存储器,微程序控制器原理框图如图所示:微程序控制器组成原理框图在实验平台中设有一组编程控制开关KK3、KK4、KK5(位于时序与操作台单元),可实现对存储器(包括存储器和控制存储器)的三种操作:编程、校验、运行。

考虑到对于存储器(包括存储器和控制存储器)的操作大多集中在一个地址连续的存储空间中,实验平台提供了便利的手动操作方式。

以向00H 单元中写入332211 为例,对于控制存储器进行编辑的具体操作步骤如下:首先将KK1 拨至‘停止’档、KK3 拨至‘编程’档、KK4 拨至‘控存’档、KK5 拨至‘置数’档,由CON 单元的SD05——SD00 开关给出需要编辑的控存单元首地址(000000),IN 单元开关给出该控存单元数据的低8 位(00010001),连续两次按动时序与操作台单元的开关ST(第一次按动后MC 单元低8 位显示该单元以前存储的数据,第二次按动后显示当前改动的数据),此时MC 单元的指示灯MA5——MA0 显示当前地址(000000),M7——M0 显示当前数据(00010001)。

然后将KK5 拨至‘加1’档,IN 单元开关给出该控存单元数据的中8 位(00100010),连续两次按动开关ST,完成对该控存单元中8 位数据的修改,此时MC 单元的指示灯MA5——MA0 显示当前地址(000000),M15——M8 显示当前数据(00100010);再由IN 单元开关给出该控存单元数据的高8 位(00110011),连续两次按动开关ST,完成对该控存单元高8 位数据的修改此时MC 单元的指示灯MA5——MA0 显示当前地址(000000),M23——M16 显示当前数据(00110011)。

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

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

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

微机原理与接口技术软件实验一、实验目的1.掌握汇编程序的编辑,编译,连接和执行的全过程;2.学习和掌握用DEBUG调试程序的方法.二、源程序DAT SEGMENTA DB 4 ;(自定)B DB 5 ;(自定)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 SUB1 ;A*AMOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1 ;B*BMOV AL,AMOV Z,ALMOV AL,BMOV Z+1,AL ;Z stores the two OPRD temporallyCALL SUB1 ;A*BADD WORD PTR Y,AXADC BYTE PTR[Y+2],0 ;A*B*2RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AX ;Y stores the resultADC BYTE PTR[Y+2],0 ;Y+2 stores the signal flagRETSUB1 ENDPCOD ENDSEND STAR三、实验文档中的要求(1)用D 命令观察数据区在内存中的具体内容,记录单元A 和B 的具体地址.(图一:反汇编结果以及数据区具体内容)由图一,可知A的地址为:141CH:0000H;B的地址为:141CH:0001H。

(2)用U 命令对目标代码反汇编,观察反汇编后的结果.注意发现源程序的起始位置, 并记录这个起始地址.由图一,可知:DATA段段基址:141CHA的偏移地址:0000HB的偏移地址:0001HY的偏移地址:0002HZ的偏移地址:0005HSTACK段段基址:141DHCODE段段基址:1424H第一条指令的偏移地址:0000H子程序SUB1入口的偏移地址:003FH(3)用T 命令作单步跟踪调试.比较每条指令执行后的结果和原来的理解是否一致.得出程序运行的结果:它们是写在什么单元,具体内容是什么; 并判断结果是否正确.现仅将关键步骤的单步调试结果列出,配合r命令查看结果。

(图二:单步调试结果一)这是第一次调用SUB1子程序退出后的结果,从图中可以看出Y存储的数据是+16(A已经改为4;B已经改为5),即是A*A的结果,符号位为0表示是正数。

(图三:单步调试结果二)这是第二次调用SUB1子程序退出后的结果,从图中可以看出执行完“MUL AH”指令后,AX 存储的数据是25,即是B*B的结果,子程序退出后Y存储的数据是+41,即是16+25的结果。

(图四:单步调试结果三)这是第三次调用SUB1子程序的结果,从图中可以看出执行完“MUL AH”指令后,AX存储的数据是20,即是A*B的结果,子程序退出后Y存储的数据是+61,即是41+20的结果。

(图五:单步调试结果四)这是程序退出时的最终结果,从图中可以看出,Y存储的数据最终为+81 ,即为(A+B)*(A+B)的结果。

结果正确。

(4)在子程序SUB1 的入口处设一断点,用G 命令执行程序. 在断点处观察堆栈的内容,比较堆栈的内容和程序返回地址是否一致.(图六:调用子程序的堆栈内容改变结果)从图中可以看出,IP指针的变化说明调用了子程序SUB1,而堆栈段段基址SS和栈顶指针SP的值都没有改变。

程序返回地址一致。

(5)用E 命令修改单元A,B 的内容,重新执行程序,并记录结果.(图七:修改A,B数值后的结果)从图中可见,分别将A,B的值改为1,1后,程序执行完毕,Y存储的内容是+4,结果正确。

(6)用M 命令和A 命令对程序进行修改: 将主程序中最后两条指令(ADD 和ADC) 修改为一条CALL SUB1 指令,重新执行程序.(图八:a命令练习使用的结果)反汇编发现程序最后的ADD指令在CODE段的偏移地址为0035,将此处改为调用SUB1子程序的指令,然后将0038处改为RETF。

重新执行后,查看Y的内容,结果正确。

(7) 重新使用编辑软件,把源程序最后一句中的STAR 去掉.再次生成可执行文件,并用DEBUG 调入内存.当使用U 命令时,显示的结果与前一次(未加STAR) 的结果有何不同?(图九:修改源程序后执行的结果)观察到两点不同(虽然不明了其原因),其一:不能立即进入程序,需执行许多冗余指令;其二:不能正确退出程序。

预习题:若SS=2000H,SP=FFFFH, 向堆栈中压入 4 字节数据后,如何用 D 命令显示压入堆栈的内容?使用debug指令“d 2000:0000”即可显示压入堆栈的内容,这是因为SP+1会溢出,变成0000。

四、心得体会汇编语言编程时要求程序员有严谨、缜密的思维,在某些程度上,我感觉使用汇编语言的编程过程就是把高级语言的结构过程拉平成线性过程来考虑问题。

经过此次试验,我基本掌握了汇编程序的编辑、编译、连接、执行以及调试的主要步骤。

应注意以下几点:在debug过程中,任何存储器单元都无法用标号来识别,要使用它们,只能使用物理地址调用。

使用u指令修改asm代码时要对照反汇编的结果,若要删去某条指令,可以找到那条指令在代码段的偏移地址,再用u指令将其修改为NOP(从该指令开始到下一条指令开始的地址-1处)。

可以结合r指令、t指令、已经用g指令设置断点来诊断问题。

微机原理与接口技术软件实验实验报告二姓名:杨帆学院:信息与通信工程学号:070547班级:07118实验二分支,循环程序设计一、实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS 功能调用。

实验内容:1.安排一个数据区,内存有若干个正数,负数和零。

每类数的个数都不超过9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

二、预习题:1.十进制数0 -- 9 所对应的ASCII 码是什么?如何将十进制数0 -- 9 在屏幕上显示出来?答:0的ASCII码是30h,以后依次递增。

要屏显0-9的数码,只需将AH置成02H(DOS功能调用),然后将要显示的数码的ASCII 码存进DL里,然后执行INT 21H就可以打印字符。

或者,若这些数码是以字符串的格式存储,则可以将AH置成09H,(最后以’$’字符结束,)然后将串首地址传给DS,然后执行INT 21H就可以打印字符串。

2.如何检验一个数为正,为负或为零?你能举出多少种不同的方法?答:可以将待检验数与0比较(使用CMP指令后判断CF、OF或者以表达式【实用EQ、GE 等操作符】的返回值来判断),也可以将待检验数与80H相与,判断ZF的值。

三、源程序DATA SEGMENTBUF0 DB 2BH,3AH ;'+',':'POSI DB 0BUF1 DB 0AH,0DH,30H,3AH ;LF,CR,'0',':'ZERO DB 0BUF2 DB 0AH,0DH,2DH,3AH ;LF,CR,'-',':'NEGA DB 0NUM DB 72H,88H,91H,01H,00H,00H,23H,77H,21H;you can add other numbersCNT EQU $-NUM ;LENTHDATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP (?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,0MOV BX,0LOOP1: MOV AL,NUM[BX]CALL FAR PTR CMPRINC BXINC CXCMP CX,CNT ;LOOP CNT TIMESJNZ LOOP1ADD POSI,30HADD ZERO,30HADD NEGA,30H ;TRANSFER TO ASC2 CODE MOV AH,02H ;TO PRINT CHARSMOV CX,0MOV BX,0LOOP2: MOV DL,BUF0[BX]INT 21HINC BXINC CXCMP CX,0DH ;LOOP 13 TIMESJNZ LOOP2MOV AX,4C00HINT 21HRETSTART ENDP CMPR PROC FAR CMP AL,0JGE BIGGERINC NEGAJMP EXIT BIGGER: JE EQUAL INC POSIJMP EXIT EQUAL: INC ZERO EXIT: RET CMPR ENDP CODE ENDS END START四、程序流程图(图表一:主程序流程图)(图表二:cmpr子程序流程图)五、实验结果与调试过程(图一:程序运行结果)分析:设置的数据区待分析数据为“72H,88H,91H,01H,00H,00H,23H,77H,21H”,其中正数为72H,01H,23H,77H,21H;负数为88H,91H;还有两个零。

可见程序得出的结果是正确的。

(图二:反汇编结果)分析:DATA段地址:1466;POSI偏移地址:0002;ZERO偏移地址:0007;NEGA偏移地址:000C;CODE段地址:1468;子程序CMPR偏移地址:0049;CNT的值+09D。

六、选作题:统计出正奇数,正偶数,负奇数,负偶数以及零的个数。

源代码如下:DATA SEGMENTBUF DB 2BH,4FH,3AH ;'+','O',':'POSOD DB 0DB 0AH,0DH,2BH,45H,3AH ;LF,CR,'+','E',':' POSEV DB 0DB 0AH,0DH,30H,3AH ;LF,CR,'0',':'ZERO DB 0DB 0AH,0DH,2DH,4FH,3AH ;LF,CR,'-','O',':' NEGAOD DB 0DB 0AH,0DH,2DH,45H,3AH ;LF,CR,'-','E',':' NEGAEV DB 0NUM DB 72H,88H,91H,01H,00H,00H,23H,77H,21H ;you can add other numbersCNT EQU $-NUM ;LENTHDATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP (?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,0MOV BX,0LOOP1: MOV AL,NUM[BX]CALL FAR PTR CMPRINC BXINC CXCMP CX,CNT ;LOOP CNT TIMESJNZ LOOP1ADD POSOD,30HADD POSEV,30HADD ZERO,30HADD NEGAOD,30HADD NEGAEV,30H ;TRANSFER TO ASC2 CODE MOV AH,02H ;TO PRINT CHARSMOV CX,0MOV BX,0LOOP2: MOV DL,BUF[BX]INT 21HINC BXINC CXCMP CX,1BH ;LOOP 26 TIMESJNZ LOOP2MOV AX,4C00HINT 21HRETSTART ENDPCMPR PROC FARCMP AL,0JGE BIGGERTEST AL,01HJNZ NODDINC NEGAEVJMP EXITNODD: INC NEGAODJMP EXITBIGGER: JE EQUALTEST AL,01HJNZ PODDINC POSEVJMP EXITPODD: INC POSODJMP EXITEQUAL: INC ZEROEXIT: RETCMPR ENDPCODE ENDSEND START运行结果:(图三:选做题程序运行结果)根据NUM中的数据,这个结果是正确的。

相关文档
最新文档