1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 汇编语言实验5:循环结构程序设计

汇编语言实验5:循环结构程序设计

时间:2021-09-15 05:34:14

相关推荐

汇编语言实验5:循环结构程序设计

《汇编语言程序设计》实验报告

实验五 循环结构程序设计1. 实验目的2. 实验任务3. 实验步骤3.1 循环结构题目设计3.2 编写代码3.3 代码分析3.4 运行测试 4. 实验总结

实验五 循环结构程序设计

1. 实验目的

掌握汇编语言程序设计的基本方法和技能掌握汇编语言源程序的编辑汇编连接和执行的完整过程掌握汇编过程中各种命令的作用及使用方法掌握汇编语言中的循环结构程序设计

2. 实验任务

熟悉汇编语言环境,熟练汇编语言的编写学习循环结构的汇编语言程序的设计和调试加深对汇编语言循环结构的理解加深对汇编语言整体的认识和把握掌握在汇编语言中循环结构的实现方法和流程

3. 实验步骤

3.1 循环结构题目设计

编写计算1+2+3+…+99+100的程序,要求把结果存放于WORD类型变量X中 。
从STR1为起始地址的30个字符,依次传送到以STR2为起始地址的连续字节存储单元中。
在BLOCK单元开始的存储区中,连续存放着30个学生的课程成绩,统计其中各个分数段的学生人数:90~100 80~89 70~79 60~69 60分以下的学生数分别存放到S9 S8 S7 S6 S5中。

3.2 编写代码

代码一

DATAS SEGMENT;此处输入数据段代码 SUM DW ?DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码XOR AX,AX ;AX清0MOV CX,100again:ADD AX,CX ;从100倒序累加到AXLOOP againMOV SUM,AXMOV AH,4CHINT 21HCODES ENDSEND START

代码二

DATAS SEGMENT;此处输入数据段代码 STR1 DB 'ABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789'STR2 DB 30 DUP(?)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV SI,OFFSET STR1 ;源地址指针MOV DI,OFFSET STR2 ;目的地址指针MOV CX,30 ;设置循环次数again:MOV AL,[SI]MOV [DI],ALINC SI ;指针+1INC DI ;指针+1LOOP againMOV AH,4CHINT 21HCODES ENDSEND START

代码三

DATAS SEGMENT;此处输入数据段代码 BLOCK DB 20,30,100,50,65,49,25,22,39,98,56,77,63,30,66,75,41,88,12,77,78,69,55,66,68,88,6,82,92,63,76COUNT EQU 30S9 DB 0S8 DB 0S7 DB 0S6 DB 0S5 DB 0DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV BX,OFFSET BLOCK ;源地址指针MOV CX,COUNT ;循环次数30again:MOV AL,[BX] ;取出数据送至ALCMP AL,100 ;与100比较 JA exit;大于100 直接结束CMP AL,90 ;与90比较JAE L9;大于等于90 到L9CMP AL,80 ;与80比较JAE L8;大于等于80 到L8CMP AL,70 ;与70比较JAE L7;大于等于70 到L7CMP AL,60 ;与60比较JAE L6;大于等于60 到L6L5:INC S5 ;S5+1JMP L10 ;转L10循环L6:INC S6 ;S6+1JMP L10 ;转L10循环L7:INC S7 ;S7+1JMP L10 ;转L10循环L8:INC S8 ;S8+1JMP L10 ;转L10循环L9:INC S9 ;S9+1L10:INC BX ;BX+1到下一数据LOOP again ;执行循环exit:MOV AH,4CHINT 21HCODES ENDSEND START

3.3 代码分析

代码一

利用循环实现从1到100相加,首先将AX寄存器清零,设置CX值为100,循环again,将CX值加到AX上,每次CX-1,最后将AX值赋值到SUM内存单元中存储结果。

代码二

首先将源地址存放到SI,将目的地址存放到DI,设置CX值即循环次数为字符串长度,然后将[SI]即源地址指针指向的内容通过AL转存到[DI]指针的地址处。

代码三

Block源地址指针存放到BX寄存器中,设置CX寄存器值为COUNT,即数据的个数,通过循环again,依次确定每个数据的范围,将对应存储地址单元的内容加1,最终得到执行结果。

3.4 运行测试

图表 1 代码一测试

图表 2 代码二测试

图表 3 代码三测试

4. 实验总结

成功运行了汇编语言代码测试,熟悉了汇编语言运行环境。掌握了汇编语言程序设计循环结构设计的基本方法和技能。通过本次实验,对循环结构的设计有了新的认识和更深的了解,了解到语句之间如何进行嵌套及在汇编语言中面对特殊情况时如何跳出循环或忽略本次循环,了解到循环结构程序的执行过程。在题目设计和实现的过程中,也遇到了很多的问题,认识到了自己的很多不足,对于新的问题,没有自己的解题思路,出现了的问题自己不知道出现在哪里,最终认识到自己还是练习的太少,导致汇编语言不太熟练,所以在以后更要对自己的缺陷进一步学习和强化。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。