汇编学习1

题目要求:

假设15名学生某门课成绩如下:

90,67,88,77,55,89,68,98,95,72,57,67,92,88,78 

请编程实现,统计该成绩中小于60分的人数,60~90分的人数,大于90分的人数,分别存储于变量X1,X2,X3中。

     

题目分析:

循环15次,每次循环取出一个学生的成绩,然后根据此成绩,按照相应的条件去操作即可。

代码实现:

data segment
	array db 90,67,88,77,55,89,68,98,95,72,57,67,92,88,78     ;数据准备
	X1 db ?		;X1变量用于保存分数在60以下的人			
	X2 db ?		;X2变量用于保存分数60~90之间的人
	X3 db ?		;X3变量用于保存分数在90以上的人
data ends

code segment
assume cs:code,ds:data
start:
	 mov ax,data
	 mov ds,ax
	 mov cx,15
	 mov si,offset array
  C1:
     mov al,[si]
	 cmp  al,60
	 jb INCX1
	 cmp al,90
	 ja INCX3
	 jmp INCX2
INCX1:
     mov ah,X1
	 add ah,1
	 mov X1,ah
	 jmp ENDLOOP
INCX2:
     mov ah,X2
	 add ah,1
	 mov X2,ah
	 jmp ENDLOOP
INCX3:
     mov ah,X3
	 add ah,1
	 mov X3,ah
	 jmp ENDLOOP
ENDLOOP:
	 inc si
	 loop C1
	 mov ax,4c00h
	 int 21h
code ends
	end start

代码不足:

此程序在分数类别的判断上首先判断是否低于60,如果是就跳转至INCX1操作,否则继续判断是否高于90,如果是跳转至INCX3,否则就默认当成分数是60~90之间的分数。那么此时就有一个问题,如果准备的数据本身就不符合要求呢?例如超过100,或低于0等,可见还未对其分数有效性进行判断。可见代码健壮性有待提高。不过从题意上来讲,这样写其实也是基本实现了功能了的。


你可能感兴趣的:(编程,c,汇编,存储)