微机原理上机第四次实验内容
本次实验内容:
排序实验
实验目的:掌握用汇编语言编写气泡排序程序的思路和方法。
实验内容:
使用DEBUG程序,从首地址1000H的内存区开始存放50个数,要求设计程序将这些数由小到大排序,排序后的数,仍放在该区域中。
代码:
DATAS SEGMENT STRING1 DB 0DH,0AH,'Pai xu jie guo:',0DH,0AH,'$' ;ORG 1000H ;MEM 0AAH,00BH,0BBH,02H,03H,45 DUP(0) ;存放50个数据进行排序用 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX ;以下为冒泡法排序 MOV BX,49 ;给BX第一次比较的次数49 L3:MOV CX,BX MOV SI,1000H ;把1000H地址赋给SI L1:MOV AL,[SI] ; CMP AL,[SI+1] ;两数比较大小 JB L2 ;目的数据小于原数据则转L2段 XCHG AL,[SI+1];交换数据 MOV [SI],AL;I KNOW L2:INC SI ;SI+1->SI LOOP L1 DEC BX;BX-1 JNZ L3; L4:LEA DX,STRING1 MOV AH,09H INT 21H CALL DISPL MOV AH,4CH INT 21H DISPL PROC MOV SI,1000H MOV CX,50 LOP:MOV AL,[SI] SHR AL,1; 右移 SHR AL,1 SHR AL,1 SHR AL,1 ADD AL,90H ;把AL中的十六进制数高位转换为ASCII码 DAA ADC AL,40H DAA MOV DL,AL MOV AH,02H INT 21H MOV AL,[SI] AND AL,0FH ADD AL,90H ;把AL中的十六进制数低位转换为ASCII码 DAA ADC AL,40H; DAA MOV DL,AL MOV AH,02H INT 21H MOV DL,' ' MOV AH,02H INT 21H INC SI LOOP LOP RET DISPL ENDP CODES ENDS END START