汇编高手看一下

来源:百度知道 编辑:UC知道 时间:2024/05/10 02:51:10
DATAS SEGMENT
BUFFER1 DW 5
DW 300,250,280,240,260
MAXNUM DW ?
MINNUM DW ?
;此处输入数据段代码
DATAS ENDS

STACKS SEGMENT;堆栈段设置
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATAS
MOV DS,AX
LEA BX,BUFFER1
MOV CX,5;设置循环次数
DEC CX
MOV AX,[BX]

MAX: INC BX;找出最大值
INC BX;指向数据区下一个数据
CMP AX,[BX];两数比较
JA NEXT
MOV AX,[BX];AX存放最大值
MOV MAXNUM,AX
NEXT: DEC CX
JNZ MAX

LEA BX,BUFFER1
MOV CX,5;找出最小值
DEC CX
MOV AX,0
MOV AX,[BX]

MIN: INC BX
INC BX
CMP AX,[BX]
JLE NEXT2
MOV AX,[BX];AX存放最小值
MOV MINN

去掉最大,最小值,然后求和
这部分用以下程序:
lea bx,buffer1
mov ax,[bx]
xor dx,dx;加法可能有溢出
mov cx,4
inc bx
loop1:add ax,[bx]
adc dx,0;加法可能有溢出
dec cx
jnz ;将5个dw数累加到在dx:da中
;以下两行不完整,未考虑减法溢出,因为好久不写8086了。
sum ax,minnum ;减去最小数
sum ax,maxmun;减去最大数

mov cx,3;求平均值
div cx

3楼的回复在3个数相加没有溢出时候是对的,在有溢出的时候将会得到错误的结果。

错误信息你丫说一下啊,好意思拿出来问!

好长啊,闷!干吗不用C呢?


MOV AX,DX
MOV CX,3
DIV CX
OUTPUT: MOV DX,0
中间插一句试试

MOV AX,DX
MOV CX,3
XOR DX,DX
DIV CX
OUTPUT: MOV DX,0

有问题