汇编报错,求改bug

DATA SEGMENT                         ;定义数据段
ARY    DW          46,68,88,87,76,89,99,65,100,80  ;赋初值
S5      DW           0
S6      DW           0
S7      DW           0
S8      DW           0
S9      DW           0
S10    DW           0
LEN    EQU        10                     ;共有LEN个数据
DATA ENDS                         
CODE SEGMENT                  
          ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
           MOV DS,AX 
           LEA SI,ARY
           MOV CX,LEN
LOP:    MOV AX,ARY[SI]
           CMP  AX,60
           JBE P6
P5:      INC  S5;小于60
           JMP NEXT
P6:      CMP  AX,70;60-70
           JBE P7
           INC  S6
           JMP NEXT
P7:      CMP  AX,80 ;70-80
           JBE P8
           INC  S7
           JMP NEXT
P8:      CMP  AX,90 ;80-90
           JBE P9
           INC  S8
           JMP NEXT
P9:      CMP  AX,90;90-99
           JBE P10
           INC  S9
           JMP NEXT
P10:    CMP  AX,100;100
           JNE  NEXT
           INC  S10
NEXT: ADC SI
          LOOP LOP
EXT:    MOV AH,4CH
           INT 21H
CODE ENDS
          END START

这个程序我看过了,无非就是一个比较分数的程序,比对的是数组中的分数,根据不同的分支使用不同的流程处理,代码我格式化后编译了,没啥问题,给你代码。

DATA SEGMENT
    ARY    DW 46,68,88,87,76,89,99,65,100,80 ; 赋初值
    S5     DW 0
    S6     DW 0
    S7     DW 0
    S8     DW 0
    S9     DW 0
    S10    DW 0
    LEN    EQU 10 ; 共有LEN个数据
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE, DS:DATA
START:
    MOV AX, DATA
    MOV DS, AX
    LEA SI, ARY
    MOV CX, LEN

LOP:
    MOV AX, [SI]
    CMP AX, 60
    JBE P6
P5:
    INC S5 ; 小于60
    JMP NEXT
P6:
    CMP AX, 70 ; 60-70
    JBE P7
    INC S6
    JMP NEXT
P7:
    CMP AX, 80 ; 70-80
    JBE P8
    INC S7
    JMP NEXT
P8:
    CMP AX, 90 ; 80-90
    JBE P9
    INC S8
    JMP NEXT
P9:
    CMP AX, 99 ; 90-99
    JBE P10
    INC S9
    JMP NEXT
P10:
    CMP AX, 100 ; 100
    JNE NEXT
    INC S10

NEXT:
    ADD SI, 2
    LOOP LOP

EXT:
    MOV AH, 4CH
    INT 21H

CODE ENDS
END START

作为一名二进制安全专业人员,十余年的老司机,看到汇编就已经迫不及待地翻译一遍了,给你翻译后的代码。

#include <stdio.h>

#define LEN 10

int main() {
    int ARY[] = {46, 68, 88, 87, 76, 89, 99, 65, 100, 80};
    int S5 = 0, S6 = 0, S7 = 0, S8 = 0, S9 = 0, S10 = 0;
    int i;

    for (i = 0; i < LEN; i++) {
        int value = ARY[i];
        
        if (value < 60) {
            S5++;
        } else if (value < 70) {
            S6++;
        } else if (value < 80) {
            S7++;
        } else if (value < 90) {
            S8++;
        } else if (value < 100) {
            S9++;
        } else if (value == 100) {
            S10++;
        }
    }

    printf("S5 = %d\n", S5);
    printf("S6 = %d\n", S6);
    printf("S7 = %d\n", S7);
    printf("S8 = %d\n", S8);
    printf("S9 = %d\n", S9);
    printf("S10 = %d\n", S10);

    return 0;
}

有啥不懂的,可以多看看我的博客,专业做逆向的哈。