微机原理上机第四次实验内容

本次实验内容:

  排序实验

实验目的:掌握用汇编语言编写气泡排序程序的思路和方法。

实验内容:

  使用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    
原文地址:https://www.cnblogs.com/elliottc/p/5054490.html