1. 统计学生成绩,设有10个学生成绩,试编制程序分别统计低于60分,60~69分,70~79分,80~89分,90~99分及100分的人数,并显示。

swbjhb 2010-05-12 12:37:19
我编的,但我就是找不到错误,请帮我指出,而且我代码繁琐,帮我精简一下,谢谢

DATA SEGMENT
SD DB 100,98,91,85,82,77,60,62,55,45
C1 DB 0
C2 DB 0
C3 DB 0
C4 DB 0
C5 DB 0
C6 DB 0
MESS1 DB 'the students number of less than 60:$'
MESS2 DB 'the students number of 60~69:$'
MESS3 DB 'the students number of 70~79:$'
MESS4 DB 'the students number of 80~89:$'
MESS5 DB 'the students number of 90~99:$'
MESS6 DB 'the students number of 100:$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,10
MOV BX,0
LOP: MOV AX,WORD PTR SD[BX]
CMP AX,60
JB SHORT M1
CMP AX,69
JBE SHORT M2
CMP AX,79
JBE SHORT M3
CMP AX,89
JBE SHORT M4
CMP AX,99
JBE SHORT M5
CMP AX,100
JE SHORT M6
M1: MOV DL,C1
ADD DL,1
MOV C1,DL
ADD BX,1
DEC CX
CMP CX,0
JE QUIT
JMP LOP


M2: MOV DL,C2
ADD DL,1
MOV C2,DL
ADD BX,1
DEC CX
CMP CX,0
JE QUIT
JMP LOP
M3: MOV DL,C3
ADD DL,1
MOV C3,DL
ADD BX,1
DEC CX
CMP CX,0
JE QUIT
JMP LOP


M4: MOV DL,C4
ADD DL,1
MOV C4,DL
ADD BX,1
DEC CX
CMP CX,0
JE QUIT
JMP LOP


M5: MOV DL,C5
ADD DL,1
MOV C5,DL
ADD BX,1
DEC CX
CMP CX,0
JE QUIT
JMP LOP


M6: MOV DL,C6
ADD DL,1
MOV C6,DL
ADD BX,1
DEC CX
CMP CX,0
JE QUIT
JMP LOP





QUIT: LEA DX,MESS1
MOV AH,9
INT 21H
MOV DL,C1
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H

LEA DX,MESS2
MOV AH,9
INT 21H
MOV DL,C2
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
LEA DX,MESS3
MOV AH,9
INT 21H
MOV DL,C3
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H

LEA DX,MESS4
MOV AH,9
INT 21H
MOV DL,C4
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H

LEA DX,MESS5
MOV AH,9
INT 21H
MOV DL,C5
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H

LEA DX,MESS6
MOV AH,9
INT 21H
MOV DL,C6
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

...全文
3297 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wodelife 2011-11-23
  • 打赏
  • 举报
回复
你的程序我估计是为了交作业哦
zara 2010-05-12
  • 打赏
  • 举报
回复
...
LOP: MOV AX,WORD PTR SD[BX]
CMP AX,60
...
上面这样的,AX 都应该是 AL 吧,因为 SD 数据定义的是 DB 啊,而且后面 BX 也是增的 1。word ptr 也要去掉了。如果用 AX,取数据时是 word,显然就是错了,所以结果都不对。

代码精简方面,下面这样的,可以用一个指令的,比如 inc C4 就可以了。
M4: MOV DL,C4
ADD DL,1
MOV C4,DL
对多个地方使用到回车/换行组合输出,也可以用一个子程来实现。你这个代码里,也可以将 0dh 和 0ah 字符放到 MESS? 字符串定义中。
大熊猫侯佩 2010-05-12
  • 打赏
  • 举报
回复
虽说是asm,你也不能这样写代码:

1 面条式,没有分模块

2 从头写到尾,想哪里写哪里。应该画流程图

3 复杂代码要可行性分析,首先写key功能
dididu1515 2010-05-12
  • 打赏
  • 举报
回复
;................SORT.ASM.....................
DATA SEGMENT ;Masm 5.0编译运行正确
MESS0 DB '100,98,91,85,82,77,60,62,55,45',0AH,0DH,'$';定义用于显示的字符串
MESS1 DB 'SCORE [.<.60.]:','$' ;添加空格使各串等长为16字节
MESS2 DB 'SCORE [60--69]:','$'
MESS3 DB 'SCORE [70--79]:','$'
MESS4 DB 'SCORE [80--89]:','$'
MESS5 DB 'SCORE [90--99]:','$'
MESS6 DB 'SCORE [.=100.]:','$'
SD DB 100,98,91,85,82,77,60,62,55,45 ;存放10个十进制数
;-------------------------------------------------
C1 DB 00 ;统计区
C2 DB 00
C3 DB 00
C4 DB 00
C5 DB 00
C6 DB 00
DATA ENDS

code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
MOV DX, OFFSET MESS0 ;显示源串
mov ah,9
int 21h
cld
lea si,SD ;定位源数
lea di,C1 ;定位统计区首址
mov dl,10
mov cx,10
next:lodsb
mov ah,0
div dl;分数除以10取整数
cmp al,5
ja Q1
inc byte ptr [di]
jmp Q2
Q1:sub al,5
mov ah,0
mov bx,ax
inc byte ptr [bx+di]
Q2:loop next
lea bp,MESS1
lea di,C1
mov cx,6
Q3:mov dx,bp
mov ah,9
int 21h
call ascii
mov dl,0dh ;回车
int 21h
mov dl,0ah ;换行
int 21h
add bp,16 ;加上串长
inc di
loop Q3

mov ah,0 ;暂停
int 16h
mov ah,4ch;结束
int 21h

ascii: ;Hex 化为 Ascii
mov al,[di];
aam ;二化十
or ax,3030h ;化为ASCII码
xchg ah,al
mov dx,ax ;显示高位
cmp dl,'0'
jnz Q5
mov dl,20h ;清除前导0
Q5:mov ah,2
int 21h
mov dl,dh ;显示低位
int 21h
ret

code ends
end start

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