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;
}
有啥不懂的,可以多看看我的博客,专业做逆向的哈。