汇编题目 急!!!!!!!!!!在线等

求40个学生成绩的平均值,并求出其中的最大值和最小值过程要具体,这是期末作业,谢谢了在线等答案,回答出来再送分请问"鲲鹏展翅LHY-高级经理七级"movbl,10为什么是... 求40个学生成绩的平均值,并求出其中的最大值和最小值
过程要具体,这是期末作业,谢谢了
在线等答案,回答出来再送分
请问" 鲲鹏展翅LHY - 高级经理 七级 "
mov bl,10 为什么 是 10 而不是 40 呢
快点好吗?谢谢了,急 急 急!!!!
展开
 我来答
李成勇律师
2008-01-09 · 律师
李成勇律师
采纳数:406 获赞数:1270

向TA提问 私信TA
展开全部
DATA SEGMENT
TABLE1 DW 28h dup(?) ;成绩表
VARX DW ?
VARY DW ?
VARZ DW ?
OUTPUT1 DB 'the totle is:',0AH,0DH,'$'
OUTPUT2 DB 'the min data is:',0AH,0DH,'$'
OUTPUT3 DB 'the max data is:',0AH,0DH,'$'
BUFFER DB 05H DUP(?)
DATA ENDS
STACK1 SEGMENT STACK
DW 20H DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK1,CS:CODE
START: XOR AX,AX
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET OUTPUT1
MOV AH,09H
INT 21H
MOV AX,0
MOV DX,0
MOV SI,0
MOV CX,40D
MOV DX,TABLE1[SI]
LP1: INC SI
MOV AX,TABLE1[SI]
ADD AX,DX
MOV DX,AX
CMP CX,SI
JGE LP1 ;循环加成绩
MOV AX,DX
MOV BX,0AH
MOV SI,04
MOV BUFFER[SI],'$'
LP2: XOR DX,DX ;处理总成绩数据为十进制数
DIV BX
ADD DL,30H
DEC SI
MOV BUFFER[SI],DL
CMP AX,0AH
JGE LP2
ADD AL,30H
DEC SI
MOV BUFFER[SI],AL
MOV AX,OFFSET BUFFER
ADD AX,SI
MOV DX,AX ;送显示数据入口地址
MOV AH,09H ;显示总成绩
INT 21H
MOV AX,0
MOV DX,0
MOV SI,1
MOV AX,TABLE1
MOV DX,TABLE1[SI]
CMP AX,DX
JG LP4
LP3: MOV BUFFER,AL ;存小的数据
LP4: MOV BUFFER+1,DL ;存大的数据
LP5: INC SI
MOV DX,TABLE1[SI] ;取下一个数据
MOV AL,BUFFER ;和小的数比较
CMP AL,DL
JL LP3
MOV BUFFER,DL ;存储较小的数
MOV AL,BUFFER+1 ;和大的数比较
CMP AL,DL
JG LP4
MOV BUFFER+1,DL ;存储较大的数
CMP CX,SI
JG LP5 ;循环取数比较
MOV DX,OFFSET OUTPUT2 ;显示字符串
MOV AH,09H
INT 21H
MOV DX,OFFSET BUFFER ;显示最小的数据
MOV AH,09H
INT 21H
MOV DX,OFFSET OUTPUT3 ;显示字符串
MOV AH,09H
INT 21H
MOV DX,OFFSET BUFFER
INC DX ;显示最大的数据
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
程序编得有点长,带有输出显示!很好理解。时间不够,暂时想到的就是这么麻烦的了!可以参考一下,试着自己改进一下,缩小代码长度。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
为见剑暴恨1O
2008-01-10 · TA获得超过168个赞
知道答主
回答量:133
采纳率:0%
帮助的人:0
展开全部
我觉得你还是最好自己编,毕竟是学了一学期的东西了,怎么也得弄出点成绩出来啊。。。汇编的难点无外乎最开始的时候不太会用那些寄存器,还有内存。。这道题的难点就是在于你要知道你需要哪些数据,比如平均值,那么平均值应该怎么来得到呢,当然如果是纯数学的题,我想不用我说你也知道是总数除以个数,在汇编语言里,除了立即数(也就是我们数学里面的常数)可以 不用一个容器来装(我说的容器就是寄存器,还有内存),直接用它本身表示之外,其它的数,都得用寄存器或者内存来操作。。,在汇编里面你要执行一个操作,用它的内部寄存器(ax,bx,cx。。。)是执行速度最快的。。所以你要得到你要的结果,就必须把你需要的数据存放在寄存器,或者内存里面。。如何使用内存,就是我们常用的定义一个变量,比如,我要定义一个变量max,那我就可以这样写max dw ?或者max dw 0,这两种的不同前者是不赋初值,后者则给初值0。计算总数就是把所有的数加起来,我想加法的操作不用我讲应该怎么实现吧。。。add指令就可以了。。汇编里面提供了loop这个指令可以实现循环,减少我们重复写相同的指令。。ax,bx这些寄存器就是c语言里面的变量,他们里可以存放任何满足他们大小的值,ax是16位的寄存器,所以就最大只能放ffffh这么大的值。。如果再大就会溢出。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲲鹏展翅LHY
2008-01-09 · TA获得超过2638个赞
知道小有建树答主
回答量:642
采纳率:0%
帮助的人:1049万
展开全部
求40个学生成绩的平均值,并求出其中的最大值和最小值
data segment
score db 40 dup (?)
sum db 0
ave db ?
max db 0
min db 100
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov cx,40
lea si,score
next:
mov al,[si]
add sum,al
cmp al,max
jna next1
mov max,al
next1:
cmp al,min
jnb next2
mov min,al
next2:
inc si
loop next
mov al,sum
mov ah,0
mov bl,10
div bl
mov ave,al
mov ah,4ch
int 21h
code ends
end start
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晓页106
2008-01-09
知道答主
回答量:25
采纳率:0%
帮助的人:0
展开全部
data segment
score db 40 dup (?)
sum dw 0
ave db 0
max db 0
min db 0
data ends

code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov cx,40
lea si,score
next:
mov al,[si]
add sum,al
cmp al,max
jna next1
mov max,al
next1:
cmp al,min
jnb next2
mov min,al
next2:
inc si
loop next
mov al,sum
mov ah,0
mov bl,10
div bl
mov ave,al
mov ah,4ch
int 21h
code ends
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式