内存自BUF单元开始的缓冲区连续存放着100个学生的英文分数,编程序统计其中90~100,60~89,60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中
时间: 2024-02-26 15:55:51 浏览: 89
好的,我了解了您的问题。针对您的问题,可以使用以下的程序实现要求:
```
ORG 0H
BUF: DB 98, 65, 72, 89, 92, 58, 76, 80, 95, 80
DB 88, 76, 85, 70, 90, 72, 79, 84, 93, 62
DB 67, 75, 81, 90, 68, 85, 76, 78, 92, 88
DB 85, 71, 80, 95, 90, 60, 72, 80, 76, 74
DB 88, 98, 85, 72, 90, 75, 81, 76, 83, 91
DB 85, 73, 78, 89, 92, 68, 85, 79, 83, 82
DB 77, 87, 93, 85, 72, 90, 85, 92, 80, 75
DB 82, 85, 70, 89, 80, 92, 75, 81, 76, 83
DB 91, 85, 73, 78, 89, 92, 68, 85, 79, 83
DB 82, 77, 87, 93, 85, 72, 90, 85, 92, 80
RESULT: DB ?, ?, ? ; 统计结果存放单元
START: MOV AX, BUF ; 将BUF的地址送AX
MOV ES, AX ; 将BUF的地址送段寄存器ES
MOV DI, 0 ; 初始化偏移地址DI
MOV CX, 100 ; CX计数器,总共100个元素
MOV BL, 0 ; BL计数器,统计90~100的人数
MOV BH, 0 ; BH计数器,统计60~89的人数
MOV CH, 0 ; CH计数器,统计60以下的人数
LOOP: LODSB ; 从BUF中读取一个字节
CMP AL, 90 ; 判断是否在90~100之间
JA HIGH ; 如果大于90,跳转到HIGH
CMP AL, 60 ; 判断是否在60~89之间
JB LOW ; 如果小于60,跳转到LOW
INC BH ; 如果在60~89之间,BH计数器加1
JMP CONTINUE ; 跳转到CONTINUE
HIGH: CMP AL, 100 ; 判断是否等于100
JBE CONTINUE ; 如果小于等于100,跳转到CONTINUE
INC BL ; 如果大于100,BL计数器加1
JMP CONTINUE ; 跳转到CONTINUE
LOW: INC CH ; 如果小于60,CH计数器加1
CONTINUE: LOOP LOOP ; 循环处理下一个元素
MOV AL, BL ; 将90~100的人数送AL
MOV [RESULT], AL ; 存储到RESULT的第一个字节
MOV AL, BH ; 将60~89的人数送AL
MOV [RESULT+1], AL ; 存储到RESULT的第二个字节
MOV AL, CH ; 将60以下的人数送AL
MOV [RESULT+2], AL ; 存储到RESULT的第三个字节
MOV AH, 4CH ; 返回DOS
INT 21H
END START
```
程序中,首先将100个学生的英文分数存放在BUF缓冲区中。然后,使用循环遍历BUF中的每个元素,统计90~100、60~89和60以下的人数,并将结果存储在RESULT缓冲区中。最后,将RESULT缓冲区中的结果输出。
需要注意的是,程序中使用了段地址寄存器ES和偏移地址寄存器DI来访问缓冲区中的元素。同时,程序中使用了MOVSB、LODSB和STOSB等指令来读取和存储数据。
阅读全文