• 多重循环程序设计


    例题1:给十个单字节无符号数排序:

     1 ;功能名称,说明二重循环的实现
     2 DSEG        SEGMENT
     3 BUFFER     DB  23,12,45,32,127,3,9,58,81,72
     4 N             EQU 10
     5 DSEG      ENDS
     6 ;
     7 CSEG         SEGMENT
     8                     ASSUME CS:CSEG,DS:DSEG
     9 START:   MOV AX,DSEG
    10                     MOV DS,AX
    11                     MOV BX ,OFFSET BUFFER -1
    12                     MOV SI, 1
    13         FORI:MOV DI,SI
    14                     INC DI
    15         FORj:MOV AL,[BX+SI]
    16                     CMP AL,[BX+DI]
    17                     JBE  NEXTJ
    18                     XCHG AL,[BX+DI]
    19                     MOV [BX+SI],AL
    20         NEXTJ:INC DI
    21                     CMP DI,N
    22                     JBE FORJ
    23         NEXTI:INC SI
    24                     CMP SI,N-1
    25                     JBE FORI
    26                     ;
    27                    MOV AH,4CH
    28                    INT 21H
    29         CSEG ENDS
    30                     END START
    View Code

    二重法排序,其中SI相当于控制外层循环变量I,DI相当于内层循环变量J,为了使I从1开始递增,排序数组开始地址先减一,之后再存入BX寄存器

    例题2:给字符数据排序

    ;设字符串1在数据段1中,字符串2在数据段2中,写一个程序
    ;判别字符串2是否是字符串1的子字符串,如果是子字符串,则把字符串2中的flag单元置为0
    ;否则将其置为0,设字符串以0结尾

     1 ;设字符串1在数据段1中,字符串2在数据段2中,写一个程序
     2 ;判别字符串2是否是字符串1的子字符串,如果是子字符串,则把字符串2中的flag单元置为0
     3 ;否则将其置为0,设字符串以0结尾
     4 
     5 ;
     6 DSEG1         SEGMENT
     7 STRM         DB  "THIS IS A STRING!",0;假设在数据段1中的字符串
     8 DSEG1    ENDS
     9 ;
    10 DSEG2        SEGMENT
    11 STRS         DB  "STRING",0;假设在数据段2中的字符串
    12 FLAG         DB ?
    13 DSEG2    ENDS
    14 ;
    15 CODE        SEGMENT
    16                     ASSUME CS:CODE,DS:DSEG1,ES:DSEG2
    17             START: MOV AX,DSEG1
    18                             MOV DS,AX      ;数据段1中的段值DS
    19                             MOV AX,DSEG2
    20                             MOV ES,AX      ;数据段2中的段值ES
    21                             ;
    22                             MOV DI ,OFFSET STRS;检测字符串2的长度
    23                             MOV BX,DI   ;保存字符串2的首地址
    24                             XOR CX,CX  ;清空计数器
    25                             DEC DI
    26         WHILE1: INC DI        ;调整指针
    27                             INC CX       ;计数器加1
    28                             CMP BYTE PTR ES:[DI],0;字符串2时候结束
    29                             JNZ WHILE1  ;没结束继续跳转到while1
    30                             DEC CX    ;得到字符串2的长度
    31                             MOV DX,CX ;保存
    32                             ;
    33                             MOV SI,OFFSET STRM  ;去字符串1的首地址
    34                             MOV BP,SI
    35         FORI:MOV CX,DX;设置要比较的字符串个数
    36                     MOV DI,BX;设置首地址
    37         FORJ:MOV AL,ES:[DI];
    38                     CMP [SI],AL;比较一字节
    39                     JNZ NEXT1;不等,从字符串1的下一个字符开始
    40         NEXTJ:INC DI
    41                     INC SI
    42                     LOOP FORJ;继续下一个字符的比较
    43                     MOV FLAG,1;设置子字符串标志
    44                     JMP OVER
    45         NEXT1:CMP BYTE PTR [SI],0;判断字符串1是否结束
    46                           JZ NOTF;结束的话进行跳转
    47                           INC BP
    48                           MOV SI,BP
    49                           JMP FORI
    50         NOTF:MOV FLAG,0
    51         OVER:MOV AH,4CH
    52                     INT 21H
    53                     CODE ENDS
    54                     END START
    View Code
  • 相关阅读:
    编程命名规范
    python 字符串编解码介绍
    django之sqlite3常见错误
    asp.net请求过程文章推荐
    python 多线程的文章
    工作中处理文本的python代码片段
    memcached一些知识
    咱计算机专业的人,能不能不那么特别地彰显对语文的无知?——再谈面向对象...
    你真的了解分层架构吗?——写给被PetShop"毒害"的朋友们...
    混蛋的面试题——《大话设计模式》读后感
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3705097.html
Copyright © 2020-2023  润新知