.model small .stack 100h .data score db 10 dup(0) pass_cnt dw 0 fail_cnt dw 0 prompt db '请输入10个学生成绩(用空格隔开):$' result db 0dh, 0ah, '10个学生成绩分别为:$' pass_str db '及格人数', 9, 'x个$' fail_str db '不及格人数', 9, 'y个$' .code main proc mov ax, @data mov ds, ax ; prompt for scores mov ah, 09h lea dx, prompt int 21h ; read in scores mov bl, 10 lea si, score read_score: mov ah, 01h ; read in a character int 21h cmp al, 20h ; check if it's a space je space_encountered sub al, 30h ; convert to number mov [si], al ; store the score inc si dec bl jnz read_score jmp scores_read ; space encountered between scores space_encountered: sub al, 30h ; convert to number mov [si], al ; store the score inc si dec bl jnz read_score scores_read: ; output scores lea dx, result mov ah, 09h int 21h lea si, score mov bl, 10 output_score: mov al, [si] add al, 30h mov ah, 02h int 21h mov al, ' ' mov ah, 02h int 21h inc si dec bl jnz output_score ; count passes and fails lea si, score mov bl, 10 count_scores: mov al, [si] cmp al, 60h ; check if it's a pass jge is_pass inc fail_cnt jmp next_score is_pass: inc pass_cnt next_score: inc si dec bl jnz count_scores ; output pass count lea dx, pass_str mov ah, 09h int 21h mov ax, pass_cnt add ax, 30h mov dl, al mov ah, 02h int 21h ; output fail count lea dx, fail_str mov ah, 09h int 21h mov ax, fail_cnt add ax, 30h mov dl, al mov ah, 02h int 21h mov ah, 4ch int 21h main endp end main
时间: 2024-03-15 10:42:53 浏览: 127
这是一个简单的汇编语言程序,可以实现您描述的功能。请注意,这段代码是用8086汇编语言编写的,因此您需要使用兼容的汇编语言编译器,如TASM或MASM。
程序首先定义了一些数据段(.data)中需要用到的变量,包括学生成绩、及格人数和不及格人数等。然后,程序进入代码段(.code),首先将数据段中的变量加载到内存中,然后提示用户输入10个学生成绩。接下来,程序读取用户输入的成绩,将其保存在内存中,并使用循环语句遍历这10个成绩,分别计算及格人数和不及格人数。最后,程序输出计算结果,包括10个学生成绩分别为…、及格人数x个和不及格人数y个。
请注意,这段代码可能并不完美,可能还有一些需要改进的地方,具体取决于您的应用场景和需求。同时,这段代码也没有进行错误处理,例如如果用户输入的不是数字,程序可能会崩溃。因此,在实际应用中,您需要根据实际情况进行修改和优化。
阅读全文