【汇编语言程序设计】将内存DATA开始存放的10个8位带符号二进制数进行由小到大排序的程序

如题所述

dseg segment
 a1 dw 1212h,3434h,5656h,7878h,9090h,2121h,4343h,6565h,8787h,9999h
 c equ ($-a1)/2
dseg ends

assume cs:cseg, ds:dseg
cseg segment
start:
  mov ax, dseg
  mov ds, ax

  mov cx, c*2
  dec cx
  dec cx
$0:
  mov bx, 0
$2:
  mov ax, a1[bx]
  cmp ax, a1[bx+2]
  jg $1
  xchg ax,a1[bx+2]
  mov  a1[bx], ax

$1:
  inc bx
  inc bx
  cmp bx, cx

  jl $2
  dec cx
  dec cx
  jg $0

  ;print result
  mov cx, c
  mov bx, 0
$3:
  mov ax, a1[bx]
  call print

  mov ax,0e20h
  int 10h

  inc bx
  inc bx
  loop $3

  mov ah,4ch
  int 21h

print proc near
  push cx
  push bx
  xor cx, cx
  mov bx, 10

  test ax, 8000h
  jz Q0
  push ax
  mov ah,0eh
  mov al,'-'
  int 10h

  pop ax
  neg ax

Q0:
  xor dx, dx
  div bx
  xor dx,0e30h
  push dx
  inc cx
  cmp ax, 0
  jnz Q0
Q1:
  pop ax
  int 10h
  loop Q1
  pop bx
  pop cx
  ret
print endp

cseg ends
end start

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-11-24
        CODE  SEGMENT
              ASSUME    CS:CODE
              ORG       100H
      START:  JMP       BEGIN
        DATA  DB        10,9,8,7,6,5,4,3,2,1
         NUM  EQU       $-DATA

      BEGIN:
              PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES
              LEA       SI,DATA
              MOV       CX,NUM
              CALL      SORTBYTE

              MOV       AH,4CH
              INT       21H

;===============================================
; 字节数组排序(有符号数冒泡排序
    SORTBYTE  PROC      NEAR
      ; 数组长度置入cx,字数组首地址置入 si
              PUSH      AX
              PUSH      CX
              PUSH      DX
              PUSH      SI
              PUSH      DI
              PUSHF
              PUSH      CX
              POP       DX
              DEC       DX
   @SORTBL1:
              MOV       CX,DX
              MOV       DI,SI
   @SORTBL2:
              MOV       AL,[DI+1]
              CMP       AL,[DI]
              JG        @SORTBNEXT  ; 从小到大(无符号换成 JB)
              XCHG      AL,[DI]
              MOV       [DI+1],AL
 @SORTBNEXT:
              INC       DI
              LOOP      @SORTBL2
              DEC       DX
              JNZ       @SORTBL1
              POPF
              POP       DI
              POP       SI
              POP       DX
              POP       CX
              POP       AX
              RET
    SORTBYTE  ENDP
;===============================================

        CODE  ENDS
              END       START

本回答被提问者和网友采纳
第2个回答  2019-12-23
#include"stdio.h"
void fun(int a[])
int i,j,t;
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
void main()
FILE *wf;
int a[10];
int b[10]={9,10,11,12,1,2,3,4,0,1};
int c[10]={1,2,3,4,13,14,15,16,2,3};
int i;
printf("请输入待排序的10个数:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
fun(a);
相似回答