汇编语言,最大值、最小值、中值问题通过键盘输入7个不相等的数据(数据均介于0-255之间),将最小值、最大值和中值显示在屏幕上

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/02 19:54:55
汇编语言,最大值、最小值、中值问题通过键盘输入7个不相等的数据(数据均介于0-255之间),将最小值、最大值和中值显示在屏幕上

汇编语言,最大值、最小值、中值问题通过键盘输入7个不相等的数据(数据均介于0-255之间),将最小值、最大值和中值显示在屏幕上
汇编语言,最大值、最小值、中值问题
通过键盘输入7个不相等的数据(数据均介于0-255之间),将最小值、最大值和中值显示在屏幕上

汇编语言,最大值、最小值、中值问题通过键盘输入7个不相等的数据(数据均介于0-255之间),将最小值、最大值和中值显示在屏幕上
; 本程序通过编译,运行正确.
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 定义常量
Yes equ 1
No equ 0
On equ 1
Off equ 0
CR equ 0DH
LF equ 0AH
KBBack equ 8
; -----------------------------------------
; 定义结构类型
Bubb_Para Struc ; 冒泡排序法参数表
Carry DB No ; 是否带符号.Yes:有符号数;No:无符号数
Sort DB No ; 升序/降序.Yes:升序;No:降序
Yes_No DB 73h,76h,7dh,7eh
Load DB 0ach,0adh
Comp DB 3ah,3bh
Exchange DB 86h,87h
Store DB 0aah,0abh
Bubb_Para EndS
; -----------------------------------------
; 功能:按要求对数组元素排序,能够对字节元素、字元素进行无符号数、有符号数的升序、降序排序.
; 子程序原型:对字节元素进行无符号升序排序.
Bubbling Proc Near
PUSH AX
PUSH BX
PUSH CX
PUSH SI
PUSH DI
; ------------------根据排序参数,修改排序指令
LEA SI,Parameters
LEA DI,@@Compare
MOV AL,TYPE Number
DEC AL
PUSH AX
LEA BX,[SI.Load]
XLAT
MOV [DI][2],AL
POP AX
PUSH AX
LEA BX,[SI.Comp]
XLAT
MOV [DI][3],AL
POP AX
PUSH AX
LEA BX,[SI.Exchange]
XLAT
MOV [DI][7],AL
POP AX
LEA BX,[SI.Store]
XLAT
MOV [DI][9],AL
MOV AL,[SI.Carry]
SHL AL,1
OR AL,[SI.Sort]
XOR AH,AH
LEA BX,[SI.Yes_No]
XLAT
MOV [DI][5],AL
; ------------------按要求排序
MOV CX,Elements-1 ;外循环次数
@@Scanning: PUSH CX ;入栈保存外循环次数
LEA SI,Number ;数组首地址装入源变址寄存器
@@Compare: PUSH SI
POP DI ;当前数组元素地址赋给目的变址寄存器,以备交换之用
LODSB ;将当前数组元素读入累加器
CMP AL,[SI] ;当前数组元素与相邻的下一个数组元素相比较
JBE @@NextOne ;若小于或等于,不作数据交换,处理下一个数组元素
XCHG AL,[SI] ;若大于,交换数组元素
STOSB ;保存数值较小者
@@NextOne: LOOP @@Compare ;处理下一个数组元素
POP CX ;外循环次数出栈
LOOP @@Scanning ;下一趟比较
; ------------------
POP DI
POP SI
POP CX
POP BX
POP AX
RET
Bubbling EndP
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -----------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
SetCursor EndP
; -----------------------------------------
; 功能:输出回车换行
enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
enter_CTLF endp
; -----------------------------------------
; 功能:键盘输入一个N位的十进制数字,
; 数据输入说明:
; 1、输足N位的,不用回车,自然结束本数据输入;
; 2、不足N位的,需回车结束本数据输入
; 入口:N=数字位数;di=保存输入的数字首地址
; 出口:转换后的二进制数保存在di所指的单元
Input_Digit Proc Near
push dx
push cx
push bx
push di
lea di,@@Save_Tmp
push di
cld
mov cx,N
push cx
@@Input: call GetCursor ;取光标位置
mov ah,1 ;从键盘接受一个字符
int 21h
cmp al,CR ;若键入的是回车,已经键入的数字不足N位
jz @@ASC_Dec ;转去处理已经键入的数字
cmp al,KBBack
jz @@KB_Back ;若是回空键,重新输入
cmp al,'0'
jb @@KBBack ;若低于数字'0',重新输入
cmp al,'9'
ja @@KBBack ;若低于数字'9',重新输入
jmp @@Save_Dig
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: call SetCursor ;置光标位置
jmp @@Input
@@Save_Dig: and al,0fh ;转换成二进制数
stosb ;保存
loop @@Input ;接受下一个数字
@@ASC_Dec: mov ax,cx
pop cx
pop si
sub cx,ax ;实际输入的数字位数
xor dx,dx
xor ax,ax
jcxz @@Save_Ret ;若直接回车,没有输入任何数字,按输入'0'处理
dec cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数
mov bl,10
@@Mul_Ten: lodsb
cbw
add ax,dx
mul bl
mov dx,ax
loop @@Mul_Ten
lodsb
cbw
add ax,dx
@@Save_Ret: pop di
stosb
pop bx
pop cx
pop dx
ret
@@Save_Tmp db 16 dup(?)
Input_Digit EndP
; -----------------------------------------
; 功能:把AL中的二进制无符号数转换成显式的十进制ASCII码
; 入口:AL=二进制数;di=转换后的ASCII保存地址
; 出口:无
Dec_ASCII Proc Near
push si
push cx
push bx
push di
mov bl,10
xor cx,cx
lea di,@@Temp_Save[3]
cld
@@Divide: xor ah,ah
div bl
or ah,30h
mov [di],ah
dec di
inc cx
test al,0ffh
jnz @@Divide
push di
pop si
inc si
pop di
pop bx
push di
rep movsb
mov byte ptr [di],'$'
pop di
pop cx
pop si
ret
@@Temp_Save db 4 dup(?)
Dec_ASCII EndP
; -----------------------------------------
N equ 3 ;数字位数(介于0-255之间的无符号数)
Elements equ 7 ;数据个数
PromptStr db 'Please Enter ',N or 30h,' digits for ',Elements or 30h,' numbers: $'
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 Elements dup(?) ;从键盘接受的Elements个N位数字
Parameters Bubb_Para ;无符号数降序排序
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段

