当前位置:文档之家› 汇编程序采用子程序结构对输入的10个整数冒泡排序

汇编程序采用子程序结构对输入的10个整数冒泡排序

;*********************************
DATA SEGMENT
STR DB 15 DUP(?)
DATA ENDS
;**********************************
STACK SEGMENT
DB 100 DUP(0)
STACK ENDS
;*********************************
CODE SEGMENT
;-------------------------------------------------
main proc far
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX ; into DS register
call shuru
call paixu
;////////////////////
mov ah,2
mov dl,0dh
int 21h
mov dl,0ah
int 21h ;换行
;/////////////////////
call xianshi

mov ax,4c00h
int 21h
main endp ;end of main part of program
;---------------------------------------------------------------
shuru proc near
MOV CX,10
LEA SI,STR
L1:PUSH CX
MOV DI,2 ;定义输入的为两位数
MOV CX,10 ;CX=10
MOV BX,0 ;BX=0
MOV DL,' ' ;输出一个空格
MOV AH,2
INT 21H
XOR AX,AX ;AX=0
L2:MOV AH,1 ;从键盘接受一个整数
INT 21H
SUB AL,30H
CBW ;比如说第一个数输入的是5,则AX=5。假设第二次输入4,AX=4
XCHG AX,BX ;交换以后BX=5,AX=0。 因为BX=5,所以交换后AX=5,BX=4
MUL CX ;乘以CX,因为AX=0,所以AX=DX=0。 AX乘以CX=10,所以AX=50
ADD AX,BX ;将BX+AX->AX中,所以AX=5。 AX+BX->AX中,所以AX=54
XCHG AX,BX ;交换AX与BX,所以AX=BX=5。 交换AX与BX,所以AX=4,BX=54
DEC DI ;DI减1,DI=1。 DI=0
JNE L2 ;DI不等于0,返回L2。
MOV [SI],BX ; 将BX=54送入[SI]
POP CX ;从堆栈中弹出数据,CX=10
INC SI ;SI=SI+1 等于下一个数据的地址
DEC CX ;CX=CX-1
JNZ L1 ; CX不等于0则循环
ret
shuru endp
;-----------------------------------------------------------------
paixu proc near
mov dx,9
loop1:
lea bx,STR ;取STR地址放在BX
mov cx,9
loop2:
mov al,[bx] ;AL=[BX]
cmp al,[bx+1] ; 与[BX+1]比较
jnc loop3 ;如果[bx]>=[bx+1]则跳到loop3
xchg al,[bx+1] ;[bx]<[bx+1] 就交换al=[bx+1] [bx+1]=al
mov [bx],al ;[bx]=al
loop3:
inc bx ;BX=BX+1
loop loop2 ;CX不等于0则循环
;
dec dx ;DX不等于0则循环
jnz loop1
ret
paixu endp
;--------------------------------------------------------------------------------
xianshi proc near
LEA BX,STR ;取STR地址给BX
MOV CX,10 ;CX=10
L6:PUS
H CX
MOV CL,10
MOV AL,[BX]
CBW ;将al扩展到ah
DIV CL ;ax=ax/10 同上面假设,al=54/10=5 ah=4
ADD AH,30H

;ah=ah+30h
ADD AL,30H ;al=al+30h
MOV CL,AH ;cl=ah=4
MOV DL,AL ;dl=5
MOV AH,2 ;输出5
INT 21H
MOV DL,CL ;dl=4
MOV AH,2 ;输出4
INT 21H
MOV DL,' ' ;输出空格
MOV AH,2
INT 21H
POP CX ;从堆栈中弹出数据放入CX中
INC BX ;BX=BX+1 等于下一个数据的地址
DEC CX ;CX=CX-1
JNZ L6 ;CX不等于0则循环
ret
xianshi endp
;-------------------------------------------------------------------------
CODE ENDS ;end of code segment
;**************************************************
end start


相关主题
文本预览
相关文档 最新文档