微机原理第19组作业_第1页
微机原理第19组作业_第2页
微机原理第19组作业_第3页
微机原理第19组作业_第4页
微机原理第19组作业_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微型计算机原理及应用作业作业组别:十九班级:11级机控一班姓名:商夏学号:110101010259作业指导教师:陈子明 李艳文、王志松、赵玉勤、张庆玲项目完成时间:2014-4-17目录 题目要求1、 分析题目2、 应用说明3、 程序框图4、 详细程序程序运行结果分析5、 程序调试情况程序运行结果分析6、 体会题目一:编写程序对在数据段BUF1地址起存放一串字符个数进行统计,串结束标志为-1,并将统计的结果放到CX中。1、分析题目:利用字符型指针,该指针指向BUF1存储区,并定义一串字符;判断首个数据是否为-1,省去无谓的循环;进入循环:每次取指针内容判断是否为-1;地址加一的同时令CX寄存器

2、也加一,存放字符个数。2、应用说明:主存DS段地址为BUF1处存放字符串;用16位CX寄存器作为循环指令中的计数器;将取来的数据存入AL中;用位操作指令XOR进行逻辑运算;用条件转移指令JZ 判断循环何时终止;用无条件转移指令JMP进行循环,同时CX记录字符个数。开始3、程序框图: SI,CX赋初值 是结束否取首个数据存入AL等于0FFHINC CXINC SI4、详细程序: .MODEL SMALL .STACK .DATA BUF1 DB 3,6,-2,9,-5,1,0,-1;定义一串字符 .CODE .STARTUP MOV SI,OFFSET BUF1;取BUF1首个字符地址存入SI

3、MOV CX,0;初始化CX,用CX存放字符个数L1: MOV AL,SI;将首个字符存入AL中 XOR AL,0FFH;与-1异或,检查是否串结束 JZ L2;若串结束则跳至程序尾 INC CX;字符数加一 INC SI;地址加一,以取下一个字符 JMP L1;验证并计数下一个字符L2: .EXIT END程序运行结果分析:SI依次取得数据并存入AL中,然后CX计数器加一;当遇到-1时,程序结束,此时CX中的数即为数据段BUF1地址起存放的一串字符的个数。5、程序调试情况:注:以下程序为最初设计程序;下划线部分为非正确语句。 .MODEL SMALL .STACK .DATA BUF1 DB

4、 3,6,-2,9,-5,1,0,-1;定义一串字符 .CODE .STARTUP MOV DX,OFFSET BUF1;取BUF1首个字符地址存入DX MOV CX,0;初始化CX,用CX存放字符个数L1: PUSH DX;将DX内数据压入堆栈 XOR DX,0FFH;与-1异或,检查是否串结束 POP DX;将DX内原数据弹出 JZ L2;若串结束则跳至程序尾 INC CX;字符数加一 INC DX;地址加一,以取下一个字符 JMP L1;验证并计数下一个字符L2: .EXIT END程序运行结果分析:此程序由于用到PUSH、POP语句,因此存入的数是不会随地址指针改变而改变的,起到的作用

5、只是暂存数据于堆栈中,故使程序陷入循环不终止状态。鉴于此,将语句改为MOV指令语句。存放偏移地址用到了DX寄存器是错误的。DX是数据寄存器,存放双子长数据的高16位。应该改用SI变址寄存器,DS:SI,寻址数据段中的源操作数。6、体会:存数据可用MOV指令存入寄存器,也可用堆栈操作指令。但是我忽略了书中一句话“堆栈可用来临时存放数据,以便随时恢复它们”。因此才使循环不终止。此外,获取偏移地址使用寄存器也存在错误。这些启发我对于知识的学习需要探求其本质及特点,不可只求表面。题目二:内存中有一个数x,把此数的前四位变反,后四位维持不变,送回同一单元。1、分析题目:定义变量;用位操作指令变换。2、应

6、用说明:用8位寄存器AL存放数据;用位操作指令XOR实现取反。3、程序框图: 4、详细程序:.MODEL SMALL.STACK.DATAX DB 0CH;定义变量.CODE.STARTUPMOV AL,X;将内存中数X存入ALXOR AL,0F0H;数X低四位不变,高四位变反MOV X,AL;数X送回AL.EXITEND程序运行结果分析:X的前四位变反,后四位不变,并送回了同一单元AL。5、 程序调试情况:注:以下程序为最初设计程序。.MODEL SMALL.STACK.CODE.STARTUPMOV AL,X;将内存中数X存入ALXOR AL,0F0H;数X低四位不变,高四位变反MOV X

