汇编语言程序设计一个小程序
在数据段的变量BUF中有10个字节型无符号的十进制数,它们以无序的方式存放着,设计一个程序将这些数据按由小到大的方式排列起来,并在屏幕上输出排好序的这10个数。(两数之间用空格分开)
如果楼主早一年注册,贴子(不是纯灌水)超过30,我会给你解答.
或者
楼主至少有一个思路,写了若干代码却卡在什么地方,我也会给你解答.
CODE SEGMENT ASSUME CS:CODE BUF DB 12,34,07,78,65,41,99,87,66,246 N EQU $-BUF START: PUSH CS POP DS PUSH CS POP ES LEA SI,BUF MOV CX,N CALL SORT LEA SI,BUF MOV CX,N CALL DSPBCD MOV AH,4CH INT 21H ;=============================== DSPBCD PROC NEAR CLD NEXT: PUSH CX LODSB MOV AH,0 CALL PRINT_AX;印出AX值 MOV AH,2 MOV DL,20H ;显示空白 INT 21H POP CX LOOP NEXT RET DSPBCD ENDP ;=============================== ;输出AX的ASCII到屏幕 PRINT_AX PROC NEAR MOV CX,0 ;清0 MOV BX,10 ;除法准备 PPAX1: MOV DX,0 ;清0 DIV BX ;AX /10 ,若1234 ,除10后,DL得余数4, PUSH DX ;保存, AX=1234,依次保存4,3,2,1 INC CX ;累加个数 OR AX,AX ;是否已除尽 JNZ PPAX1 ;不是,再除 MOV BL,CL ;存个数 PPAX2: POP DX ;后入先出,先印出第一数,然后第二.... OR DL,30H ;转ASCII MOV AH,2 ;存入字串缓冲 INT 21H LOOP PPAX2 ;下一个 RET PRINT_AX ENDP ;=============================== ; 单个字符串(或者字节数组)内部的排序(冒泡排序) SORT PROC NEAR ; 串长度置入cx,串首地址置入 si PUSH AX PUSH CX PUSH DX PUSH SI PUSH DI PUSHF PUSH CX POP DX DEC DX @SORTL1: MOV CX,DX MOV DI,SI @SORTL2: MOV AL,[DI+1] CMP AL,[DI] JA @SORTNEXT ; 无符号 升序 XCHG AL,[DI] MOV [DI+1],AL @SORTNEXT: INC DI LOOP @SORTL2 DEC DX JNZ @SORTL1 POPF POP DI POP SI POP DX POP CX POP AX RET SORT ENDP ;=============================================================== CODE ENDS END START
[此贴子已经被作者于2018-6-19 06:43编辑过]