汇编实验(五)补充之有符号数(so easy)的冒泡排序

汇编实验(五)补充之有符号数的冒泡排序

关于有符号数和无符号数

我们的hua老师要求我们将无符号数的冒泡排序改为有符号数的冒泡排序,开始的时候一脸懵逼,网上有各种什么移码之类的说法,一头雾水根本看不懂。
后来发现一篇博客说的其实汇编语言是有处理无符号数和有符号数的比较的,就是(jl/jg)判断条件时针对有符号数的,(ja/jb)判断条件时针对无符号数的,后又翻了一遍课本感觉自己像个白痴,恨自己不好好听课。
还有,输入的时候需要出入有符号数的补码,证书就是他的二进制表示,负数的话就是除符号位以外取反,在末位加一,比如“-1”原码(都是说的8位二进制数字)是1000 0001,补码就是1111 1110末位加一,即1111 1111就是0ffH。

代码

	data segment
	org 3000h
	num	db 30h,35h,36h,37h,40h,79h,66h,78h,67h,0FFh,80h
	;0ffh,80h分别为-1和-128的补码
	data ends
	code segment
		assume cs:code,ds:data 
	start:
		mov ax,data
		mov ds,ax;装数据段
		
		mov cx,0ah;11个数据外层循环为10次
		mov bh,0;用来计数外层循环的次数,证明改进算法的效率
	outloop:
		push cx;外层循环的cx值
		mov si,offset num;数据首地址
		add bh,1;外循环计数
		mov bl,0;用于标记一个内循环的过程中发生交换次数
				;用于改进算法的标志位
	inloop:;内循环
		mov al,[si]
		cmp al,[si+1]
		jl	noswap	;jl为有符号数的比较
					;不要觉得有符号数比较有多么难,so easy
		xchg al,[si+1]
		mov [si],al
		mov bl,1
	noswap:
		inc si
		loop inloop
		
		cmp bl,0;判断内循环是否发生交换,如果无交换
		je exitip;说明数据的顺序已经符合要求,可以退出
		pop cx
		loop outloop
	exitip:
		mov ax,4c00h
		int 21h
	code ends
		end start

运行截图

在这里插入图片描述
在这里插入图片描述
可以看出这11个数据时排序的好的,其中80为**-128的补码,ff-1**的补码。
我们可以换个顺序测试这组数据,看看改进的冒泡排序有没有提升效率
在这里插入图片描述
我们只将最后五个数字的顺序打乱,可以试一试这时候改进算法的循环次数。
在这里插入图片描述
可以看出对于这种前一部分顺序比较好的数据来说,改进算法可以提升很大的效率。

发布了17 篇原创文章 · 获赞 16 · 访问量 1181

猜你喜欢

转载自blog.csdn.net/XYshaonianhaofang/article/details/103464954