• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 循环程序的设计

循环程序的设计

作者:汇编爱好者 字体:[增加 减小] 来源:互联网 时间:2017-06-17

汇编爱好者通过本文主要向大家介绍了c语言循环程序设计,循环结构程序设计,循环程序设计实验报告,vb循环结构程序设计,循环程序设计实验等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

    循环程序可以有两种结构形式,如图所示。一种是DO_WHILE结构形式;另一种是DO_UNTIL结构形式。

    例5.1  设内存BUFF开始的单元中依次存放着30个8位无符号数,求它们的和并放在SUM单元中,试编写程序。

    分析:这是一个求累加的程序。程序如下:

    MOV  SI,BUFF  ;设地址指针

    MOV CX,30    ;设计数初值

    XOR AX,AX   ;设累加器初值

    AGAIN: ADD AL,[SI]

    ADC AH,0

    INC  SI

    DEC CX

    JNZ  AGAIN     ;循环累加

    MOV SUM,AX

    例5.2  在给定个数的16位数串中,找出大于零、等于零和小于零的个数,并紧跟着原串存放。

    分析:这是一个统计问题,须设定三个计数器分别统计三种情况下的结果。程序如下:

    DATA SEGMENT

    BUFF DW  X1,X2,X3,……,Xn

    COUNT  EQU  $-BUFF   ;此时,COUNT的值为BUFF所占的字节数

    PLUSE  DB   ?

    ZERO   DB   ?

    MINUS DB   ?

    DATA ENDS

    CODE SEGMENT

    ASSUME CS:CODE,DS:DATA

    ASSUME ES:DATA,SS:STACK

    BEGIN: MOV AX,DATA

    MOV DS,AX

    MOV CX,COUNT

    SHR CX,1         ;相当于除2,正好为BUFF中的数据个数

    MOV DX,0          ;设定计数器初值

    MOV AX,0          ;设定计数器初值

    LEA  BX,BUFF

    AGAIN:   CMP  WORD PTR[BX],0

    JAE  PLU        ;大于等于0,则转PIU

    INC  AH         ;<0,则统计

    JMP  NEXT

    PLU:     JZ  ZER         ;=0,则转ZER

    INC  DL          ;>0,则统计

    JMP  NEXT

    ZER:  INC  DH          ;=0,则统计

    NEXT:  INC  BX

    INC  BX

    LOOP AGAIN

    MOV PLUS,DL

    MOV ZERO,DH

    MOV MINUS,AH

    MOV AX,4C00H

    INT  21H

    CODE  ENDS

    END BEGIN

    例5.3 在ADDR单元中存放着16位数Y的地址,试编写一程序,把Y中1的个数存入COUNT单元中。

    分析:这是一个循环统计的工作。采用DO—WHILE结构,做16次循环,每次将最高位移入CF中进行测试,先判断结果是否为0,若为0,则结束;否则统计计数后循环重复。

    程序如下:

    DATA SEGMENT

    ADDR DW  NUMBER

    NUMBER DW  Y

    COUNT  DW  ?

    DATA  ENDS

    PROGRAM SEGMENT

    MAIN  PROC FAR

    ASSUME CS:PROGRAM,DS:DATA

    START: PUSH DS

    MOV AX,0

    PUSH AX

    MOV AX,DATA

    MOV DS,AX

    MOV CX,0         ;计数器初值=0

    MOV BX,ADDR

    MOV AX,[BX]       ;取Y送AX

    REPEAT: TEST AX,0FFFFH    ;检测是否为全0

    JZ  EXIT           ;是,则转EXIT

    JNS  SHIFT          ;最高位是0,则转SHIFT

    INC  CX             ;最高位是1,则统计计数

    SHIFT:  SHL  AX,1   ;处理下一位

    JMP  REPEAT

    EXIT:  MOV COUNT,CX

    RET

    MAIN  ENDP

    PROGRAM ENDS

    END START

    在实际应用中,有些问题较复杂,一重循环不够,必须使用多重循环实现,这些循环是一层套一层的,通常称为循环嵌套。

    例5.4 在DS所决定的数据段,从偏移地址BUFFER开始顺序存放100个无符号16位数,现要编写程序将这100个字数据从大到小排序。

    分析:排序的方法有很多,在这里,我们采用冒泡法。

    程序如下:

    LEA  DI,BUFFER   ;DI作为指针,指向要排序的数据

    MOV BL,99         ;循环控制初值

    NEXT0:MOV SI,DI

    MOV CL,BL

    NEXT3:MOV AX,[SI]        ;取一个数

    ADD SI,2

    CMP AX,[SI]        ;与下一个数进行比较

    JNC  NEXT5      ;大于等于时转移

    MOV DX,[SI]        ;否则,两数交换

    MOV [SI-2],DX

    MOV [SI],AX

    NEXT5:DEC CL             ;控制进行交换的次数

    JNZ  NEXT3

    DEC BL             ;修改交换的次数

    JNZ  NEXT0

    HLT

    例5.5  试编制一个程序,把BX寄存器中的二进制数以十六进制的形式显示在屏幕上。

    解析:根据题目要求应将BX中的内容从左到右每4位一组显示出来,共显示4个十六进制数位。如果显示的数位是0~9,则把4位二进制数加上30H,转换成相应的ASCII码30H~39H;如果是A~F,则应加上37H(30H+7),转换成ASCII码41H~46H。显示字符可以使用DOS功能调用来实现。下图是程序框图。

    

    以binihex.asm为文件名,建立源程序如下:

    ; binihex.Asm

    prognam segment           ; 定义代码段

    main proc far

    assume cs:prognam 

    start:              ; 程序从此处开始执行 

    ; 为正常返回DOS而设置堆栈

    push    ds 

    sub     ax,ax 

    push    ax 

    ; 下面是程序的主要部分

    mov    ch,4       ; 4组二进制数

    rotate:

    mov    cl,4      ; 每组4

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 循环程序的设计
  • 循环程序设计

相关文章

  • 2017-06-28汇编源码系列之cleanf
  • 2017-06-28汇编源码系列之brk
  • 2017-06-28汇编源码系列之clock
  • 2017-06-17CPU 状态控制指令
  • 2017-06-28汇编源码系列之clear
  • 2017-06-17各种进位计数制
  • 2017-06-28详解驻留exe文件
  • 2017-06-28汇编源代码之汇编语言制作的光带菜单及源程序(1.0)
  • 2017-06-28汇编源码系列之comint
  • 2017-06-28汇编源代码之CIH文件型病毒检测消除程序

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 除运算指令
    • 汇编语言的艺术-准备工作(五)
    • 内存映射文件原理及实例
    • 汇编语言编写DOS下的内存驻留程序(4)
    • 树型视图控件详解
    • 汇编语言中“[]”的用法
    • 标志寄存器传送指令
    • 汇编源码系列之cleanf
    • 列表视图控件介绍
    • 汇编教程:启动画面

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有