8086汇编语言(四) 冒泡排序等几个汇编程序

本文介绍了使用汇编语言编写的冒泡排序算法、键盘输入字符串的程序以及将两个数字转化为十进制并输出的示例。通过这些代码展示了基础的汇编编程技巧和数据处理过程。

冒泡排序等几个汇编程序

1. 冒泡排序

冒泡排序

DATA SEGMENT WORD PUBLIC 'DATA'       
	ORG 00H					
	ARRAY_SIZE DW 5    		;待排序的数的个数
	NUMBER_ARRAY DW 100D, 64D, 79D, 22D, 113D	;待排序的数
	PRIVIOUS DW 00H			;用来存放冒牌排序中比较时的数
	LAST DW 00H				;用来存放冒牌排序中比较时的数
	TEN DB 10				;数字10, 用于分解一个数
DATA ENDS
EXTRA SEGMENT WORD PUBLIC 'EXTRA'
EXTRA ENDS
CODE SEGMENT WORD PUBLIC 'CODE'    
	INITIIALIZE PROC    	;用来初始化段寄存器的过程    
		MOV AX, EXTRA          
		MOV ES, AX              
		MOV AX, DATA        
		MOV DS, AX        
		RET    
	INITIIALIZE ENDP    
	TERMINATE PROC        	;用来退出程序的过程
		MOV AH, 4CH        
		INT 21H          	;因为程序直接退出, 可以不需要加RET
	RET    
	TERMINATE ENDP      
	PRINTLN PROC        	;换行的过程
		PUSH AX        		
		PUSH DX        		;过程中要用到这两个寄存器, 先把原来的值存到栈里
		MOV AH, 2        	;功能号2是字符显示
		MOV DL, 0DH        	;DL寄存器存放打印字符, 这里是0D是换行的意思
		INT 21H        		;中断操作, 进行打印字符
		MOV DL, 0AH        	;0A是光标指向第一个字符的意思
		INT 21H        		;中断操作
		POP DX        	
		POP AX        		;将原来的值再放回对应的寄存器
		RET    				;过程结束, 返回
	PRINTLN ENDP
	PRINT_ARRAY PROC		;打印输出排序的数字
		; 算法: 将一个数字逐一与10相除, 余数入栈, 商继续除以10, 直到商为0, 此时将栈中的元素逐一出栈, 则可以得到这个数字每一位的数, 再+48可以得到每一位的字符数字, 再输出即可看到这个数字被打印出来了
		; 因为直接输出这个数, 会输出这个数的ASCII码, 不是我们想要的值, 所以要注意分解位数, 再+48输出
	    PUSH AX
        PUSH BX
        PUSH CX
        PUSH DX
        MOV DI, OFFSET ARRAY_SIZE	;获取内存中这组数字的第一个数的偏移地址
        MOV CX, [DI]				;将偏移地址放入CX寄存器
        MOV SI, OFFSET NUMBER_ARRAY	;获取内存中存放这组数字长度的位置的偏移地址
        MOV BX, 0
        AGAIN:
            MOV AX, [BX+SI]			;将第一个数字的值放入AX中, 采用基址间址寻址
            PUSH CX					;下面要用到CX寄存器, 先将之前的内容入栈, 用完后再出栈即可恢复原来的功能
            PUSH BX					;下面要用到BX寄存器
            XOR CX, CX				;CX置零
            DIVISION:
                IDIV [TEN] 
                XOR BX, BX
                MOV BL, AH
                ADD BL, 48
                PUSH BX   
                MOV AH, 0   
                INC CX
                CMP AX, 0  
            JNE DIVISION
            OUTPUT:
                XOR AX, AX
                POP AX
                MOV DX, AX   
                MOV AH, 2
                INT 21H
            LOOP OUTPUT
            MOV DL, ' '
            INT 21H 
            POP BX
            ADD BX, 2
            POP CX     
        LOOP AGAIN
        POP DX
        POP CX
        POP BX
        POP AX
        RET
	PRINT_ARR
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值