您当前的位置:首页 > 计算机 > 编程开发 > 汇编

汇编找中位数

时间:07-29来源:作者:点击数:
汇编找中位数

给定字型有符号整数数组的长度n,键盘输入字型有符号整数,找出并输出第n/2小的数。

原理:先冒泡排序,后取中间。

include io.inc
	.model small
	.stack
	.data
msg1	db 'Input n:',13,10,0
msg2	db 'The Median Is:',0
array	dw 100 dup(?)	;待输入
n		db '?'
count	db 0			;保存数组长度
count1	db 1
result	db 0			;保存中位地址
	.code
	.startup
	
	lea ax,msg1			;提示输入
	call dispmsg
	
	call readuib		;读入无符号位十进制整数
	call dispcrlf		;回车换行
	mov n,al
	mov count,al
	mov count1,al
	mov bx,offset array	;获取array首地址
start:
	call readsiw
	mov [bx],al			;读入数据
	call dispcrlf	
	add bx,2
	
	cmp n,0				;n等于0时候跳出,否则循环读取数据
	dec n
	jz	sort
	jmp start
sort:					;读入完毕,进入排序
	mov cl,count		
	dec cx				;循环count-1次,count,db型,只取cx低四位cl    
outlp:
	mov dx,cx           ;内循环cx次
    mov bx,offset array
inlp:
	mov ax,[bx]         ;取前一个元素
    cmp ax,[bx+2]       ;有符号数比较
	jl next            ;前一个元素不大于后一个元素,不交换标号

    xchg ax,[bx+2]      ;前一个元素大于后一个元素,则进行交换
    mov [bx],ax
next:        
	add bx,2            ;下一个元素
	dec dx                                       
    jnz inlp            ;内循环尾
    loop outlp           ;外循环尾
	
	mov bx,offset array

	
	mov al,count1		;选右边
	mov bl,2
	idiv bl
	mov result,al
	
	mov bx,0
done:					;取中间数
	cmp result,0
	jz output
	add bx,2
	dec result
	jmp done
output:
	mov ax,offset msg2
	call dispmsg
	mov ax,[array+bx]	;首地址+偏移量,找到第n/2个数
	call dispsib

.exit
	end
	

运行结果:

在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门