汇编高手请进
求一个汇编程序,要求实现N个带符号的数按从小到大排序(1位符号,7位数值)
谢谢~
按题目要求,此属对N个带符号字节数的升序排序
; 冒泡法排序
Code Segment
Assume CS:Code,DS:Code
Yes EQU 1
No EQU 0
On EQU 1
Off EQU 0
; -----------------------------------------
; 定义结构类型
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 Will_Sort
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 ;外循环次数
Scanning: PUSH CX ;入栈保存外循环次数
LEA SI,Will_Sort ;数组首地址装入源变址寄存器
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
Will_Sort DB -112,56,72,98,32 ;需要排序的数据
Elements EQU ($-Will_Sort)/Type Will_Sort-1 ; 外循环次数
Parameters Bubb_Para <Yes,Yes>
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
call Bubbling ;对Will_Sort中的元素按有符号数、降序排序
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
这个首瞎侍先判断是高位是正数还是复数,其次运罩再分别排序,我看看,假如磨悄吵没有人写我过几天就来写上,不过应该会有人帮你写的吧。
用冒泡法…