sortname.asm

来自「SortName 一个汇编小程序」· 汇编 代码 · 共 145 行

ASM
145
字号
;NAME_SORT-EXE6_11#
;***************************************************************
	.model small
	.stack 40h
;***************************************************************
	.data					;define data segment
namepar		label	byte			;name parameter list:
maxnlen		db	21			;max. length
namelen		db	?			;no. chars entered
namefld		db	21 dup(?)		;name
crlf		db	13,10,'$'
endaddr		dw	?
messg1		db	'Name?','$'
messg2		db	'Sort Name:',13,10,'$'
namectr		db	0
nametab		db	30 dup(20 dup(' '))	;name table
namesav		db	20 dup(?),13,10,'$'
swapped		db	0
;***************************************************************
	.code					;define code segment
;---------------------------------------------------------------
begin		proc	far			;main part of programe
;set DS and ES register to current data segment
	mov	ax,@data			;data segment addr
	mov	ds,ax				;  into DS register
	mov	es,ax				;	and ES register
;MAIN PART OF PROGRAM GOES HERE
	cld
	lea	di,nametab
a20loop:
	call	b10read
	cmp	namelen,0
	jz	a30
	cmp	namectr,30
	je	a30
	call	d10stor
	jmp	a20loop
a30:
	cmp	namectr,1
	jbe	a40
	call	g10sort
	call	k10disp
a40:
	mov	ax,4c00h
	int	21h

begin		endp
;--------------------------------------------------------------------
;	Accept name as input:

b10read	proc	near
	mov	ah,09
	lea	dx,messg1
	int	21h
	mov	ah,0ah
	lea	dx,namepar
	int	21h
	mov	ah,9
	lea	dx,crlf
	int	21h
;
	mov	bh,0
	mov	bl,namelen
	mov	cx,21
	sub	cx,bx
b20:	mov	namefld[bx],20h
	inc	bx
	loop	b20
	ret

b10read		endp
;--------------------------------------------------------------------
;	Store name in table:
d10stor	proc near
	inc	namectr
	cld
	lea	si,namefld
	mov	cx,10
	rep	movsw
	ret
d10stor		endp
;--------------------------------------------------------------------
;	Sort name in table
g10sort proc near
	sub	di,40
	mov	endaddr,di
g20:	mov	swapped,0
	lea	si,nametab
g30:	mov	cx,20
	mov	di,si
	add	di,20
	mov	ax,di
	mov	bx,si
	repe	cmpsb
	jbe	g40
	call	h10xchg
g40:	mov	si,ax
	cmp	si,endaddr
	jbe	g30
	cmp	swapped,0
	jnz	g20
	ret

g10sort		endp
;---------------------------------------------------------------------
;	Excheange table entries

h10xchg proc near
	mov	cx,10
	lea	di,namesav
	mov	si,dx
	rep	movsw
;
	mov	cx,10
	mov	di,bx
	rep	movsw
;
	mov	cx,10
	lea	si,namesav
	rep	movsw
	mov	swapped,1
	ret

h10xchg		endp
;-----------------------------------------------------------------------
;	Display sorted name:
k10disp proc near
	mov	ah,09
	lea	dx,messg2
	int	21h
	lea	si,nametab
k20:	lea	di,namesav
	mov	cx,10
	rep	movsw
	mov	ah,09
	lea	dx,namesav
	int	21h
	dec	namectr
	jnz	k20
	ret

k10disp		endp
;-----------------------------------------------------------------------
;***********************************************************************
	end	begin

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?