⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 冒泡.asm

📁 汇编写得
💻 ASM
字号:
DATA SEGMENT
DAT  DB 10,-9,56,-4,-23,13,25,-35,0,37
COUNT DB 10,10             
DATA ENDS

CODE SEGMENT
     ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV ES,AX
      MOV BL,1
LP1: CMP BL,0
     JE LP4
     XOR BL,BL
     MOV CL,COUNT
     DEC CL

     push cx               ;新增
     LEA DI,DAT            ;装入有效地址
LP2:MOV AL,[DI]
      CMP AL,[DI+1]
      JLE LP3
      XCHG [DI+1],AL       
      MOV [DI],AL
      MOV BL,1
LP3:INC DI
      LOOP LP2
      pop cx               
      mov count,cl        
      JMP LP1             ;转移到LP1
                           
                           ;因为后面的一些大数已经排序好,无需再比较了以提高一些效率
                           
 LP4:MOV CL,10
      LEA DI,DAT
   SC:MOV AX,0
      MOV BH,2
      MOV AL,[DI]          ;取数
      CMP AL,0             ;如果是正数则跳
      JGE NEXT
      NEG AL               ;如果是负数 先将AL中的负数取补转成对应的正数
      push ax   
      MOV AH,02H           ;同时显示 负数的标记 '-'
      MOV DL,'-'           ;这个时候 ax 的值会因为 21h中断的调用而改变; 所以先要保存起来
      INT 21H              ; int 21h 中断将会有一个返回值
      pop ax               ;某些中断之后ax会改变
  NEXT:XOR AH,AH  
       DIV COUNT+1         ;除以 10 取 十位
       MOV DH,AH           ;ah 是余数 al 是商
       ADD AL,30H
       MOV DL,AL
       MOV AH,02H
       INT 21H             ;显示 十位上的数值(如果只是两位数的话)
       MOV AL,DH
       XOR AH,AH
       
       ADD AX,3030H                                                       
       MOV DL,AL           ;在显示时 判断是否是 大于 100 或者 小于 100 再根据判断结果来处理 DIV    
  
                           ;在这里,如果是2位数可以正确显示如果是3位则不能,所以最后的125显成了 <5
OUTP:  MOV AH,2
       INT 21H
       DEC BH              
       JZ XT
       MOV DL,BL           ;显示个位数
       JMP OUTP
   XT: DEC CL
       JZ DONE
       INC DI
       JMP SC
DONE:  MOV AH,4CH
       INT 21H
CODE ENDS
END START


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -