汇编语言问题

2024-11-26 20:42:20
推荐回答(3个)
回答1:

流程图自己画吧,没时间了.
;极值的寻找与处理
;在一串给定个数的数中寻找最大值及最小值,并放在指定的存储单元。
;将最大值最小值的和的2倍显示在屏幕上。
;(12334+20)*2=24708
STACKS SEGMENT ;堆栈段
DW 128 DUP(?) ;注意这里只有128个字节
STACKS ENDS
;
DATAS SEGMENT ;数据段,
mes1 db 13,10,'SUM = $'
num dw 42,20,100,456,99,120,89,12334,90,1239
cnt equ $-num
max dw 0
min dw 0
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
mov si,offset num
mov bx,[si]
add si,2
mov bp,bx
mov cx,10
dec cx
next:
lodsw
cmp ax,bx ;BX暂存最大值
jbe bj1
mov bx,ax
bj1: cmp ax,bp ;BP暂存最小值
ja bj2
mov bp,ax
bj2: loop next
mov max,bx
mov min,bp
add bp,bx ;大小值累加
mov dx,offset mes1
mov ah,9
int 21
mov ax,bp ;取累加和
shl ax,1 ;和 X 2
call show ;显示最大值最小值的和的2倍
mov ah,7 ;暂停
int 21h
MOV AX,4C00H ;退出程序
INT 21H

show:
xor cx,cx
mov bx,10
nx1:
xor dx,dx
div bx
or dx,0e30h
inc cx
push dx
cmp ax,0
jnz nx1
nx2: pop ax
int 10h
loop nx2
ret
CODES ENDS
END START

回答2:

给我穿衣戴帽工程的正确资料,5只找到烂资料

回答3:

给你算法吧,图自己画一下(假设有十个数)
int f(a[10])
{ int max==0,min==0,n;
for(int i==0;i<10;i++)
{ if(a[i]>max)max=a[i];
if(a[i] }
n=2*(max+min);
cout<}