; 通过键盘输入7个不相等的数据(数据均介于0-255之间),将最小值、最大值和中值显示在屏幕上
Output PromptStr ;提示输入Elements个N位数字
lea di,Number ;数字存放地址
mov cx,Elements ;数据个数
Read_Number:call enter_CTLF ;输入一个回车、换行
call Input_Digit ;从键盘接受指定位数的数据
loop Read_Number
call Bubbling ;无符号数降序排序
Output Max_Num ;最大值
mov al,Number ;取最大值
lea di,Temp_STr ;显式的十进制ASCII码字符串暂存地址
call Dec_ASCII ; 把AL中的二进制无符号数转换成显式的十进制ASCII码
Output Temp_STr ;显示最大值
Output Mix_Num ;最小值
mov al,Number[Elements-1] ;取最小值
lea di,Temp_STr ;显式的十进制ASCII码字符串暂存地址
call Dec_ASCII ; 把AL中的二进制无符号数转换成显式的十进制ASCII码
Output Temp_STr ;显示最小值
Output Mid_Num ;中值
mov al,Number[(Elements-1)/2] ;取中值
lea di,Temp_STr ;显式的十进制ASCII码字符串暂存地址
call Dec_ASCII ; 把AL中的二进制无符号数转换成显式的十进制ASCII码
Output Temp_STr ;显示中值
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Temp_STr:
Code ENDS
END Start ;编译到此结束

汇编语言,最大值、最小值、中值问题通过键盘输入7个不相等的数据(数据均介于0-255之间),将最小值、最大值和中值显示在屏幕上 求一道8086汇编程序,通过键盘输入七个不相等的数据,各个数据均介于0~255之间,将最小值,最大值和中值显示在屏幕上. 汇编语言中用一个字节表示正整数,最大值与最小值为多少 Excel里通过条件格式标记最大值与最小值时出现两个最大值与最小值,如何设置使唯一的被相应标记?问题如图 求中值为何要用数据中的最大值与最小值相加再除 SPSS问题分组求平均值、标准差、方差、中值、最大值、最小值、三线表.是分组求的,就是已经命名好1,2,3了的,求各组的!急用, 不等式最大值最小值问题.若-2 数学最大值最小值的问题请看图 数学函数最大值与最小值ln问题 数学函数最大值与最小值ln问题 函数取导及最大值最小值问题 问题x+4/x最大值和最小值. 求微机原理一段程序 输入7个数字 输出最大值 最小值 中值求微机原理一段程序 从键盘输入7个数字,输出最大值,最小值,中值用的是8086芯片就是 MOV DX,0FFFH 这样的 中值定理问题 汇编语言实验 分支程序设计在本实验中我们可以将寄存,我们以求解一组无符号字节序列中的最大值和最小值的问题进行讲解分支程序的设计和实现.最终结果是序列中的最大数和最小数,器BX 双曲线焦点弦的最值问题,最大值和最小值,(^.^)! 高数 中值定理问题 对任意实数x,设f(x)是4x,x+2,-2x+4三式中值最小值,则f(x)的最大值是( )