内存自BUF单元开始的缓冲区连续存放着100个学生的英文分数,编程序统计其中90~100,60~89,60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中,(要求画出程序流程图,各段定义完整)汇编,及其汇编代码详细过程
时间: 2023-12-11 13:05:48 浏览: 32
下面是统计学生英文分数的汇编代码过程:
```
DATA SEGMENT
BUF DB 100 DUP(?) ; 缓冲区,存放100个学生的英文分数
RES DB 3 DUP(0) ; 存放统计结果的缓冲区
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA ; 将数据段地址存入AX中
MOV DS, AX ; 将数据段地址存入DS中
MOV CX, 100 ; 初始化循环次数为100
MOV BX, OFFSET BUF ; 将BUF的地址存入BX中
MOV AL, 0 ; 初始化90-100分数段人数为0
MOV AH, 0
MOV BL, 0 ; 初始化60-89分数段人数为0
MOV BH, 0
MOV CL, 0 ; 初始化60分数段人数为0
MOV CH, 0
COUNT_LOOP:
CMP BYTE PTR [BX], 90 ; 比较当前分数是否在90-100分数段
JA COUNT_60_89 ; 如果大于100分数段,则跳转到60-89分数段
CMP BYTE PTR [BX], 60 ; 比较当前分数是否在60-89分数段
JB COUNT_60 ; 如果小于60分数段,则跳转到60分数段
INC AL ; 90-100分数段人数加1
JMP CONTINUE_COUNT_LOOP
COUNT_60_89:
CMP BYTE PTR [BX], 60 ; 比较当前分数是否在60-89分数段
JB COUNT_60 ; 如果小于60分数段,则跳转到60分数段
INC BL ; 60-89分数段人数加1
JMP CONTINUE_COUNT_LOOP
COUNT_60:
INC CL ; 60分数段人数加1
CONTINUE_COUNT_LOOP:
INC BX ; 数据指针偏移1
LOOP COUNT_LOOP ; 循环计数
MOV DI, OFFSET RES ; 将结果存放地址存入DI中
MOV [DI], AL ; 将90-100分数段人数存入结果缓冲区
INC DI
MOV [DI], BL ; 将60-89分数段人数存入结果缓冲区
INC DI
MOV [DI], CL ; 将60分数段人数存入结果缓冲区
MOV AX, 4C00H ; 程序结束
INT 21H
CODE ENDS
END START
```
解释:
1. 在数据段中定义BUF缓冲区,存放100个学生的英文分数,以及RES缓冲区,存放统计结果;
2. 在主程序中,将数据段地址存入DS中,初始化循环次数为100,将BUF的地址存入BX中;
3. 初始化90-100分数段人数为0,60-89分数段人数为0,60分数段人数为0;
4. 使用CMP指令比较当前分数是否在90-100分数段,如果是则将90-100分数段人数加1,否则跳转到60-89分数段判断;
5. 在60-89分数段判断中,使用CMP指令比较当前分数是否在60-89分数段,如果是则将60-89分数段人数加1,否则跳转到60分数段判断;
6. 在60分数段判断中,将60分数段人数加1;
7. 数据指针偏移1,循环计数;
8. 将统计结果存入RES缓冲区中;
9. 在主程序中,将结果存放地址存入DI中,程序结束。
注意:
1. 在判断分数段时,需要使用CMP指令比较当前分数是否在对应的分数段内;
2. 在循环计数时,需要使用LOOP指令循环计数。