微机原理与接口技术实验56.docx
《微机原理与接口技术实验56.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验56.docx(14页珍藏版)》请在三一办公上搜索。
1、微机原理与接口技术实验报告学院:计信学院专业:班级姓名学号实验组实验时间2011/5/6指导教师成绩实验项目名称实验三 汇编程序设计:循环、子程序实验目的熟悉8088指令系统,掌握程序设计方法熟悉汇编语言编程,掌握串操作指令的使用实验原理在Debug环境下,用8086指令编写、调试汇编程序。实验内容编写并调试一个排序子程序,其方法为用冒泡法将RAM中几个单字节无符号的正整数,按从大到小的次序重新排列。在4000H-400FH中查出有几个字节是零,把计数个数放在4100H中。实验环境Debug环境。实验止 步骤在4000H-400AH中通过键盘命令输入不等的10个数,运行本实验程序后检查4000
2、H-400AH中内容是否按从大到小排列。在和PC机联机时,用连续单步方式,可很清 楚地看出数据排序时数据移动变化情况。在4000-400FH的几个单元中输入零,运行本程序后检查4100H中是几个单元数。实验结果一. 实验分析实验目的为在4000H-400AH中通过键盘命令输入不等的10个数,运行本实验程序后检查 4000H-400AH中内容是否按从大到小排列。1. 通过键盘命令输入十个不等的数字。由于用调用dos 21号功能语句时是对每个输入 的数作为字符处理,故存在一个问题:每次输入的数据存储为一个字节,且为3*H (*代 表输入的数字)。此时就每次只能输入个位数字。为了解决这个问题,可以将
3、每次输入的 数字存储为字符型后去除高位的3,变为0*H,由于将输入数据看做十进制的两位数,故 第一次的数字需要乘以10。故先对进行调整后的0*H乘以10,然后存在寄存器中,对于 第二次的数据只需进行调整去除ASCII码带的3,然后加上第一次输入数据调整后的十 位数结果。相当于输入12,存储时先将31H去除3,变为01H,然后01H*10d-0AH,再将 0AH+02H=0CH .此时存储的数据才为正确的输入的十进制数字12。每次执行输入两个数 字,循环十次完成输入数据。2. 内循环:进行输入的缓冲区中的数据的排序。采用冒泡排序法,第一次将第一个数据 与其挨着的下一个数据进行比较,若其小于下面的
4、数据则按大在上,小在下调换位置。 然后重复比第二个数据和第三个数据,大在上,小在下,依次循环直至最后一个数据。 此时保证最小的数据在最底下。3外循环:重复进行第2步,比较直至倒数第二个数据。然后重复第2步,比较直至倒 数第三个数据。每次重复内循环,执行次数少依次,直至最后实现从大到小,依次排列。二. 流程图左边为输入数据的流程图,右边为整体的流程图。三.代码DATA SEGMENT BUFF DB 10 DUP(?) DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;初始化MOV CX,000AH;CX中
5、放计数次数。由于有十个数,需循环输入10 次,故 CX=0AHMOV BX,0000H;BX作为缓冲区偏移首址,每次将输入数据 BUFF中,故BX作为控制变量。GET: PUSH CX;CX入栈,保证循环取得十个两位的十进制数PUSH BX;由于在后面对输入数据进行处理的时候要用到 BX,且BX又要充当缓冲区偏移地址,故每 次循环获得数字时先将BX入栈,用时出栈MOV CX,0002H;每次获得两位十进制数时要获得两次数字,故CX 为 0002HMOV BX,0000H;每次获得两位十进制数时需要BX在两次输 入数字时初始值为0,故此时赋值为0000Hnewchar:;进入获得两位十进制数字P
6、USH CX;CX入栈。即此时将0002H入栈MOV AH,01HINT 21H;21号功能调用,每次输入一个字符sub al,30h;字符存储形式为3*H,故将输入的存储在AL 中的数据减去30H.jl STOP;若小于30H则证明不是数字,退出cmp al,9djg STOP;若大于09d,即也不是数字,退出cbw.调整高位,若AL符号位正,则高位全为0, 若为负,则全为1xchg ax,bx;ax,bx中数据互换mov cx,10d;CX赋值为十进制数字10mul cx;将CX中的数据与AX中数据相乘。存储在 AX中xchg ax,bx;交换AX,BX中的数据add bx,ax;AX,B
7、X数据相加,存储在BX中POP CX;CX 出栈。CX=0002HDEC CX;CX减一。由于在调整输入数据时用到CX, 为保证数据不被更改,故用入栈出栈方式保 存。此时CX=0001H。保证在每次输入时要输CMP CX,0000HJNZ newcharXCHG AX,BXPOP BXMOV BUFFBX,ALINC BXPOP CXLOOP GETMOV CX,000AH入两次数据。;将CX与0000H比较;不、寺于0,则表示个兀整的两位十进制 数字没有输入完,继续跳转到newchar;等于0,表示输入完全。此时交换AX,BX 数据,进入保存输入的十进制数字。;BX出栈,此时BX充当缓冲区偏
8、移地址;由于假定输入数据全为正,此时AL中就是 存储的输入的两位十进制数。将其存储到缓 冲区中。偏移地址为BX。;存储 个数后BX自动加1,为下次存储做 准备;CX出栈,此时CX=000AH。保证循环获得 数据次数;循环十次获得数据;循环获得数据后要进入排序,此时CX和BX都已经改变,需要对其初始化,保证下面调整的需 要MOV BX,0000HFIRST:MOV BX,OFFSET BUFF ;BX 作为 BUFF 的偏移地址PUSH CX;将CX入栈SECOND:MOV AH,BXMOV AL,BX+1CMP AH,ALJL CHANGE;缓冲区中第一个和第二个数据分别放入AX中 的AH和A
9、L中;比较AH,AL;AHnasn sy6 Microsoft Macro fissenbler Uersion 5.00 Copyright Microsoft Corp 1981-1985, 1987- All rights reserued.Object filename Esy6.OBJ: Source listing CNUL.LST: Cross-reference NUL.CRF:50126 + 415010 Bytes synbol space free0 Warn ing Errors 0 Seuere ErrorsC = 5网福sy6Microsoft Ouerlay Li
10、nker Uersion 3.60 Copyright Microsoft Corp 1983-1987. fill rights reserued-Run File SV6.EXE: List File NUL.MAP: Libraries .LIB: LINK : warning L4021: no stack segmentC:nasn50debug sy6.exe -GProgram terminated normalli/-D 4100 410F 1443:4100 00 01 02 00 03 04 05 06-00 07 08 09 00 00 00 00-D 4200 4200
11、 1443:4200 07.-QC: masin50例 4.64DATA SEGMENTARY1 DW 100 DUP(01H)SUM1 DW ?ARY2 DW 100 DUP(02H)SUM2 DW ?DATA ENDSSTACK SEGMENT STACK STACKSA DW 50 DUP(?)TOP EQU LENGTH SASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROC FARSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,TOPLEA SI,AR
12、Y1MOV CX,LENGTH ARY1CALL SUMLEA SI,ARY2MOV CX,LENGTH ARY2CALL SUMMOV AH,4CHINT 21HRETMAIN ENDPSUM PROC NEARXOR AX,AXL1:ADD AX,WORD PTRSIINC SIINC SILOOPL1MOV WORD PTRSI,AXRETSUM ENDPCODE ENDSEND START4?78 + 4150?4 Btes symbol space fNULbLSTJ=NUL.CRF3:QC = Mriasn50link 464Microsoft CR Oyerla1 Linlicr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 实验 56
链接地址:https://www.31ppt.com/p-5285988.html