7、,AL;数X送回AL.EXITEND程序运行结果分析: 此程序运行提示为变量错误,运行结果出错。原因在于:我初认为X是一个给定的数,但实则它是一个变量,需要自行定义为字节型数据或字型数据,放在数据段。6、 体会: 再简单的题目也需要理解每一个细节。但凡是变量都需要在数据段预定义。题目三:编写子程序。求内存中一无符号字节型数据序列的最大值和最小值。该无符号字节型数据的起始地址位于SI中,数据个数位于CX中。要求求得的最大值存放于AH中,最小值存放于AL中。主程序调用子程序实现上述功能。1、分析题目:定义变量;取起始地址于SI中;将数据个数存入CL中,并设置循环次数;将最大值存放于AH中,最小值存

8、放于AL中;调用子程序;逐个数据比较大小,使得AH中存放更大的数,AL中存放更小的数;用到计数循环,循环次数为数据个数减一;返回主程序;子程序结束。2、应用说明:以变量名array来存放一个无符号字节型数组;该无符号字节型数据的起始地址位于SI中;数据个数位于CL中;AH存放最大值,AL存放最小值;用堆栈保护使用的寄存器AX(AH、AL);用CMP比较两数大小;用JBE、JAE、JMP实现跳转;子程序名为DPSTRI,过程声明有一对伪指令PROC、ENDP完成;主程序用CALL指令调用子程序,子程序用RET返回主程序。3、 程序框图:否否结束开始子程序结束返回主程序将最大、小值弹出是CL=0是

9、DEC CXDEC CL是SI>AHSI<AHINC SI取下一个数SI取第一个数依次存入AH、AL将最大|、小值分别压入AH、AL调用子程序SI、CL赋初值否AL SIAH SI 4、详细程序: .MODEL SMALL .STACK .DATA ARRAY DB 6,30H,31H,32H,33H,34H,35H;假设一个无符号字节型数组 .CODE .STARTUP MOV SI,OFFSET ARRAY1;取字符串首地址于SI中 MOV CL,ARRAY;将数据个数存入CL DEC CL;数据个数减一为循环次数 CALL DPSTRI;调用子程序 .EXITDPSTRI P

10、ROC;子程序开始 PUSH AX;保护寄存器用到的内容,并将最大、小值分别压入AH、Al MOV AH,SI;取出第一个元素给AH,AH用于暂存最大值 MOV AL,AH;取出第一个元素给AL,AL用于暂存最小值DPS1: INC SI;开始比较:地址增一,为与下一个数比较做准备 CMP SI,AH;比较第一个数与下一个数的大小 JBE DPS2;若第一个数大于下一个数,跳至DPS2 MOV AH,SI;否则,AH取得更大的数据DPS2: CMP SI,AL;比较第一个数与下一个数的大小 JAE NEXT;若第一个数大于下一个数,跳至NEXT MOV AL,SI;否则,AL取得更小的数据NE

11、XT: LOOP DPS1;计数循环,循环五次 RET;返回主程序DPSTRI ENDP;子程序结束 END程序运行结果分析: 鉴于我定义的数组是按照从小到大顺序排列的,故AL中显示为“30”。随变址寄存器SI依次加一,同时循环次数减一至零,AH中的数据一直更换,为更大的数,最终显示“35”。5、程序调试情况:注:以下程序为最初设计程序;下划线部分为问题语句。.MODEL SMALL .STACK1 .DATA ARRAY DB 30H,31H,32H,33H,34H,35H;假设一个无符号字节型数组 .CODE .STARTUP MOV SI,OFFSET ARRAY;取字符串首地址于SI中

12、 MOV CX,SI;将数据个数存入CX2 DEC CX;数据个数减一为循环次数 MOV AH,SI;取出第一个元素给AH,AH用于暂存最大值 MOV AL,AH;取出第一个元素给AL,AL用于暂存最小值 CALL DPSTRI;调用子程序 .EXIT3DPSTRI PROC;子程序开始 PUSH AH;保护寄存器用到的内容,将最大值压入AH PUSH AL;保护寄存器用到的内容,将最小值压入ALDPS1: INC SI;开始比较:地址增一,为与下一个数比较做准备 CMP SI,AH;比较第一个数与下一个数的大小 JBE DPS2;若第一个数大于下一个数,跳至DPS2 MOV AH,SI;否则

13、,AH取得更大的数据4 JMP NEXT;SI中已为大值,故不必再与小值比较DPS2: CMP SI,AL;比较第一个数与下一个数的大小 JAE NEXT;若第一个数大于下一个数,跳至NEXT MOV AL,SI;否则,AL取得更小的数据NEXT: LOOP DPS1;计数循环,循环五次 POP AL;将最小值弹出到AL中3 POP AH;将最大值弹出到AH中 RET;返回主程序DPSTRI ENDP;子程序结束 END程序运行结果分析: 处,我的目的是是将字符个数存入CX,但是语句执行的结果是把某地址处的单元内容给了CX;此外,我定义的是字节型数据,用CX存放是不合法的;处,两条语句应放在子程序内;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论