欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    微型计算机原理与应用实验Word下载.docx

    • 资源ID:7140358       资源大小:73.12KB        全文页数:41页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    微型计算机原理与应用实验Word下载.docx

    1、编程思路:通过在三个数中找出最大值,将它与VAR1单元进行交换;然后对剩余的两个数进行比较,将较大值存放在VAR2中。汇编语言程序如下:STACK SEGMENT STACK STACK DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTVAR1 DB 46H ;先假设一组值,以便检验程序设计的正确性VAR2 DB 15HVAR3 DB 0A2HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, A

    2、X MOV AX, STACK MOV SS, AX LEA SP,TOP MOV AL,VAR1 ;用户编写的程序 CMP AL,VAR2 JAE NO_CHG1 XCHG AL,VAR2NO_CHG1: CMP AL,VAR3 JAE NO_CHG2 XCHG AL,VAR3NO_CHG2: MOV VAR1,AL ;最大值保存到VAR1 MOV AL,VAR2 JAE NO_CHG3 MOV VAR2,AL ;次大值保存到VAR2NO_CHG3: MOV AH,4CH ;返回DOS操作系统 INT 21HCODE ENDS END START程序执行后,(VAR1)0A2H,(VAR2)

    3、46H,(VAR3)15H,说明程序设计正确。一般来说,在程序结束处,应该使之返回到DOS状态,以便进行其它操作。 当要排序的数据为有符号数时,只需要将程序中相应的JAE指令改成JGE指令。例43 有一组测试数据(有符号数),每个数据占用16位二进制数,数据个数存放在缓冲区的前2个字节,现要求分别统计出大于0、等于0和小于0的个数,分别存放在GREATZ、ZERO、LITTLEZ单元中。有符号数的比较应该采用JG、JGE、JL、JLE等指令,同时还应该注意,MOV指令不会影响PSW中的标志位。将字单元GREATZ、ZERO、LITTLEZ用作为计数器,其初值均为0。然后对数据与“0”比较,当其

    4、大于0时,GREATZ单元加1;当其等于0时,ZERO单元加1;当其小于0时,LITTLEZ单元加1。程序如下:BUFFER DW 500 ;假设有500个数据,并利用重复宏随机 X=17 产生 REPT 500 X=(X+979) mod 65535 DW X ENDMGREATZ DW ?ZERO DW ?LITTLEZ DW ? START: XOR AX,AX ; MOV GREATZ,AX MOV ZERO,AX MOV LITTLEZ,AX MOV CX,BUFFER LEA SI,BUFFER+2ST_COUNT: MOV AX,SI ADD SI,2 AND AX,AX JLE

    5、 COUNT1 INC GREATZ JMP COUNT3COUNT1: JL COUNT2 INC ZEROCOUNT2: INC LITTLEZCOUNT3: DEC CX JNZ ST_COUNT MOV AH,4CH ;搬家程序的控制是以变化的数据个数作为条件。 MOV AX, 1000H MOV BX, 1000H MOV DI, 1500H MOV CX, 100 LOOP: MOV AL, BX MOV DI, AL INC BX DEC CX JNZ LOOP HLT 下面再举一个例子说明循环结构程序设计的方法。 假设从BUF单元开始为一个ASCII码字符串, 找出其中的最大数

    6、送屏幕显示。 程序流程图如图 4 - 4 所示。 DATA SEGMENT BUF DB ABCREF873 COUNT EQU $-BUF ; 统计串长度 MAX DB MAX, ?/ODH, OAH, $ DATA-ENDS DATA BEG:MOV AL, 0 ; 无符号最小数0AL LEA BX, BUF ; 串首址偏移量BX MOV CX, COUNT ; 串长度CX LAST: CMP BX, AL ; 比较 JC NEXT MOV AL, BX ; 大数AL NEXT: LOOP LAST ; 循环计数 NEXT :INC BX MOV MAX+4, AL ; 最大数MAX+4单

    7、元 MOV AH, 9 MOV DX, OFFSET MAX INT 21H ; 显示结果 MOV AH, 4CH 返回DOS CODEENDS 在上述程序中,ASCII应看成无符号数,无符号数的最小值为0, 因此,在进行第一次比较时,把0送AL寄存器, 各个数都和AL比较,每次比较后的较大的数放入AL寄存器中,N个数需要比较N次,若把第一个数送AL作为初始比较对象,那么N个数需要比较N-1次。下面举例说明如何进行双重循环的程序设计假设需要对无序表中的元素排序,冒泡排序是最常用的一种方法。设从地址ARRAY开始的内存缓冲区中有一个字数组, 要使该数据表中的N个元素按照从大到小的次序排列,用冒泡

    8、算法显示的过程叙述如下: 从第一个数开始依次进行相邻两个数的比较, 即第一个数与第二个数比较, 第二个数与第三个数比较 ,比较时若两个数的次序符合排序要求,则不做任何操作;若次序不对,就交换这两个数的位置。经过这样一遍全表扫描比较后,最大的数放到了表中第N个元素的位置上。在第一遍扫描中进行N-1次比较。用同样的方法再进行第二次扫描, 这时只需考虑N-1个数之间的N-2次比较,扫描完毕,最大的数放到了表中第N-1个元素的位置上 依此类推,在进行了N-1遍的扫描比较后将完成排序。下面是对有7个元素的次序表进行冒泡排序的过程。 表的初始状态: 43 36 65 95 81 12 25 第一遍扫描比较

    9、之后: 36 43 65 81 12 25 95 第二遍扫描比较之后: 36 43 65 12 25 81 95 第三遍扫描比较之后: 36 43 12 25 65 81 95 第四遍扫描比较之后: 36 12 25 43 65 81 95 第五遍扫描比较之后: 12 2536 43 65 81 95 第六遍扫描比较之后: 12 25 36 43 65 81 95 冒泡法最大可能的扫描遍数为N-1。 但是, 往往有的数据表在第1遍(1N-1)扫描后可能已经成序。为了避免后面不必要的扫描比较,可在程序中引入一个交换标志若在某一遍扫描比较中,一次交换也未发生,则表示数据已按序排列,在这遍扫描结束时

    10、,就停止程序循环,结束排序过程。 ARRAY DW d1, d2, d3, . , dn COUNT EQU(-ARRAY)2 ; 数据个数 FLAG DB-1 ; 交换标志, 初值为-1 STACK SEGMENT PARA STACK STACK DB 1024 DUP(?) STACK ENDS SORT: MOV BX, COUNT LP1: CMP FLAG, 0 ; 数组已有序? JE EXIT ; 是, 排序结束 DEC BX ; 否, 置本遍扫描比较次数 MOV CX, BX MOV SI, 0 ; 置数组的偏移地址 MOV FLAG, 0 ; 预置交换标志为0LP2: MOV

    11、 AX, ARRAYSI ; 取一个数据AX CMP AX, ARRAYSI2 ;与下一个数比较 JLE NEXT ; 后一个数大, 转NEXT XCHG AX, ARRAYSI+2 ; 逆序, 交换两个数 MOV ARRAYSI, AX MOV FLAG, -1 ; 置交换标志为-1 ADD SI, 2 ; 修改地址指针 LOOP LP2 ; 循环进行两两数据的比较 JMP LP1 ; 内循环结束, 继续下一轮排序EXIT: MOV AH, 4CH ; 排序完成, 返回DOS INT 21H END SORT循环程序设计技术例44 在SOURCE存储区中保存有500个字节数据,现在要求将数据

    12、中的0FFH值去掉,并传送到DESTINATION缓冲区中,其有效数据个数保存在NUMBER中。将SI指向源操作数区域,DI指向目的操作数区域,每次传送一个字节,但在传送前对其内容进行检测,如果为0FFH,则不传送。在传送的同时要使有效数据个数的计数单元NUMBER进行加1。N=500SOURCE LABEL BYTE ;假设有500个数据,并利用重复 X=17 ;宏随机产生 X=(X+97) mod 256 DB X DESTINATION DB N DUP(?NUMBER DW ? XOR AX,AX ; MOV NUMBER,AX MOV CX,N LEA SI,SOURCE LEA D

    13、I,DESTINATIONMOVE1: MOV AL,SI INC SI CMP AL,0FFH JZ MOVE2 MOV DI,AL INC DI INC NUMBERMOVE2: LOOP MOVE1MOVE_END:例45 在缓冲区DATABUF中保存有一组无符号数据(8位),其数据个数存放在DATABUF的第1、2个字节中,要求编写程序将数据按递增顺序排列。这里采用双重循环实现数据的排序,这可使程序变得简单。要对N个数据进行从小到大排序时,可以采用“冒泡法”:从后往前,每两个数据进行比较,当前者大于后者时,交换两者的次序;否则不变,这样,经过N-1次比较,可以将最小值交换到第一个单元(

    14、最轻的气泡最先冒出水面)。接着对后N-1个数据,重复上述过程,使次小值交换到第二个单元;依此类推,共进行N-1次比较过程,可以完成数据的排序操作。由于每次比较操作都在相邻两个单元进行,因此只需要一个指针。 N=100 ;设有100个数据STACK SEGMENT STACK STACKDATABUF DW N DB N DUP(? MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX 为了能够进行排序,DATABUF 中必须已经保存数据, 因此我们产生一组随机数据 MOV CX,DATABUF LEA SI,DATABUF+2 MOV B

    15、L,23 MOV AL,11 LP: MOV SI,AL ADD AL,BL LOOP LP; 下面给出数据排序程序 MOV CX,DATABUF DEC CX ;外循环次数 LEA SI,DATABUF2 ;SI指向数据区首地址 ADD SI,CX ;SI指向数据区末地址LP1: ;外循环开始 PUSH CX PUSH SILP2:内循环开始,其循环次数恰好 与外循环的CX值一致 CMP AL,SI-1 JAE NOXCHG XCHG AL,SI-1 ;交换操作NOXCHG: DEC SI LOOP LP2 POP SI POP CX LOOP LP1;数据排序结束MOV AH,4CH ;返

    16、回DOS如果要求将数据从大到小排序,则只需要将交换条件指令“JAE NOXCHG”改成“JBE NOXCHG”;如果要排序的数据为有符号数,则只需要将交换条件指令“JAE NOXCHG”改成“JGE NOXCHG”。例46 有一组数据(16位二进制数)存放在缓冲区BUF中, 数据个数保存在BUF的前两个字节中。要求编写程序实现在缓冲区中查找某一数据(16位),如果缓冲区中没有该数据,则将它插入到缓冲区的最后;如果缓冲区中有多个被查找的数据,则只保留第一个,将其余的删除。在缓冲区BUF中搜索指定的数据,当没有找到该数据时,在最后插入该数据;当找到该数据时,则进入搜索多余的重复数据,每次找到该数据

    17、就删除它(即将缓冲区的剩余数据向前移动一个字)。当然还应该更新缓冲区的长度单元。 要删除数据时,可以采用例4.4的方法,开辟另一个存储区域,并且删除后还需要将数据传送回原来的存储区域。我们还可以巧妙的利用指针,在同一个区域中实现删除功能。在例4.4的方法中,让目的操作数指针DI也指向源操作数区域,如图4.3所示,这样,每次的写操作可以写回到原来的存储区域,一开始SI与DI指针指向同一个地址,当找到需要删除的单元时,由于只有读操作,没有写操作,使DI指针落后于SI,从而完成将后续单元的内容向前移动的操作。BUF DW 20 ; 设缓冲区原有20个字DW 1000H,0025H,6730H,675

    18、8H,7344H,2023H,0025H,6745H, 10A7H,0B612HDW 56AAH,15ACH,5789H,56AAH,6666H,7777H,56AAH,8888H,9999H,1111H DW 10 DUP(?) ;为可能的插入操作留出空间NEW DW 56AAH ;指定的数据为(NEW)56AAHMOV AX,STACK MOV SS,AX搜索指定的数据 MOV CX,BUF LEA SI,BUF+2 MOV AX,NEWL1: CMP AX,SI JZ L2 LOOP L1没有找到,则插入数据MOV SI,AX INC BUF JMP OK ;结束L2: ;找到第一个数据

    19、,在剩余部分搜索并进行删除操作 MOV DI,SI ;DI与SI指向剩余区域的首地址L3: MOV BX,SI ;读数据 INC SI CMP AX,BX ;比较 JZ L4MOV DI,BX ;写数据 INC DI JMP L5L4: DEC BUF ;更新长度计数器L5: LOOP L3OK: INT 21H 例47 在缓冲区DAT1和DAT2中,存放着两组递增有序的8位二进制无符号数,其中前两个字节保存数组的长度,要求编程实现将它们合并成一组递增有序的数组DAT,DAT的前两个字节用于保存新数组的长度。这里要用到3个指针,对于将数据写入数组DAT的指针首选使用DI,从DAT1和DAT2读

    20、数据的两个指针可分别采用SI和BX,并结合使用字符串指令,可以简化程序的设计。 在程序设计中,将由BX指示的缓冲区DAT2中的内容读入AL,这样,当需要将DAT1的内容传送到DAT时,可直接采用MOVSB指令;当需要将DAT2的内容传送到DAT时,可直接采用STOSB指令。DAT1 DW 10 ;设DAT1中有10个数据 DB 10H,25H,67H,68H,73H,83H,95H,0A8H,0C2H,0E6HDAT2 DW 13 ;设DAT2中有13个数据 DB 05,12H,26H,45H,58H,65H,67H,70H,76H,88H,92H,0CDH,0DEHDAT DW ? DB 2

    21、00 DUP(?) DATA ENDS MOV CX,DAT1 ;CX表示DAT1的数据个数 MOV DX,DAT2 ;DX表示DAT2的数据个数 MOV DAT,CX ;先计算出DAT的数据个数ADD DAT,DX LEA SI,DAT1+2 ;SI指向DAT1的数据区 LEA BX,DAT2+2 ;BX指向DAT2的数据区 LEA DI,DAT+2 ;DI指向DAT的数据区 CLD MOV AL,BX INC BX CMP AL,SI JB L3 MOVSB ;DAT1区中的一个数据传送到DAT区 JMP L2 STOSB ;DAT2区中的一个数据传送到DAT区 DEC DX JZ L5

    22、JMP L1 MOV SI,BX MOV CX,DX REP MOVSB ;将DAT1或DAT2中剩余部分全部 传送到DAT区例48 已知缓冲区BUFA内有20个互不相等的整数(其序号从0到19),缓冲区BUFB内有30个互不相等的整数(其序号从0到29)。编写程序完成:将既在BUFA中出现又在BUFB中出现的整数(设为x)存放在缓冲区BUFC中,并将x在BUFA和BUFB中的序号分别存放于缓冲区BUFCA和BUFCB中。这里涉及到5个存储区域,最好有5个指针,但BUFC、BUFCA和BUFCB为同步操作,即当找到x时,需要同时对BUFC、BUFCA和BUFCB进行操作,而且每个区域都写入一个字节,因此它们可以采用同一个指针,寻址方式为寄存器相对寻址,即设AL为找到的值,DL、BL为序号,则其操作为:MOV BUFCDI,AL MOV BUFCADI,DL MOV BUFCBDI,BL 对序号的处理也应仔细设计,采用寄存器相对寻址时


    注意事项

    本文(微型计算机原理与应用实验Word下载.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开