求微机原理一段程序 输入7个数字 输出最大值 最小值 中值

求微机原理一段程序 从键盘输入7个数字,输出最大值,最小值,中值
用的是8086芯片
就是 MOV DX,0FFFH
这样的

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr
; 用法举例:Output PromptStr

Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:输出一个字符
; 入口:dl=要显示的字符
enter_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
enter_Chr endp
; -----------------------------------------
; 功能:从键盘输入N位数字
; 入口:N=数字位数;di=保存输入的数字首地址
Input_Digit Proc Near
push cx
push di
cld
mov cx,N
@@Input: mov ah,1
int 21h
cmp al,'0'
jb @@Input
cmp al,'9'
ja @@Input
stosb
loop @@Input
pop cx
pop di
ret
Input_Digit EndP
; -----------------------------------------
; 对数组元素无符号降序排序
Bubbling Proc Near
PUSH AX
PUSH CX
PUSH SI
PUSH DI
CLD
MOV CX,Elements ;外循环次数
@@Scanning: PUSH CX ;入栈保存外循环次数
LEA SI,Number ;数组首地址装入源变址寄存器
@@Compare: PUSH SI
POP DI ;当前数组元素地址赋给目的变址寄存器,以备交换之用
LODSB ;将当前数组元素读入AL
CMP AL,[SI] ;当前数组元素与相邻的下一个数组元素相比较
JAE @@NextOne ;若大于或等于,不作数据交换,处理下一个数组元素
XCHG AL,[SI] ;若小于,交换数组元素
STOSB ;保存数值较大者
@@NextOne: LOOP @@Compare ;处理下一个数组元素
POP CX ;外循环次数出栈
LOOP @@Scanning ;下一趟比较
POP DI
POP SI
POP CX
POP AX
RET
Bubbling EndP
; -----------------------------------------

N equ 7
PromptStr db 'Please Enter ',N or 30h,' digitals: $'
Max_Num db 13,10,13,10,'The maximum is $'
Mix_Num db 13,10,13,10,'The miximum is $'
Mid_Num db 13,10,13,10,'The midoule is $'

Number db N dup(?)
Elements EQU ($-Number)/Type Number-1 ; 外循环次数

Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段

Output PromptStr ;提示输入7个数字
lea di,Number ;数字存放地址
call Input_Digit ;从键盘接受指定位数的数字
call Bubbling ;无符号数降序排序
Output Max_Num ;最大值
mov dl,Number ;取最大值
call enter_Chr ;显示最大值
Output Mix_Num ;最小值
mov dl,Number[6] ;取最小值
call enter_Chr ;显示最小值
Output Mid_Num ;中值
mov dl,Number[3] ;取中值
call enter_Chr ;显示中值

Exit_Proc: mov ah,4ch ;结束程序
int 21h

Code ENDS
END Start ;编译到此结束
温馨提示:答案为网友推荐,仅供参考
相似回答