实验一 基本要求:求出7个一位十进制数的最大值、最小值和平均值。这7个数要从键盘得到,并在屏幕上
发布网友
发布时间:2022-05-20 14:00
我来回答
共2个回答
热心网友
时间:2023-10-27 08:58
; 本程序通过编译,运行正确
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 p(?)
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
热心网友
时间:2023-10-27 08:58
用啥语言写?C?汇编?还是设计单片机?带GUI的还是CLI也行?