循环程序设计

上机实验07 循环程序设计

 

知识提要:

本节主要对循环结构的组成及其设计方法加以介绍,其知识要点有:

1、循环程序的基本结构通常由3部分组成

    1. 初始化部分

建立循环初始值,为循环做准备,如设置地址指针,(BX/SI/DI/BP),初始化循环控制变量或计数器(CX),数据寄存器(AX/DX)初值等.

    1. 循环体

循环体是循环程序的主体,是程序中重复执行的程序段.它是由循环工作部分、修改部分、和循环控制部分。

①循环工作部分:完成程序功能的主要程序段,用于执行程序的实际任务;

②修改部分:对循环参数进行修改,并为下一次循环做准备;

③循环控制部分:判断循环结束条件是否满足。通常判断循环结束方法:

  1. 用计数控制循环;循环是否进行了预定的次数。
  2. 用条件控制循环。循环终止条件是否满足。

3)结束处理处理部分

     主要是对循环的结果进行处理。也可没有此部分。

2、循环控制指令:

指令格式

执行操作

循环结束条件

LOOP标号

CX=CX-1;若CX=0,则循环

CX=0

LOOPNZ/LOOPNE 标号

CX=CX-1;若CX=0且ZF=0,则循环

CX=0或ZF=0

LOOPZ/LOOPE标号

CX=CX-1;若CX=0且ZF=1,则循环

CX=0或ZF=1

JCXZ 标号

仅测试(CX)=0,若是,则转移到目标地址,否则就顺序执行

 

3、循环控制可以分为:计数循环和条件循环。作为计数循环,一般是指循环次数是已知的情况,在程序设计的的循环时,先应将循环次数送入计数器CX中进行计数,在循环体中使用LOOP等循环指令。当然,也可以通过其他方式来进行,如cx←cx-1,jnz 等结合实现。

 

一、实验要求和目的

    1.了解汇编语言循环程序设计的基本流程;

    2.熟悉汇编语言循环基本指令的使用方法;

    3.掌握利用汇编语言的循环指令完成循环程序设计方法。

二、软硬件环境

    1.硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;

    2.软件环境:装有MASM 5.0、DEBUG、LINK和EDIT等应用程序。

三、实验涉及的主要知识单元

熟练使用循环指令和跳转等指令来实现循环,理解循环体结构中的初始化部分、循环体、结束部分。能结合前面分支结构相关的知识点,完成对循环结构的理解和掌握。

同时对循环结构中地址指针的设置,(BX/SI/DI/BP),初始化循环控制变量或计数器(CX)和数据寄存器(AX/DX)初值的设置方法等。

循环程序设计示例:

设VARY中有一组8位的符号数,编程统计其中 正数、负数、零的个数,分别存 VM、VN、VK变量中。

分析:设定此数组的元素匀为字节数据,则数组VARY中的数据个数用CNT  EQU  $-VARY求出,则循环次数为CNT次。在程序中,要将CNT的值送入CX中。将数组VARY中元素挨个与0比较,利用状态标志寄存器中的ZF位求出零的个数,利用SF位求出正、负数的个数。

具体程序设计sy07_1.ASM:

stack segment para  stack

   dw  20H dup(0)

stack ends

data segment

   vary  db 23h,78h,56h,0abh,00h,0cdh,59h,14h,98h,0efh,00h,0c0h

cnt equ $-vary

vm  db ?

vn  db ?

vk db ?

data ends

code segment

   assume cs:code,ds:data,ss:stack

start: mov ax,data

mov ds,ax

mov bx,0

mov dl,0

lea si,vary

mov cx,cnt

lop1:

cmp byte ptr[si],0

je zero

js lop2

inc bh

jmp  next

lop2:

inc bl

jmp next

    zero:

           inc dl

    next:

           inc si

loop lop1

mov vm,bh

mov vn,bl

mov vk,dl

mov ah,4ch

int 21h

code ends

end start

四、实验内容与步骤

1、实验内容

(1)单步运行调试上面程序sy07_1.ASM,  给程序的语句加上注释;

(2)编写程序,计算数组ARRAY中各数的和(参看书上P364例10-1)。程序保存为sy07_2.ASM;

(3)编写程序,统计字符串STRING中大写字母的个数(参看书上P366例10-2)。程序保存为sy07_3.ASM;

 

五、实验要求与提示

1、实验要求

    编写好程序好,单步运行一下,观察各语句运行的情况,掌握各比较指令、循环指令、跳转指令的功能和用法。

2、实验提示

(1)计算字符串长度中字符串应以$结尾;

(2)要用计数控制,则应知道循环次数,用CNT EQU $-ARRAY来进行;若数据类型是字,则循环次数还应除以2。

 

3、作业提交

把完成后的sy07_1.ASM、sy07_2.ASM、sy07_3.ASM提交。

1.实验截图

全部评论

相关推荐

05-04 09:38
已编辑
门头沟学院 引擎开发
个人9本海硕,本硕期间一直在投游戏相关实习/校招,岗位由客户端->引擎->TA->AIGC。最终目标肯定是独游制作人,所以程序策划美术都点了些,感觉也没谁了。值此春招末尾总结下技术向校招要点,算是回馈牛客社区了。也附上我的Github和个人博客,欢迎各种交流讨论。 前言 首先是个人惯例的劝退游戏行业。参见缅怀故人 和永远有多远 ,相比于互联网,游戏薪资大概相当但要求更高,加班严重且更为局限。如果你只是带着一腔热情想入这行,建议先找个日常实习了解下真实的游戏行业再做选择。 准备 当然,在你决定踏出这步后,第一步就是准备相关的笔试面试。这里先建议找到你感兴趣的公司岗位的JD,然后...
牛客28967172...:说的还是有道理的,我校招时就拿到过网易雷火好几个顶级项目组方向的offer,基本上流程和你说的一样。 但本质还是劝退互联网的游戏方向,本质上是代价更高,而且职业生涯容错率很低,方向比较窄。 代价是众所周知的严重加班,游戏大版本赶工基本上通宵无休,甚至国庆五一都没放假是常态。 职业生涯性价比低是因为游戏行业本质上就是赢家通吃,但你要跳槽只有腾讯网易等头部,要么就是米哈游莉莉丝库洛三七等少数中厂,然后就没了,公司是断崖的少 游戏开发相比互联网方向岗位非常非常少,比如网易整个雷火也才五六百人,里面十几个工作室,招人比例非常低,其他游戏公司也是一样。 而且方向也很窄,你做引擎开发就只能跳相关,你做游戏客户端也只能跳相关(游戏客户端都算吃香的,但市场hc也非常非常少,跳槽机会更少),基本上很难转回互联网 这里对比传统互联网,大厂多的都说不过来,而且容错率很大,你做搜索方向可以跳推荐,你做推荐方向可以跳广告,要求远没有游戏行业那么严,甚至你之前干测试都能跳槽研发方向
我的求职进度条
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务