关于循环问题,,,,,,,,,,


 DATA SEGMENT               ;程序是关于把100个数按从大到小排序
  MEN DW 100 DUP(?)        ;假设有100个数
 DATA ENDS

   CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:MOV AX,DATA
          MOV DS,AX
          LEA DI,MEN           ;段初始化
          MOV BL,99            ;外循环次数

    NEXT:MOV SI,DI             ;取第一个数
         MOV CL,BL             ;内循环

    NEXT2:MOV AX,[SI] 
          ADD SI,2             ;将第一个数与后99个数比较找出最大的数
          CMP AX,[SI]          ;送入第一个单元中
          JNC NEXT3            ;如果大于则跳转next3不交换
          MOV DX,[SI]          ;否则交换数
          MOV [SI-2],DX
          MOV [SI],AX
    NEXT3:DEC CL               ;内循环自减
          JNZ NEXT2

     ;请问这个位置不是因该 SUB DI,2吗

          DEC BL               ;外循环以此自减联动内循环
          JNZ NEXT

          MOV AH,4CH
          INT 21H
    CODE ENDS
    END START
 

DI的内容有自动修改的功能,可以自动减少2,不需要额外的SUB指令取改变DI。