汇编语言排序算法

最近整理电脑资料,发现了12年上学时候写的排序算法,那时候脑洞挺大,晒一晒,是三级PC技术中汇编语言的题目,

请编制程序,其功能是:内存中连续存放着20个无符号字节数序列,请将它们排成升序(从小到大)。
    例如:
         内存中有:01H,04H,02H…(假设后17个字节均大于04H)
         结果为:01H,02H,04H…(后跟17个字节,按从小到大的顺序排列)
    部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。
    请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
    对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

		EXTRN	LOAD:FAR,SAVE:FAR
N		EQU		20

STAC	SEGMENT	STACK
		db		12  DUP(?)
STAC	ENDS

DATA	SEGMENT
SOURCE	DB		N  DUP(?)
RESULT	DB		N  DUP(0)
NAME0	DB		'INPUT.DAT',0
NAME1	DB		'OUTPUT.DAT',0
temp    db                1000 dup(0)                ;尽可能大些
DATA	ENDS

CODE	SEGMENT
		ASSUME	CS:CODE, DS:DATA, SS:STAC
START 	PROC	FAR
		PUSH	DS
		XOR		AX,AX
			PUSH	AX
			MOV		AX,DATA
			MOV		DS,AX

			LEA		DX,SOURCE			; 数据区起始地址
			LEA		SI,NAME0			; 原始数据文件名
			MOV		CX,N				; 字节数
			CALL	LOAD				; 从‘INPUT.DAT’中读取数据
;	**** BEGIN ****
	
	LEA		SI,SOURCE
	LEA		DI,temp                       ;临时目录
	MOV		CX,N
	
NEXT0:	MOV		AL,[SI]
	MOV		[DI],AL
	INC		SI
	mov      [di+al],al                           ;算法的核心
	LOOP	 next0
	                     
	MOV		CX,N
			
	LEA		SI,temp
        lea             di,result
	

next1   mov al,[si]
        inc  si
        cmp al,0
        jz    next1

 	mov al,[di]
	inc di
 	loop next1
;	**** END ****
			LEA		DX,RESULT			; 结果数据区首址
			LEA		SI,NAME1			; 结果文件名
			MOV		CX,N				; 结果字节数
			CALL	SAVE				; 保存结果到文件
			RET
START	ENDP
CODE	ENDS
		END		START

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值