设有9个学生的成绩分别为64、69、88、93、100、89、98、40、90。用emu8086编写程序统计0~59、60~79、80~89、90~99各分数段以及100分的人数,并分别存放到P5、P6、P8、P9、P10单元中。
时间: 2023-10-24 14:08:20 浏览: 126
以下是用emu8086编写的程序:
```
DATA SEGMENT
GRADE DB 64,69,88,93,100,89,98,40,90
COUNT DB 0,0,0,0,0
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV CX, 9
MOV BX, 0
LOOP1:
MOV AL, [GRADE + BX]
CMP AL, 100
JE HUNDRED
MOV DX, 10
DIV DX
CMP AL, 5
JB ZERO_TO_FIFTY
CMP AL, 7
JB SIXTY_TO_SEVENTY_NINE
CMP AL, 9
JB EIGHTY_TO_NINETY_NINE
JMP NINETY_TO_HUNDRED
ZERO_TO_FIFTY:
INC COUNT
JMP INCREMENT_COUNT
SIXTY_TO_SEVENTY_NINE:
INC COUNT + 1
JMP INCREMENT_COUNT
EIGHTY_TO_NINETY_NINE:
INC COUNT + 3
JMP INCREMENT_COUNT
NINETY_TO_HUNDRED:
INC COUNT + 4
JMP INCREMENT_COUNT
HUNDRED:
INC COUNT + 4
INCREMENT_COUNT:
ADD BX, 1
LOOP LOOP1
MOV AL, COUNT
MOV [P5], AL
MOV AL, COUNT + 1
MOV [P6], AL
MOV AL, COUNT + 3
MOV [P8], AL
MOV AL, COUNT + 4
MOV [P9], AL
MOV AL, COUNT + 4
MOV [P10], AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
```
程序使用了一个数据段和一个代码段。数据段中包含了9个学生的成绩以及用于存储各分数段人数的变量COUNT。代码段中,程序首先将数据段的地址加载到DS寄存器中,并将CX寄存器设置为9,BX寄存器设置为0作为数组GRADE的偏移量。
程序使用了一个循环,将每个学生的成绩拿出来进行分数段统计。对于每个成绩,程序首先判断是否为100分,如果是,则直接跳转到HUNDRED标签,否则使用DIV指令将成绩除以10得到十位数,然后根据十位数的大小进入不同的分数段,使用INC指令增加相应的分数段人数。最后使用ADD指令将偏移量BX增加1以取得下一个学生的成绩,然后使用LOOP指令回到LOOP1标签以处理下一个成绩。
在循环结束后,程序将各分数段人数分别存储到P5、P6、P8、P9、P10单元中,然后使用INT 21H中断退出程序。
需要注意的是,程序中使用了一些汇编语言的知识,例如MOV指令、CMP指令、JE指令、JMP指令、INC指令、ADD指令、LOOP指令、DIV指令等。如果不熟悉汇编语言,可能需要先学习一些基础知识才能理解程序。
阅读全文